Because HTTP/2 allows to use the same the TCP connection for sending different
assets concurrently to the browser, it's possible to manage the relative priority
at which different assets are sent to improve the overall loading time of a webpage.
.js files are generally more urgent than images, although
that ultimately depends of the particular page where they happen.
To fine-tune the workings of the accelerator to each particular situation, we have
introduced so called calm maps.
A calm map is part of a .push-list file, and it's used to tweak, server-side, the default priority that ShimmerCat uses for sending assets to the browser inside the same HTTP/2 connection.
Here is an example:
--- hints: - /fonts/font-awesome.min.css?vh=61075de8e - /sass/main.css?vh=4fe8ea6bd calm-map: - p: "/sass/main.css?vh=4fe8ea6bd" m: "20!" - p: /images/my-icon.png m: "35!" - p: "/fonts/font-awesome.min.css?vh=61075de8e" m: "25!" schema: push-list-v1
In the list, the numeric values preceeding the exclamation sign are each used as a value opposite to the asset's priority, so the higher it is, the greater the "calm" is and the lower the asset priority. In the example above, that implies that "main.css" should be pushed with highest urgency, and then "font-awesome.min.css" should be sent as well.
Calm maps can include pushed and non-pushed
assets, so in the example above
/images/my-icon.png is to be sent
with calm 35 when the browser requests it, that is the
asset is not pushed.
Calm maps for images
Two of the image formats in the web, PNG and JPEG, support subdivision in blocks,
so that the browser can show progressively better representations of the image
as the image data is received from the wire.
To combine that with HTTP/2 priorities,
ShimmerCat QS has mature support
for so-called "coordinated
image loading", which enables e.g. sending first low-resolution versions of
all images initially visible in a page.
In addition to the syntax above, images support more fine-grained priorities by interlaced/progressive block.