What I recommend you do is keep dependency information separate from the source code -- don't call JS.require() in source files, and express dependencies using JS.Packages config in a separate file.
When JS.require() loads your code, look in the console. Are there separate 'Loading' and 'Executing' lines, or do you see combined 'Loading and executing' lines? The former means the code is being downloaded with XHR then run using eval(), which might be slow.
It sounds like you might benefit from using the build tool to combine all your source into one file, rather than loading all of it asynchronously. Use this to combine all your app's code, and just include it with a script tag: