我的网站主要是内容和一些非常基本的脚本,所以我选择在页面中嵌入我的所有 javascript 并避免使用外部脚本(jquery 等),因为它们对页面加载时间有重大影响。
我也选择了喜欢高分辨率图像作为默认,如果默认是错误的图像,有些会被下载两次。带宽在移动设备上是最关键的,所以高分辨率应该是默认设置,而低分辨率稍后会被激活。
我也喜欢简单而不是在所有情况下选择最佳图像,因为坦率地说,大多数访问者甚至不会注意到差异。错误的人出现并不是一场灾难。
最后,我希望它使用srcset似乎是解决这个问题的长期解决方案的新草案标准,即使它尚未实施。
因此,我使用图像标签,src用于高分辨率和srcset低分辨率:
<img src="foo.png" srcset="foo-low.png 1x" width="42" height="42">
然后使用 javascript 处理所有图像标签。我之前选择了内联 JavaScript,</body>而不是domready提高页面加载速度的事件——我们希望浏览器尽快知道正确的图像 URL,在这种情况下,每一毫秒都很重要。
<script type="text/javascript">
function swapRetinaImagesOut() {
// skip anything with a "retina" screen
if (window.devicePixelRatio > 1)
return;
// check if the browser appears to support the "srcset" attribute
if (typeof(document.createElement('img').srcset) != "undefined")
return;
// find all images with an "srcset" property, and swap them
var imageEls = document.getElementsByTagName('img');
for (var i = 0; i < imageEls.length; i++) {
var imageEl = imageEls[i];
var srcset = imageEl.getAttribute('srcset');
if (!srcset)
continue;
imageEl.src = srcset.match(/^[^ ]+/)[0];
}
}
swapRetinaImagesOut();
</script>
</body>
</html>
它简单但有效,我期待任何人都能做出贡献的改进。