There are a lot of nice advices here already. So let's just add one thing: client side caching. If you can give unique names to your assets, that changes whenever the content change (like a hash of the file), you can "heavy" cache those assets in the client.
Since clients will (probably?) not be fetching the assets again, the application gets really fast. It really makes a HUGE difference.
If you cannot give them unique names like that, you can still leverage "light" caching. So the clients will still request the files, but if they're not changed they will get a 304 (Not Modified) HTTP response, saying they can use the old copy.
The client caching is controlled by HTTP headers sent with the response. You will probably need to configure your server to send those. It can be tested in chrome developer tools (make sure "disable cache" option is disabled for this).