1. Логика работы SPA - грузится сразу на клиент при первом обращении.
2. По событиям (читай "кликам") - подгружается только разметка блоков и/или JSON-данные по ajax (или данные непрерывно поступают через websocket).
3. Если функционал страницы специфический (сильно отличается от обычных): то также загружаются дополнительные JS-модули через AJAX.
Обычно используется 3 основных составляющих:
1. Роутер - передача управления нужному модулю на основе URI-строки.
2. Application - код основного приложения
3. Шаблонизатор - для вставки полученных через AJAX значений в разметку.
Для подгрузки блоков через AJAX:
https://github.com/xmoonlight/includeHTML
Для шаблонизации данных:
https://sitecoder.blogspot.ru/2017/01/rex-tiny-tem...