BetaДокументация для beta‑теста, возможны ошибки и неточности.
Перейти к содержимому

WARNING

Эта статья сгенерирована AI и требует ручной доработки.

Производительность и FEOD ​

Эта статья описывает, как правила FEOD помогают управлять производительностью за счёт структуры, а не фреймворк-специфичных трюков.

1. Разделение по страницам и модулям ​

Pages — естественные точки входа. Это позволяет легко подключать модули по требованию, а не грузить всё сразу.

ts
// app/router.ts — Vue Router
import { createRouter, createWebHistory } from 'vue-router'

export const router = createRouter({
  history: createWebHistory(),
  routes: [
    { path: '/reports', component: () => import('@/pages/reports.vue') }
  ]
})

При статическом import ReportsPage from '@/pages/reports.vue' страница входит в начальный граф загрузки. Функция import() создаёт точку разделения: роутер загружает страницу при переходе на /reports.

2. Тонкий Common уменьшает размер бандлов ​

common доступен всем уровням, но сам по себе не загружается целиком. На размер сборки влияют используемые импорты и побочные эффекты зависимостей. Держите common минимальным и переносите тяжёлую логику в модули.

3. Публичный API помогает tree-shaking ​

Оставляйте публичный API небольшим. ESM-экспорты позволяют сборщику анализировать использование; сам index.ts не гарантирует удаление кода с побочными эффектами.

ts
// modules/Reports/index.ts
export { buildReport } from './api/buildReport'
export type { Report } from './types'

Потребитель использует функцию через публичный API:

ts
// pages/reports.vue — внутри <script setup>
import { buildReport } from '@/modules/Reports'

Это показывает границу импорта. Результат tree-shaking нужно проверять по production-сборке конкретного проекта; этот фрагмент не измеряет размер бандла.

4. Изоляция модулей снижает связность ​

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

5. Избегайте "монолитных" модулей ​

Разделение по задачам создаёт удобные границы для отложенной загрузки. Сам перенос файлов в подмодули не меняет объём загрузки без изменения импортов.

modules/
  Analytics/
    modules/
      Events/
      Dashboards/

Например, родительский модуль может экспортировать функцию отложенной загрузки:

ts
// modules/Analytics/index.ts
export async function openDashboard() {
  const { openDashboard } = await import('./modules/Dashboards')
  return openDashboard()
}

modules/Analytics/modules/Dashboards/index.ts экспортирует openDashboard. Этот подмодуль загружается при вызове функции; Events не должен статически импортировать Dashboards.

6. App остаётся лёгким ​

app должен содержать только запуск, роутинг и интеграции. Чем меньше логики в app, тем меньше кода попадает в критический путь загрузки.