Contact emails

[email protected], [email protected]

Component

Internals>Preload>Prerender

Explainer

https://github.com/WICG/nav-speculation/blob/main/ua-initiated-prerendering.md

Spec

https://wicg.github.io/nav-speculation/prerendering.html
Discussion about upstreaming into HTML and elsewhere: whatwg/html#7533
<https://github.com/whatwg/html/issues/7533>

The corresponding TAG review is w3ctag/design-reviews#667
<https://github.com/w3ctag/design-reviews/issues/667>. (That review was for
speculation-rules triggered prerendering, which has a superset of the
considerations for omnibox-triggered prerendering.)

Summary

We would like to ship omnibox (i.e., URL bar) prerendering. With this
feature, Chrome will start prerendering the high-confidence omnibox
autocomplete suggestions. Chrome is currently prefetching resources for
high-confidence suggestions using No-state Prefetch
<https://developers.google.com/web/updates/2018/07/nostate-prefetch>, but
with this feature we will be further processing the webpage, including the
DOM tree construction and script execution.

While this is a user agent feature, this is an observable change to the
prerendered websites. This prerendering affects how the prerendered pages
are processed. The website gets loaded before the navigation is committed,
and the side-effects are delayed until activation (the actual navigation to
the website was committed). We also would like to add a simple APIs
(document.prerendering) to directly let the website know that it is being
prerendered and when it was activated (prerenderingchange event,
performance.activationStart timing).

Note that we are not shipping speculation rules triggered prerender2 (I2E
extension
<https://groups.google.com/a/chromium.org/g/blink-dev/c/tcbtZoQIlvI/m/K26gVfbUAQAJ>)
with this I2S, which allows web pages to prerender other web pages. We will
come back (hopefully soon) with a separate I2S. For details about our web
exposed changes shipping plan, please consult this doc: Interoperability
Roadmap for Shipping Prerender2 Incrementally
<https://docs.google.com/document/d/1GenZDPbTzRyp038gh8A_ylIoVTfKt40MFyg7Ek_7L58/edit>
.

Link to “Intent to Prototype” blink-dev discussion

We don’t have a corresponding “Intent to Prototype”. This was implemented
as a variation of other prerender2 triggers (Speculation rules I2E
<https://groups.google.com/a/chromium.org/g/blink-dev/c/tcbtZoQIlvI/m/K26gVfbUAQAJ>
).

Is this feature supported on all six Blink platforms (Windows, Mac, Linux,
Chrome OS, Android, and Android WebView)?

We plan to roll out omnibox-triggered prerendering from Android platforms,
where we already have the MPArch coverage. Eventually, we will enable this
on all platforms.

Demo link

For a demo of prerendering generally, and its effect on websites,
https://prerender2-specrules.glitch.me/ shows it triggered by speculation
rules (which are not part of this Intent).

Instruction: Demonstration of URL-bar-triggered Omnibox prerendering
<https://docs.google.com/document/d/1sUbxYSu1o5G76tA4UW_xxgcfcOn8j6NlJc_Go0Gwb_Q/edit?usp=sharing>

Demo page: https://omnibox-prerender.glitch.me/

Debuggability

We are actively talking to the devtools team about adding general Prerender
support to it [metabug
<https://bugs.chromium.org/p/chromium/issues/detail?id=1217029>]. The MVP
is to expose the prerendered page status in the panel so web developers can
know if they finished successfully, or they couldn’t proceed due to its
feature restrictions.

We currently don’t have a plan to add devtools support specifically for the
omnibox prerender trigger (your thoughts are welcome!).

Measurement

We have implemented UseCounters [cs
<https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/mojom/web_feature/web_feature.mojom;l=3482>]
to monitor the usage of the properties added by this I2S.

Risks

Compatibility

There is a non-zero chance that the behavior of the prerendered sites can
be broken. The prerendered pages are loaded and rendered before user
actually navigates to the websites, so there will be some number of
prerenders that are false positives, which end up not being used. The
websites will observe the requests, and can run some JavaScript, which can
have side effects.

That said, triggering a prerender from the address bar isn’t an entirely
new behavior. Chrome used to have a prerendering feature a long while ago
<https://blog.chromium.org/2011/06/prerendering-in-chrome.html>. A similar
behavior is also present in other browsers (e.g. “Preload Top Hit” feature
in Safari).

For omnibox prerendering, we minimize this by having a high confidence
threshold value: We only issue prerendering for omnibox input that we are
confident that the user will navigate to the page.

Interoperability

Gecko: Some informal positive discussion with Gecko engineers on the HTML
Standard issue tracker
<https://github.com/whatwg/html/issues/7533#issuecomment-1022051187> and in
the HTML triage call
<https://github.com/whatwg/html/issues/7488#issuecomment-1029510684>;
formal positions request here:
https://github.com/mozilla/standards-positions/issues/613


WebKit: WebKit already ships URL-bar triggered prerendering, but not any
APIs for letting pages know about it, and it's unclear what strategy they
are using to prohibit disruptive behaviors for prerendered pages. We have
reached out for a formal positions request here in the hopes of moving
toward interoperability:
https://lists.webkit.org/pipermail/webkit-dev/2022-February/032113.html

Web / Framework developers: N/A - The omnibox prerendering (scope of this
I2S) is triggered without web author opt-in. See
https://github.com/WICG/proposals/issues/2 for positive sentiments on
speculationrules triggered prerendering.

Ergonomics

These features will be used by speculation rules-triggered prerender as
well.

Activation

Developer activation is not needed. Omnibox prerendering is triggered by
Chrome.

Is this feature fully tested by web-platform-tests
<https://chromium.googlesource.com/chromium/src/+/master/docs/testing/web_platform_tests.md>?
Link to test suite results from wpt.fyi.
It is not currently possible to trigger the omnibox prerendering path
specifically from web platform tests. We have filed
web-platform-tests/wpt#32726
<https://github.com/web-platform-tests/wpt/issues/32726> to discuss making
it possible and will be working on driving that forward in collaboration
with other browsers.

In the meantime, we have written a lot of web platform tests using
speculation rules as the trigger. These exercise many of the same code
paths and can be adapted once an appropriate API is available for testing
URL-bar-triggered prerendering:

https://wpt.fyi/results/speculation-rules/prerender?label=experimental&label=master&aligned

(Currently Chromium tests this using VirtualTestSuites [cs
<https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/web_tests/virtual/prerender/README.md>]
instead of EnableExperimentalWebPlatformFeatures, so the tests are not
green on wpt.fyi.)

Entry on the feature dashboard <http://www.chromestatus.com/>

https://chromestatus.com/feature/5710069172797440

-- 
You received this message because you are subscribed to the Google Groups 
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAPVAxLVDPme9kEnB6NdeDHO6krO77D-GN8MMKzYAv8oLCyAtwA%40mail.gmail.com.

Reply via email to