It depends a lot on your use case. There are many options. In your case, the size of the contract is huge, so "small" saving tricks will not work. So I propose one of the following.
- You might use external Libraries (You offload some logic there)
- You separate logic into two or more contracts.
- You might resort to using the Dimond proxy pattern (which allows contracts of unlimited size)
NOTE: You should use a solidity optimizer during deployment/compiling contracts (That can lower the contract size by a considerable amount)