Алгоритм конкатенации js-файлов для каждой страницы на лету

Хочется сделать один js-файл на страницу.
Думаю над таким алгоритмом.

  • Сразу после процедуры деплоя пользователи грузят кучу отдельных js-файлов, всё как обычно.
  • Первый пользователь, зашедший на страницу, ставит lock в кэш (на 1 минуту), означающий, что именно ему повезло создать единый js-файл. При генерации страницы пути всех подключаемых js-файлов сохраняются в массивчик (у нас уже подгрузка яваскритпа идёт не просто через тег script, а через обёртку), по окончании генерации запускается процедура создания единого js-файла с сохранением его на диск под md5-именем. После успешного сохранения в кэш пишется ключ текущей страницы и значение — путь к сохранённому единому js-файлу и стирается lock.
  • При заходе пользователя на страничку делается проверка ключа, и если он есть — грузим единый файл, нет — см. предыдущий пункт.

Ключ и lock строятся по типу страницы (не по урлу) и учитывают версию интерфейса и уровень прав пользователя (админам могут понадобиться дополнительные скрипты).

Плюсы — всё прозрачно и если механизм засбоил, ничего не отвалится.
Минусы — не используется кэш браузера (лечится отдельным libs.js), дополнительная кратковременная нагрузка сразу после выкладки новой версии и необходимость на фронтенде держать серверный язык.

LEAVE A COMMENT