Results from adopting HTTP/3 priority

The Instagram app for Android recently adopted HTTP priorities for HTTP/3 requests and I wanted to share our positive results with this group.

So far, Instagram has applied priorities in two different use cases:

  1. The most critical API requests during startup are assigned a higher priority than other requests.  This change resulted in a user-visible startup time win for the app, which is one of the critical metrics they track.  Unfortunately, the experiment was several months ago and we no longer have the data showing the exact win.

  2. Requests for images and videos that are on screen are assigned a higher priority than those that are off screen.  High priority content loads 20-30% faster than low priority content, and 10-20% faster than the previous baseline.  We see a reduction in the number of video stalls and an improvement in the image rendering rate.

The team is currently experimenting with reprioritizing images as their on/off screen status changes, but the early results are mixed.  This is somewhat expected since the objects may be all or partially flushed to the network by the time the reprioritization signal arrives.


The results are very encouraging and other product teams are looking to see how they can also leverage priorities.

I’d like to emphasize that the simplicity of the new priority scheme relative to the HTTP/2 scheme was a key factor in enabling the product team to engage and test quickly.  The server side implementation is also much simpler and less error prone compared to the H2 scheme.  We also find implementing priorities directly in the QUIC layer is more effective at selecting the highest priority data to send compared to HTTP/2, where careful tuning of TCP_NOTSENT_LOWAT is required to achieve the best performance.

Thanks

-Alan

Received on Monday, 26 April 2021 15:31:20 UTC