В основе работы esbuild лежит построение графа зависимостей, в котором каждая точка входа становится корнем отдельного поддерева. При увеличении числа входных файлов система перестраивает стратегию обхода графа: вместо одного корневого дерева формируется набор независимых обходов, частично разделяющих общие узлы.
Каждая точка входа инициирует:
Ключевое наблюдение: стоимость работы esbuild не растёт линейно с числом точек входа, если значительная часть зависимостей пересекается.
При наличии нескольких точек входа, использующих общий набор библиотек, esbuild сохраняет промежуточные результаты разбора модулей в памяти сборки.
Это приводит к следующей модели поведения:
В сценариях с высокой степенью общих зависимостей увеличение числа входов влияет на скорость слабо. Основной рост затрат связан не с повторной обработкой модулей, а с дополнительной организацией точек входа и финальной упаковкой.
При увеличении количества входных файлов появляется ряд дополнительных факторов нагрузки:
Каждая точка входа запускает независимую цепочку обхода. Даже при пересечениях зависимостей esbuild вынужден проверять достижимость модулей из разных корней.
Каждый вход обычно соответствует отдельному бандлу или набору чанков. Увеличивается работа:
esbuild параллелизует обработку, но управление большим числом независимых задач требует координации потоков выполнения, что создаёт накладные расходы на синхронизацию.
Резолвинг модулей в esbuild реализован крайне быстро, однако при множественных точках входа повторяются следующие операции:
package.json exports).Хотя кеширование снижает стоимость повторных операций, сам факт увеличения количества стартовых узлов графа увеличивает количество проходов по системе модулей.
Наиболее важный фактор, влияющий на масштабируемость — доля пересекающихся зависимостей.
Если точки входа используют одни и те же библиотеки (React, lodash, utility-модули), наблюдается:
В таких условиях добавление новых точек входа приводит к амортизированному росту стоимости.
Если входы представляют собой независимые приложения или микрофронтенды:
Множественные entry points в esbuild часто используются для генерации отдельных бандлов или библиотечных модулей. При этом важно различать два подхода:
Каждая точка входа формирует самостоятельный граф и отдельный набор файлов. В этом случае:
При включённом code splitting esbuild:
Именно второй режим лучше масштабируется при увеличении числа точек входа.
esbuild активно использует многопоточность. При увеличении числа входов наблюдается следующая динамика:
Ключевой фактор — не количество входов само по себе, а степень параллельной загруженности системы:
Для анализа влияния точек входа используется metafile,
который позволяет оценить:
При росте числа entry points метафайл показывает:
Эти данные позволяют определить, является ли увеличение входов эффективным или приводит к избыточной работе сборщика.
На уровне архитектуры проекта влияние числа точек входа на скорость уменьшается при следующих условиях:
При несоблюдении этих условий рост числа входов приводит к увеличению времени инициализации графа и генерации выходных файлов.