Another problem I faced in keeping the processing on the client-side is that the processing speed becomes dependent on the client's device.
How are such online chess engines usually built?
I don't think storing the game state in memory is good as the server has to serve many clients. Maybe storing in a database in the same server might work...
If I use a client-server architecture, won't I be restricted to serve one client request per server at a time? If yes, how are online chess engines able to serve unlimited clients at the same time?