При запуске нового большого проекта я решил сделать его модульным. Обычно в больших проектах не все модули используются конкретным пользователем, поэтому я загружаю их по требованию. Например, если в проекте будет более 50 модулей, большая вероятность, что пользователь работает только с 10-.
Такая архитектура позволяет вам иметь относительно небольшой исходный код.
Модули хранятся на сервере и загружаются вызовом AJAX, оценивая текст responseText в обратном вызове AJAX. Единственная проблема с этим, вы должны отслеживать зависимости модулей, которые также могут храниться внутри модулей. У меня есть класс с именем Module, и я проверяю каждый новый экземпляр модуля на наличие в задаче. Если он еще не существует, я загружаю его с сервера.