Hacker News new | ask | show | jobs
by acdha 3904 days ago
The simplest way would seem to be a directive to push static resources:

    <Location />
        ServerPush /static/css/main.css
        ServerPush /static/js/main.js
    </Location>

    <LocationMatch "^/$">
        ServerPush /static/img/gigantic-homepage-image.jpg
    </LocationMatch>

    <Location /maps/>
        ServerPush /static/js/leaflet.js
    </Location>
I believe this could even avoid the need to include cache-busters in the URL since you could push with an ETag and the client can terminate if it already has the appropriate bytes without the incredible performance hit of using ETags with HTTP 1.
1 comments

I think this is unsustainable (any non-trivial change to your html resources would require updating and restarting httpd). This is not DRY.

Jetty's approach to this problem is really interesting. Using HTTP referrer headers, it builds up a tree of resources that are often fetched together. Then, it optimistically pushes companion resources down. https://github.com/eclipse/jetty.project/blob/master/jetty-s...

You'll note that I said “simplest” – this could work on a $2/month shared hosting plan (not sure where you got the “updating and restarting httpd” bit from with a couple decades of prior art showing otherwise).

The Jetty approach is clever, too, as would be things like scanning rel=prefetch links but simple declarative approaches have their moments, too. One thing the Jetty approach doesn't appear to offer is the ability to manage resources if not all resources are appropriate for every client so it would appear to do things like ship every size of a responsive image to every client.