youngmysteriouslight
@youngmysteriouslight
ТК, ТТ, JS, FP, WM

Какие есть современные подходы организации веб-приложения с большой кодовой базой?

Рассматриваю различные варианты для будущего проекта; прошу подсказать, какие существуют на данный момент решения, подходы, технологии.

Допустим, разрабатывается приложение с большой (>> 1Мб) кодовой базой на JS. В этот код есть несколько точек входа. Это означает, что одни страницы сайта или одни веб-приложения этого проекта будут подгружать один набор модулей, другие — другой набор. При этом каждый из этих сайтов/страниц/веб-приложений может потенциально запросить любой модуль по необходимости (существенно зависит от действий пользователя).

Сделать одну сборку не получится, потому что время доступа будет необоснованно завышено. Добавим к этому, что мы предполагаем, что пользователь может не иметь высокоскоростное подключение, не посещать сайт до этого и т.п.
Как мне видится, единственное решение заключается в использовании асинхронной загрузки модулей.

С другой стороны, программисты должны иметь возможность писать свои (слабо связанные) модули, как если бы весь код был загружен на клиентскую машину или как если бы исполнение происходило на сервере.
По-другому говоря, ищется инструмент, который бы позволил абстрагироваться от вышеописанной проблемы асинхронной загрузки минимального необходимого набора модулей.

Вопрос №1. Достаточно ли RequireJS/AMD для решения поставленной задачи.
Мои соображения
По описанию, именно ради асинхронной загрузки модулей он и создавался.
Впрочем, require.js содержит один недостаток, который делает его в текущем виде непригодным для решения первоначальной задачи. Если по результатам обсуждения окажется, что RequireJS является тем решением, которое мне нужно, я создам отдельный вопрос про этот недостаток.

Вопрос №2. Есть ли информация о чужом опыте: кто делал аналогичное, какие были сложности, какие подходы, решения, нюансы?

Вопрос №3. Может случиться конфликт зависимостей версий одного модуля у двух разных зависимых модулей. Обычно в таких случаях конфликты разрешаются статически, при помощи системы контроля версий и менеджера пакетов, таким образом к клиенту попадает только одна версия модуля.
Разрешение конфликтов в run-time, то есть загрузка двух версий одного модуля и разделение пространства имён, является ли существенно усложняющим фактором, то есть нужен ли принципиально другой инструмент, чем тот, который решает исходно поставленную задачу?

Благодарю за внимание.
  • Вопрос задан
  • 203 просмотра
Решения вопроса 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
requirejs умеет только в amd, то есть с commonjs-модулями (а в npm подавляющее большинство такие) и тем более es6 ничего не получится. В общем и целом, брать его сейчас смысла нет.

webpack + code splitting ответ на ваш вопрос.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
edli007
@edli007
full stack, team lead
а чем стандартный вебпак плох? он умеет как и раздельные файлы для точек входа делать, так и выделять в общий файл повторяющиеся модули, причем с возможностью задавания критериев насколько часто они должны повторяться.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы