Releases: prefetch-ru/prefetch
Releases · prefetch-ru/prefetch
v1.1.3
v1.1.3
Оптимизация производительности
- Устранены избыточные
new URL()— флагisCrossOriginвычисляется один раз и передаётся через всю цепочкуpreload → doPreload → preloadSpec/preloadLink/preloadFetch(ранее до 4-5 вызововnew URL()на каждый prefetch); - MutationObserver: точечное наблюдение — при DOM-мутациях обрабатываются только новые ссылки из
addedNodes, без пересканирования всего DOM; - MutationObserver:
requestIdleCallback— обработка новых ссылок не блокирует UI при массовых вставках (SPA-рендеринг); flushSpecBufferбез.slice()— массивы URL передаются напрямую в Speculation Rules JSON, без создания копий.
Реактивное обновление сети
navigator.connection.onchange— состояние сети (effectiveType,saveData) обновляется при смене типа соединения (ранее кэшировалось один раз при загрузке);- Корректная очистка listener в
destroy().
Исправления
- Битрикс:
pathname/searchвместоhref— проверки/bitrix/иsessid=больше не могут ложно сработать на подстроках в домене или hash; - Удалена мёртвая переменная
chromiumVer— не использовалась после v1.1.1.
Full Changelog: v1.1.2...v1.1.3
Integrity (SRI) IIFE — prefetch.min.js
sha384-GLzh62lOA1yEK5qmVJ40WMBv1E/5o4Y4dyMMbTH17EVJn7LWWhNiZQZqvMqJpI/9
v1.1.2
v1.1.2
Cross-origin prefetch для всех браузеров
- Убрано ограничение
chromiumVer— теперь Firefox и Safari поддерживают cross-origin prefetch; mode: no-cors— для cross-origin fetch используется no-cors mode (opaque response прогревает кэш);- Проверка
r.type === "opaque"— корректная обработка успешного no-cors response; - Cross-origin через fetch —
<link rel="prefetch" crossorigin="anonymous">требует CORS headers, поэтому cross-origin всегда используетfetch()сno-cors.
Методы cross-origin prefetch по браузерам
| Браузер | Метод |
|---|---|
| Chrome/Chromium 109+ | Speculation Rules API (если включены) или fetch() |
| Firefox | fetch() с mode: no-cors |
| Safari/iOS | fetch() с mode: no-cors |
Full Changelog: v1.1.0...v1.1.2
Integrity (SRI) IIFE — prefetch.min.js
sha384-BDLxwRTwyIWnAEmc+2Rkw41jVvctV3HxxTu1ryrmagtHh18GekSP+bfqy5/YswEW
v1.1.0
v1.1.0
Архитектура
- Единое ядро —
src/core.js+ entrypoints (IIFE/ESM) через Rollup; - Версия из package.json — инжектится при сборке (
__VERSION__); - Генерируемые файлы —
prefetch.js,prefetch.esm.js,dist/.
Производительность
- Speculation Rules буферизация — URL группируются и вставляются одним
<script>за idle tick; - MutationObserver оптимизация —
querySelectorвместоquerySelectorAll; - navigator.userAgentData — с fallback на UA sniffing;
- parseUrl() — один
new URL()вместо двух.
Безопасность и приватность
- Cross-origin Speculation Rules —
referrer_policy: no-referrer+requires: ['anonymous-client-ip-when-cross-origin']; - Cross-origin fetch — без
Purposeheader (избегаем preflight),credentials: 'omit',referrerPolicy: 'no-referrer'; - Safety timeout — 30 сек предохранитель для
<link rel=prefetch>с удалением key при неуспехе; - Блокировка 3G — prefetch отключается на 3G соединениях.
Жизненный цикл
- destroy() — полная очистка: таймеры,
touchCancel,AbortControllers, idle callbacks, буфер SpecRules; - flushSpecBuffer — проверяет
disabledпослеdestroy(); - pageshow — обновление
currentKeyдля bfcache restore; - popstate/hashchange — поддержка SPA-гибридов.
Совместимость
- window.PrefetchRu — основной API (избегаем коллизий с
window.Prefetch); - 304 как успех — HTTP 304 Not Modified считается успешным prefetch;
- data-prefetch-specrules-fallback — опциональный fallback при Speculation Rules.
Full Changelog: v1.0.10...v1.1.0
Integrity (SRI) IIFE — prefetch.min.js
sha384-mtWj+Hx/5xw4Vs9KyuZGevAJ2CfZLIesU5FqxBHM54PoADhcKgBjMzQuq3ggf+rh
v1.0.10
v1.0.10 — feature-detection и исправления надёжности
Исправления:
Feature-detection для IntersectionObserver/MutationObserver
- Viewport режим и DOM наблюдатель теперь проверяют наличие API перед использованием;
- В старых браузерах/WebView скрипт не падает с exception, просто отключает недоступные функции.
Откат ключа при неудачном запросе
- Если
document.headотсутствует илиfetchнедоступен, ключ удаляется изpreloaded; - Повторная попытка предзагрузки теперь возможна (ранее ключ блокировал навсегда).
Модификаторы в mousedown
- При нажатии с Ctrl/Meta/Shift/Alt (открытие в новой вкладке) префетч не запускается;
- Экономит ресурсы — кэш новой вкладки всё равно отдельный.
Integrity (SRI) IIFE — prefetch.min.js
sha384-k81u5ASBRvPtzLbZh+DsaSsEdh6Nnl+hl3UYbDbaXowc9ju9C+gRakWVyBJj4jQv
v1.0.9
v1.0.9 — исправления стабильности и надёжности
Исправления
Guard от двойной инициализации
- Защита от повторной загрузки скрипта через маркер
__prefetchRu; - При ошибках интеграции, SPA с повторным инжектом, A/B-тестах — больше не создаются дублирующиеся event listeners.
Единая шкала времени
Date.now()вместоevent.timeStampдля надёжного анти-touch дубляжа;- Исключает edge-case баги в браузерах с разными системами отсчёта timeStamp.
Точная проверка опасных путей
- Все блокировки (
/login,/auth,/cart,/addи др.) теперь проверяются по сегментам pathname; - Больше не блокируются безобидные URL:
/author,/cartoon,/authentication,/additional.
Оптимизация ресурсов
- MutationObserver запускается только с viewport режимом;
<link rel="prefetch">удаляется из DOM после загрузки — не раздувает<head>на долгоживущих страницах.
Full Changelog: v1.0.8...v1.0.9
Integrity (SRI) IIFE — prefetch.min.js
sha384-odT5BaFB94lY2uR5v3aTTzI20laOsz7ma8zd/FecVJLZLg0rStzzPsHR9bpAC6NE
v1.0.8
v1.0.8 — добавлена ESM-версия
ESM версия
Добавлена ESM версия библиотеки для использования в современных бандлерах (Vite, Webpack, Rollup) и <script type="module">.
Новые файлы в npm пакете:
prefetch.esm.js— ESM версияdist/prefetch.esm.min.js— минифицированная ESM
Использование:
import Prefetch from '@prefetchru/prefetch'CSP nonce:
- При прямом подключении
<script type="module" src="prefetch.esm.js" nonce="...">— nonce определяется автоматически - При использовании через бандлер — передавайте через
<body data-prefetch-nonce="...">
SSR: ESM версия безопасна для серверного рендеринга — возвращает заглушку если нет window.
v1.0.7 — Улучшения стабильности и точности
Исправления и улучшения:
- Улучшена обработка событий мыши;
- mouseleave вместо mouseout — событие больше не срабатывает ложно при переходе курсора на вложенные элементы внутри ссылки (например,
<span>,<img>); - Защита от дублирования таймеров — при множественных mouseover по вложенным элементам больше не создаются лишние таймеры предзагрузки;
- Улучшена фильтрация ссылок;
- Исключение пустых href — ссылки
<a href="">и<a>без атрибута href теперь игнорируются (часто используются как кнопки с JavaScript-обработчиками); - Проверка текущей страницы — больше не пытаемся префетчить страницу, на которой уже находимся;
- Точная проверка action-путей;
- Пути
/add,/delete,/removeтеперь блокируются только как отдельные сегменты URL; - Ссылки типа
/address,/additional,/deliciousбольше не блокируются ошибочно; - Регистронезависимость расширений;
- Файлы .PDF, .ZIP, .DOC и т.д. теперь корректно распознаются независимо от регистра.
Full Changelog: v1.0.7...v1.0.8
Integrity (SRI) IIFE — prefetch.min.js
sha384-nNS1JL47ofhJMYvmWpvqMewFJ5iYNbVM1VOJs+IHoicVzN3cWbMFxuki4n2pmdck
v1.0.7
v1.0.7 — Улучшения стабильности и точности
Исправления и улучшения:
- Улучшена обработка событий мыши;
- mouseleave вместо mouseout — событие больше не срабатывает ложно при переходе курсора на вложенные элементы внутри ссылки (например,
<span>,<img>); - Защита от дублирования таймеров — при множественных mouseover по вложенным элементам больше не создаются лишние таймеры предзагрузки;
- Улучшена фильтрация ссылок;
- Исключение пустых href — ссылки
<a href="">и<a>без атрибута href теперь игнорируются (часто используются как кнопки с JavaScript-обработчиками); - Проверка текущей страницы — больше не пытаемся префетчить страницу, на которой уже находимся;
- Точная проверка action-путей;
- Пути
/add,/delete,/removeтеперь блокируются только как отдельные сегменты URL; - Ссылки типа
/address,/additional,/deliciousбольше не блокируются ошибочно; - Регистронезависимость расширений;
- Файлы .PDF, .ZIP, .DOC и т.д. теперь корректно распознаются независимо от регистра.
Full Changelog: v1.0.6...v1.0.7
Integrity (SRI)
sha384-dt/dXrGzcFqvGJqBSfy2TbyD3vPORKkjyz9WBGyHFK5ft10FvoAGv/BwGrxj+5eI