Thats what code splitting is for. But don't create 500 split points (each split point has some overhead), e.g. one for each screen! Make it more meaningful so you may end up with 20 split points or so.
As of today, when you introduce split points in your code you have to make sure that the code behind that split point is exclusive to that split point. Everything thats not exclusive to a single split point will be loaded on app start.
Example: You have 2 pages and each is behind a code split point. If both pages make heavy use of the same GWT Widgets, all these widgets will be downloaded when the app starts although they are behind a split point. Thats because they are not exclusive to a single split point anymore.
So if you choose your split points larger, you have a better chance to have more exclusive code behind that split point.
In an upcoming release (hopefully GWT 2.5) a new code splitting algorithm will be introduced that uses heuristics to merge smaller split points into larger ones to make more code exclusive to a split point and thus reducing the initial download when the app starts. With such an algorithm you could define 500 split points in your code but may end up with 20 real split points after compiling the app.
Also keep in mind if your split points have a certain size, its a good idea to give the user some feedback that your apps now loads additional code from the server.
-- J.