Назад в Центр знаний
Платформа

Speculation Rules: границы prefetch и prerender

Сравните допуск, активацию, отказ, учетные данные, побочные эффекты и безопасный fixture для Speculation Rules.

BotBrowser Team

Speculation Rules: границы prefetch и prerender
Документация

Нужна структурированная документация по теме Платформа?

Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.

BotBrowser может повторить авторизованный контекст и записать видимый результат навигации, но не заявляет, что включает, принуждает или измеряет поддержку Speculation Rules в конкретной сборке. Практическое решение уже: применять prefetch, когда будущую навигацию можно безопасно подготовить, а prerender только если скрытый документ можно создать, активировать или отбросить без нежелательной работы. Браузер решает вопрос допуска и жизненного цикла; приложение задаёт подсказку и обычный безопасный путь.

TL;DR

  • prefetch готовит возможный ответ, а prerender создаёт скрытый документ, который может стать видимым. Ни одна подсказка не гарантирует загрузку или отрисовку.
  • Допуск зависит от правила, URL, происхождения, политики, ресурсов устройства и реализации. Совпавшее правило не доказывает наличие запроса.
  • Активация превращает спекулятивный документ в видимый. До неё возможен отказ, поэтому инициализация должна переносить документ, который никогда не показывается.
  • Учетные данные, cookies, хранилище, аналитика, медиа, WebSocket и записи являются границами побочных эффектов. Спекулятивная цель должна быть только для чтения.
  • Синтетический fixture может записать вход, намерение запроса, активацию и отказ, не утверждая, что он запускался в браузере.

Contents

Схема разделяет prefetch, prerender, допуск, активацию, отказ и приватность

Prefetch и prerender обещают разное

API Speculation Rules на MDN задаёт JSON-формат вероятных навигаций. Браузер может загрузить цель или построить скрытый документ, но страница не получает синхронного подтверждения принятия правила. Обычная ссылка поэтому не становится гарантированно быстрой.

prefetch в основном получает ресурс и хранит его во внутреннем кэше. Полученные байты не делают документ активным. Другая URL, заголовки, политика, учетные данные или состояние браузера могут помешать повторному использованию.

prerender может создать скрытый контекст, загрузить страницу и выполнить ограниченную инициализацию до возможной активации. Документация Chrome о prerender описывает активацию или удаление страницы. Это не видимая вкладка и не фоновый worker с правом выполнять необратимые действия.

ПодсказкаЧто может сделать браузерДопустимое предположениеБезопасная цель
prefetchЗагрузить ресурс-кандидатНичего до настоящей навигацииКэшируемый документ только для чтения
prerenderСоздать скрытый документОн может никогда не стать видимымОболочка с отложенными записями
Нет подсказкиНавигировать по запросуОбычный жизненный циклПоток с явным намерением

Prefetch тратит сеть и кэш, prerender дополнительно тратит CPU, память и инициализацию. Не применяйте его к покупке, письму, сокету, одноразовому токену или GET с изменением состояния. В руководстве по измерению производительности браузера описано различие между отметкой времени и навигацией: отметка в скрытом документе не доказывает посещение.

Допуск определяет браузер

Спецификация WICG Speculation Rules описывает форму правила и условия, которые проверяет пользовательский агент. href_matches, selector_matches и eagerness являются входом алгоритма, а не отчётом о причине пропуска.

<script type="speculationrules">
  {
    "prefetch": [
      {
        "where": { "href_matches": "/docs/*" },
        "eagerness": "moderate"
      }
    ],
    "prerender": [
      {
        "where": { "selector_matches": "a[data-prerender]" },
        "eagerness": "conservative"
      }
    ]
  }
</script>

Совпадение может быть отклонено политикой, нехваткой ресурсов, происхождением или частичной поддержкой синтаксиса. DNS, TLS, перенаправление или изменение состояния тоже могут отменить результат. Записывайте источник правила, класс URL, заголовки, версию, условия сети и запасной путь, а не универсальный вердикт.

В руководстве по Navigation API и истории показано, что видимая URL не доказывает посещение человеком. Руководство по безопасным контекстам добавляет предварительную проверку перед запросом мощной функции. Аналитика должна зависеть от активации, а не от одного запроса.

Активация и отказ образуют жизненный цикл

Используйте четыре состояния: объявлено, допущено, активировано и отброшено. Объявлено означает наличие JSON; допущено означает, что браузер рассматривает цель; активировано означает видимую навигацию; отброшено означает удаление, истечение или замену без активации. Допуск не подтверждает загрузку.

Активация является моментом для аналитики, постоянной персонализации, резервирования, мутаций и сторонних вставок. Отказ нормален: пользователь выбрал другую ссылку, сеть оборвалась или браузер освободил память. Таймеры и ссылки очищайте идемпотентно, не показывая ошибку для невидимого кандидата.

СостояниеЧто может хранить fixtureОпасная трактовка
ОбъявленоОтпечаток JSON и класс URLБраузер принял правило
ДопущеноДиагностика, если она доступнаЗапрос состоялся
АктивированоВидимая навигация или событие приложенияИнициализация была один раз
ОтброшеноУдаление или истечениеПользователь отказался

События могут идти в другом порядке. Используйте синтетический идентификатор fixture, отдельно проверяйте скрытую и видимую фазы для worker и служебного обработчика и сохраняйте основной контент даже без переносимого события активации.

