Пост 4. Оптимизатор: Ресурсы и золотые правила
Внутренняя оптимизация Vue 3 великолепна, но CRP (путь до первых пикселей) также зависит от того, что и как мы отдаем браузеру. Даже если Vue внутри оптимизирован, долгая работа JS блокирует главный поток (Main Thread), а пока главный поток занят, браузер не может делать Layout и Paint (то есть CRP стоит на месте). Поэтому оптимизация JS напрямую ускоряет CRP.
🧩 Последний ресторан: Если вы хотите быстрее получить свою еду - не стоит беседовать с официантом о том что hh убили нейросети, просто сделайте заказ. С приложением так же - не грузите весь JS бандл на первую отрисовку.
⚙️ Под капотом: Code Splitting: Используйте динамические импорты () => import('./Heavy.vue') в роутере. Suspense: Позволяет добавить fallback, чтобы отрисовать "скелет" UI, пока асинхронные компоненты грузятся. Это убирает белый экран и улучшает FCP. Виртуализация: Для больших список используйте vue-virtual-scroller или другие инструменты виртуализации. Благодаря ним в DOM рендерятся только видимые строки.
💡 Золотые правила: 1. Декомпозиция: Дробите монолитные состояния. Чем точнее реактивность отследит зависимость, тем меньше компонентов перерисуется. 2. computed: Используйте computed вместо методов в шаблоне. Методы вызываются при каждом рендере, а computed кэшируется и пересчитывается только при изменении зависимостей, что снова экономит время выполнения JS (и ускоряет CRP) 3. shallowRef: Если вы работаете с большими объектами и не меняете их вложенные свойства, используйте shallow-версии. Это отключит глубокий Proxy-трекинг. Вы не только сэкономите CPU, но и избежите проблем с памятью и лишних триггеров при изменении вложенных свойств, которые UI не отслеживает
· 30.09
К виртуализации списка стоит добавить серверную пагинацию: если API возвращает весь каталог, браузер всё равно скачает и распарсит огромный JSON, даже когда в DOM двадцать строк. Я бы отдельно замерял сеть, разбор ответа и рендер. В ваших примерах данные загружаются порциями или целиком?
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 30.09
Да, конечно, спасибо за замечание) Просто в посте затрагивал чисто клиентскую часть А так обычно ставили курсорную пагинацию на большие списки
Хотя был кейс, когда мы имеем небольшой список на ~100 элементов, но каждый элемент это довольно тяжелая карточка с 20+ интерактивными компонентами (дродауны, дейтпикеры и тд). В итоге у пользователей фризился скролл, а при ресайзе экрана вообще происходили страшные вещи. Проблему решил виртуальный скролл
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён