On 13.07.2014 12:54, Ilya Grigorik wrote:
On Fri, Jul 11, 2014 at 10:59 AM, Podjarny, Guy <gpodj...@akamai.com <mailto:gpodj...@akamai.com>> wrote:

            Preload hints are for the *current* page. As a result
            they are cancelled as part of onunload. If you need the
            request to span across navigations, you should be using
            prefetch, which is used to load resources for next
            navigation.
            Damn auto-correct... I meant should preload block *onload
            *(the load event of the current page). Seems less obvious
            to me, but my vote is still no, unless they resource was
            discovered as a full resource further down.


        Ah, hmm, interesting. I'm inclined to say that if you're
        loading resources via preload hint *and* they are not used
        before onload, then you shouldn't be using the preload hint
        for those resource anyway? The idea for preload is to help get
        the pixels on the screen faster by fetching critical resources
        sooner.. if you have resources that are not used until after
        onload, you're just creating unnecessary contention and you're
        probably better of scheduling them as part of "regular" page
        render process?

    I think preloading resources which are /likely /needed would be a
    fair use of this feature. This may be because you have two
    resources and expect one to be used, and/or if you suspect you
    have the time to get them as you’re waiting for the page to load
    anyway. Either way, I don’t think that should be the guiding
    factor here.

    IMO once a resource is used, it takes on the attributes of the
    actual resource, including changing its priority and any onload
    related behavior. If it’s not used, though, I think it shouldn’t
    block onload.
    And I think the spec should state it explicitly.


I think the behavior you are describing is already covered by "lazyload":
https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/ResourcePriorities/Overview.html#attr-lazyload

<link rel="preload" href="thing.js" lazyload>

I see the discussions on whether prefetch should be merged with prerender. Now I am starting to think that prefetch should be merged with preload instead and lazyload be supported by both preconnect and preload. Both could trigger after the onload event and this would mean that both could be supported for next page navigation optimization. As it is today it is likely the preconnect would be optimized away by having too many preconnects for one pageload, but that would be less of a problem if they were triggered after onload. Of course a preload could implicitly include preconnect, but using that may not always be desirable.


Building up these behaviors from small and reusable primitives is a better path than creating exceptional cases.

            I think this is especially important for prefetch. If a
            web dev wants it cached, they should specify a cache
            private instruction.


        I think I created unnecessary confusion with "cache grace"
        language.. should be fixed now.

    I understand this isn’t a cache in the traditional sense, but at
    the end of the day it’s still logically a cache no matter what you
    call it. If you fetch content ahead of time, and don’t know how
    much time will elapse before you’ll use it, the website *must
    *have control over how long  the fetched resource will be gvalid
    for. You can do this by making this “grace TTL” a configured
    parameter, but IMO the best path is simply to not have a grace
    TTL, and use the standard caching instructions.

    If a resource is not cacheable, even on a browser, it shouldn’t be
    prefetched/pre-rendered. You may need heuristics when you do this
    unilaterally, but when someone enters an explicit hint into the
    page, I think the requirement is on them to ensure it’s cacheable.


History lists come to mind and I'd argue that pre{fetch,render} belong in that same bucket:
http://tools.ietf.org/html/rfc7234#section-6

"no-store" seems like the right directive that would/could abort a pre{fetch,render}. That said, afaik, the implemented browser behavior for no-store differs even there for history lists, and the HTTP spec language is (intentionally) loose.. Mark, any thoughts or suggestions?

As an aside, a scan over recent HTTP Archive run shows that ~24% of HTML responses advertise "no-store".

                  * What about srcset and the picture element (e.g.
                    Native conditional loading mechanisms)?

            I don't see any concerns here. If you have conditional
            loading then you must evaluate those conditions.. With
            native <picture> those conditions will be executed by the
            preparser (yay) if the main doc parser is blocked... Yes,
            you may not be able to stick a Link header hint or put a
            <link> hint in the head of the doc, but such is the cost
            of conditional fetches. On the other hand, if you *know*
            you need a specific file regardless, feel free to hint it.
            Isn't srcset short enough to consider here at least?


        What about srcset? The preload scanner (or regular doc parser)
        will find it, evaluate it, and initiate the right fetch. Or,
        am I missing your point?


    What I meant was: can’t we support prefetch of srcset, by having
    the context/type state “srcset”, and having the URL hold the
    srcset-format text? Same thing for the Link header.
    It feels like an overkill to fit Picture into this format, but
    srcset seems light enough to make it reasonable.


I think this is what you're actually after: https://github.com/igrigorik/resource-hints/issues/11 - right?

ig

Reply via email to