Учетные данные, побочные эффекты и приватность

Cookies, кэш, авторизация, client hints, referrer policy и служебный обработчик влияют на ответ. Точная комбинация зависит от происхождения, режима учетных данных, политики и браузера. Не помещайте в fixture реальный аккаунт или production-токен.

Разделяйте чтение и запись. Публичная оболочка лучше подходит для спекуляции, чем URL, который изменяет корзину или расходует токен; даже GET может иметь побочный эффект. Авторизация и идемпотентность остаются решениями сервера.

Скрытый документ может отправить beacon до видимости и завысить визиты. Необратимую аналитику отправляйте после видимой навигации. Руководство по предотвращению DNS-утечек показывает, почему вспомогательные запросы нужно анализировать отдельно; prefetch и prerender также должны быть частью заявленной сетевой политики.

Используйте test-user-17, order-synthetic-42 и собственный receiver. Удаляйте заголовки, полные referrer и чувствительные параметры во время сбора, ограничивайте хранение и назначайте ответственного за удаление.

Копируемый fixture и ограниченная запись

Этот fixture декларативен: он не доказывает принятие правила, загрузку или активацию.

<script type="speculationrules">
  {
    "prefetch": [
      {
        "urls": ["/fixture/read-only-shell.html"],
        "eagerness": "immediate"
      }
    ],
    "prerender": [
      {
        "urls": ["/fixture/activation-shell.html"],
        "eagerness": "conservative"
      }
    ]
  }
</script>
<a href="/fixture/read-only-shell.html" data-case="prefetch">Read-only shell</a>
<a href="/fixture/activation-shell.html" data-case="prerender">Activation shell</a>
<output id="speculation-status">not observed</output>
{
  "fixture": "speculation-boundary-v1",
  "candidate": "/fixture/activation-shell.html",
  "hint": "prerender",
  "browser": "declared product, version, channel, and OS",
  "policy": "response and permissions policy revision",
  "credentials": "synthetic, no account cookie",
  "declared": true,
  "eligible": "unknown until a run records it",
  "activated": "unknown until a visible navigation records it",
  "abandoned": "unknown until the lifecycle ends",
  "observed": null,
  "fallback": "ordinary navigation remains available",
  "dataClass": "synthetic"
}

Проверьте оболочку только для чтения и цель, которая показывает лишь маркер активации. Отсутствующая URL может проверить работоспособность обычной ссылки, но не доказывает блокировку. Реальный запуск должен добавить точную версию, политику, результат и причину отказа в закрытую evidence-запись.

Выбор запасного пути по наблюдаемой границе

СитуацияРешениеПричина
Кэшируемая цель только для чтенияПредпочесть prefetch или обычную навигациюМеньше затрат и эффектов
Оболочка с отложенными записямиРассмотреть осторожный prerenderИнициализация обратима
Изменение состояния при загрузкеНе применять prerenderУдаление может уже выполнить действие
Чувствительные учетные данные до активацииЯвные навигация и авторизацияМеньше раскрытия
Поддержка или политика неизвестныСохранить обычную ссылкуПодсказка не является гарантией

Сначала сравните правило, финальный ответ, URL, происхождение, режим учетных данных, версию и политику. WICG, MDN и Chrome описывают синтаксис и пределы, но не измеряют произвольную версию.

Граница возможностей BotBrowser

BotBrowser может открыть авторизованный профиль, повторить заявленный контекст и показать результат собственного fixture. Он не может заставить браузер принять кандидата, активировать prerender, прочитать внутреннее решение о допуске или гарантировать отсутствие запроса у третьей стороны. Документация расширенных возможностей BotBrowser не объявляет реализацию Speculation Rules.

Будущий результат должен быть ограничен профилем, версией, системой, политикой и ревизией fixture. Успешная загрузка не доказывает допуск всех кандидатов. Не используйте спекуляцию для обхода авторизации, согласия, приватности или лимитов провайдера.

FAQ

Означает ли prefetch посещение?

Нет. Ответ может быть загружен без видимой навигации и затем отброшен. Посещение считайте только после активации.

Всегда ли prerender быстрее?

Нет. Он может уменьшить работу при активации, но потребляет больше памяти, CPU и инициализации и может быть удалён.

Может ли спекулятивный запрос использовать учетные данные?

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

Когда отправлять аналитику?

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

Что делать при неизвестном допуске?

Оставить обычную ссылку и отметить результат как непроверенный. Обязательный контент не должен зависеть от подсказки.

Sources

Практический итог

Выбирайте prefetch для ответа только для чтения, который допускает раннюю загрузку; prerender только для скрытого документа, который может активироваться или быть отброшен без необратимой записи. Допуск принадлежит браузеру, активация подтверждает видимое намерение, а спекулятивный запрос остаётся кандидатом. Учетные данные, запись и аналитика требуют явной авторизации.

Безопасный следующий шаг: разместить fixture на собственном источнике, сохранить обычные ссылки и записывать объявлено, допущено, активировано и отброшено раздельно. Будущий запуск опишет одну версию; он не докажет универсальную поддержку и не превратит BotBrowser в реализацию Speculation Rules.

#Speculation Rules#Prefetch#Prerender#Навигация#Приватность

Эта статья входит в руководство: Поверхности веб-платформы: карта проверки

Переведите BotBrowser из исследований в продакшн

Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.