It is very possible. Just include the sprite dimensional and positional info in an inline CSS stylesheet on the page and generate a sprite sheet as you would normally. Base64 data: URIs add tons of overhead which will definitely end up being much slower. Not to mention that they're using PNG when they should be using JPEG, which just worsens the issue even more.
With Data URIs, they can convert to Base64 ahead of time, and then just concatenate them into a JSON request as needed. This potentially saves them an HTTP request per page load because it means the CSS can be static. The decoding overhead is on the client, which in most cases should offer better user perceived performance than an extra HTTP request for a dynamically generated stylesheet, so it's just a matter of whether it's outweighed by the increase in file size.
Better convert them to Base64 and just concatenate the ASCII strings. Store each Base64 string text file next to the image file.
I agree however that they should use JPEG for their Base64 sprites.
Which set of images do you generate sprite for? Take ebay search results page , for every search it displays a different set of images.How can we construct a static sprite a ahead of time? However we can generate a dynamic sprite.
- On page load 1, I request images A.png, B.png, and C.png.
- The JSON for [A, B, C] is returned and cached.
- On page load 2, I request image B.png.
I can't use the original file, since it was cached for [A, B, C]. So I have to re-request just B.Is there something I'm missing? Otherwise, it looks really cool.
But you could do your own little client side cache. When receiving the url/img-data pairs, just store them in the HTML5 browser storage database, as key:url/value:img-data pairs. Then you are independent from the grouping into subsets.
And before requesting your next image sprite, just check with the client side data storage what images you already have and which you need to request.
Base64 encoded data URI JSON in single call Vs sprite image in single call
I think, vanilla sprite will work much better.