Vue 3 и Vite — идеальная пара для современных SPA, но переход на Composition API может показаться сложным, если вы привыкли к Options API. В этой статье мы разберём, как мигрировать проект, настроить Vite и провести оптимизацию производительности, чтобы ваш код был быстрее и легче поддерживаемым. Мы сосредоточимся на практических шагах: обновление зависимостей, рефакторинг компонентов, настройка сборки и устранение узких мест в реактивности.

Разбор задачи

Миграция на Composition API требует от разработчика пересмотра структуры компонентов: data, computed, methods заменяются на ref, reactive, computed, watch. Это повышает гибкость и переиспользуемость кода, но может вызвать проблемы с производительностью, если реактивные объекты используются неэффективно. Vite, в свою очередь, предлагает быстрый старт, Hot Module Replacement и продвинутую обработку ES модуля. Однако без правильных настроек вы можете столкнуться с избыточными бандлами и медленной загрузкой. Наша задача — минимизировать размер бандла, ускорить время первого рендеринга и обеспечить плавную работу реактивности.

Пошаговое решение

1. Обновите проект до Vue 3, установив последние версии Vue, @vue/compiler-sfc и Vite. 2. Включите Composition API, заменив Options API в каждом компоненте: data → reactive, methods → функции, computed → computed. 3. Настройте Vite: в vite.config.js включите rollup-plugin-visualizer для анализа бандла, используйте tree-shaking, подключите @vitejs/plugin-vue. 4. Оптимизируйте реактивность: избегайте ненужных watch, используйте shallowRef для больших объектов, разделяйте state на независимые реактивные части. 5. Профилируйте сборку с помощью Webpack Bundle Analyzer, удалите неиспользуемые зависимости, примените lazy-loading роутов. 6. Настройте кеширование статических ресурсов в Nginx, включите HTTP/2 и gzip. 7. Проверьте производительность с Lighthouse, исправьте выявленные проблемы: удалите лишние CSS, минифицируйте JS, используйте prefetch для критичных скриптов. После выполнения этих шагов ваш проект будет работать быстрее, а код станет более модульным и легким для сопровождения.

Рабочий код

// пример перехода на Composition API с Vite
import { ref, computed, watch } from 'vue'
import { createApp } from 'vue'
import App from './App.vue'

// 1. создаём реактивные данные
const count = ref(0)

// 2. вычисляемое свойство
const doubled = computed(() => count.value * 2)

// 3. реакция на изменение
watch(count, (newVal, oldVal) => {
  console.log(`count changed from ${oldVal} to ${newVal}`)
})

// 4. экспортируем в компонент
export default {
  setup() {
    return { count, doubled }
  }
}

// 5. подключаем Vite
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()]
})

Типичные ошибки

  • Не использовать реактивные переменные, а напрямую менять props.
  • Перепутать ref и reactive при вложенных объектах.
  • Не оптимизировать watch: лишние вычисления внутри колбэка.
  • Забыть об asyncSetup при асинхронных запросах.

FAQ

Как ускорить сборку Vite?

Включите esbuild для JS/TS и задайте pre-bundle для тяжёлых зависимостей. Используйте кэширование и включите tree-shaking.

Можно ли использовать Options API вместе с Composition API?

Да, но старайтесь держать логику в Composition API, чтобы избежать конфликтов реактивности и путаницы.

Как измерить производительность после миграции?

Используйте Lighthouse и Vue DevTools Performance, сравните время монтирования и FPS. Также смотрите на количество реактивных подписок.

Заключение и чек‑лист

  • Проверьте все ref/reactive в setup.
  • Оптимизируйте watch, добавьте deep:false/true по необходимости.
  • Включите Vite plugins: vue, tsconfig-paths, legacy.
  • Тестируйте сборку в продакшн режиме.
  • Сравните метрики с Version 2.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *