Вообще если вы делаите приложение на AJAX, то ваша архитектура должна быть похожа на SPA. А в нём первый запрос к серверу загружает приложение, которое настраивает себя, вешает все обработчики и тд. То есть вы подгружаите критический css и js просто как теги ("app.js и стили с лоудерами и главной страницей") а остальные просто ленивой подгрузкой в фоне. Так получаеться что пользователь быстро получает страницу которую хотел, но все зависимости подгружаються и для других страниц в фоне. В итоге когда вы будите переходить по страницам у вас будет меняться лишь контент.
Тот же самый backbone.js. В нём ваше приложение скачиваеться, создаёт модели(делает AJAX к серверу), передаёт во View и отрисовывает сраницу. Все нужные для работы приложения зависимости просто добавлены как теги(пока они не загрузяться ничего не сработает дальше). А расширения для контента, типа плагина для графиков, видео какое-то вы можите в фоновом режиме просто подгрузить. Ведь это одностраничное приложение, смысл постоянно перезагружать расширения.
Вы можите просто добавить проверку типа:
if(window.$){
//если у нас есть jQuery
// то приложение идёт дальше работать
}else{
//вызываем какую-то функцию установщик
loadExtension('jquery.js')
}
У вас может быть просто массив зависимостей, которые вы можите подгрузить в фоне. Но когда у вас запрашивается страница /home/about требующая графиков например, вы пререндером на сервере можите запросто добавить этот плагин как просто тег script, а приложение когда будет бегать по зависимостям через if проверит есть он или нет, т.к. вы его подгрузили уже,то он проигнорируеться и у вас не будет дуближей.