- From: Chris Harrelson <chrishtr@chromium.org>
- Date: Sun, 14 Jan 2018 12:05:28 -0800
- To: Anne van Kesteren <annevk@annevk.nl>
- Cc: Ilya Grigorik <igrigorik@google.com>, Ben Maurer <ben.maurer@gmail.com>, Philip Walton <philipwalton@google.com>, Royi Hagigi <royi@fb.com>, "public-web-perf@w3.org" <public-web-perf@w3.org>
- Message-ID: <CAOMQ+w8pSZuZdeLiv10vgAZ=FVKMhjAv6FOsmDWf=aZjaGUgNg@mail.gmail.com>
I share Ben's concern that the relationship between the browser cache and rendering behavior during the lifetime of a web page is insufficiently specified to be fully reliable. I also agree with Ilya that the issue is orthogonal to preload. I'd call it a rendering pipeline definitional issue rather than a resource loading issue. Two examples for images, in which onload does not guarantee that the next frame will show an image. Reasons: (1) image decoding may be async, and (2) image caching may be async. Progress has been made very recently on (1), by defining the async attribute on images. Chrome now respects them. However, there are still situations where (2) is a problem. e.g. I believe that if an <img> were removed from the DOM and re-inserted, it may not be in the memory cache (instead would be in the on-disk cache, or not even there), meaning that it would not necessarily display in the next frame. It's also a problem when reloading a "cached" web app - the images may not appear in time to avoid flashing. Regarding style sheets: I think the spec / implementations should ensure that "loaded" style sheets always apply to the next frame drawn to the screen. I'm hoping we can make progress addressing cases in which this fails in 2018. Blink and Webkit both have some strange and heuristic behavior during load regarding how style sheets apply, which we should try to fix. Chris On Sat, Jan 13, 2018 at 11:50 PM, Anne van Kesteren <annevk@annevk.nl> wrote: > On Sat, Jan 13, 2018 at 7:23 PM, Ilya Grigorik <igrigorik@google.com> > wrote: > > Anne, what's missing for preload specifically? Happy to address it if we > > can. > > https://github.com/w3c/preload/issues/97. > > > > My observation here is that you can remove preload out of this question > and > > rephrase it as: "If I programmatically inject a <link rel=stylesheet> > what > > execution guarantees, if any, are provided?" > > I think it's more complex. It's a combination of: > > * What does the standard say > * What do implementations do > * What do websites rely on > > where the latter two are much more important than the first. I think > ideally it's always asynchronous, but in practice <script> can block > on the stylesheet being loaded (this is defined in HTML). Ben's > example shows something different however which relates to the > "implementation details" (not quite as they're observable) of preload > in Chromium and WebKit. That also shows why it's important to define > this. If sites start to rely on <link rel=preload onload> and from > that event handler inject a <link rel=stylesheet> of which they then > immediately query the styles, it better be defined as otherwise > browsers are back at having to reverse engineer each other to figure > out how the web works. > > (I'm sure you've seen the "X is the new IE6" meme. This is really what > that comes down to.) > > > -- > https://annevankesteren.nl/ > >
Received on Sunday, 14 January 2018 20:06:14 UTC