Как отключить prefetch в vue\nuxt и зачем это нужно
По умолчанию Vue
\Nuxt
помогают нам оптимизировать загрузку наших чанков и подставляют скриптам на странице rel=prefetch\preload
, чтобы браузер мог подгрузить их заранее, подробнее про prefetch здесь. В небольших приложениях это не вызывает проблем, но с ростом приложения вы можете столкнуться c проблемой просадки FCP, как с этим бороться, расскажу на своем примере из работы сайта biglion.ru
Под капотом биглиона работает vue в SSR режиме на fastify — подробный гайд, как поднять SSR в vue2 уже есть в нашей ленте. Так вот при росте приложения, рос и javascript, количество подключаемых файлов только росло, как и функциональность всего биглиона, хотя количество яваскрипта необходимое для загрузки страницы оставалось +- таким же.
Для vue ssr приложения отключение prefetch
будет происходить в параметрах createRenderer
. На проекте эта логика расположена в server.js
function createRenderer(bundle, options) { return vueRenderer.createBundleRenderer(bundle, Object.assign(options, { cache: new LRU({ max: 10000, maxAge: 1000 * 60, }), basedir: resolve('./dist'), runInNewContext: false, shouldPrefetch: (file, type) => { return false; }, clientManifest, } )); }
Решением проблемы в моем случае это добавление
shouldPrefetch: (file, type) => { return false; },
После добавления параметра количество скриптов сократилось до 34 итого -21 скрипт
Для разработчиков использующих vue через vue-cli
решение будет в виде добавления параметров в vue.config
config.plugins.delete('prefetch') config.plugins.delete('preload')
В Nuxt2
все немного сложнее, но тоже есть инструменты для управления prefetch
\preload
— например отключение prefetсh
для nuxt-link
<nuxt-link :to="`/home/${home.objectID}`" no-prefetch=""> <home-card :home="home"> </home-card> </nuxt-link>
В nuxt.config.js
можно отключить prefetch
глобально
router: { prefetchLinks: false }
Если есть чем дополнить статью или появились вопросы — welcome в комментарии.
p.s. Если у вас проблема с nuxt3
и загрузкой всех ассетов как prefetch
— ознакомьтесь с этим github issue. На момент написания статьи, баг в nuxt3 был исправлен 7 часов назад.
Последняя редакция 3 февраля, 2023 в 07:02