可能会影响感知加载时间的是初始#wrapper
可用性 - 即,如果在初始加载时它不是页面的一部分并且添加了 JS,则背景图像将不会开始加载 - 但我怀疑这将是一个常见的场景。
背景图像加载不会影响 domready 处理程序,但是如果您想加快后台可用性,您可以尝试以下操作:
#wrapper {
background: url(large-image.png) no-repeat center center,
url(small-image.png) no-repeat center center;
}
来自mdn:
使用 CSS3,您可以将多个背景应用于元素。它们相互叠加,您提供的第一个背景在顶部,最后一个背景在后面列出。只有最后一个背景可以包含背景颜色。
这样做有效地允许您加载较低分辨率的图像作为背景的底层,而昂贵的高分辨率图像仍在加载。还记得过去的美好时光lowsrc
吗?这就是我们正在模拟的行为。请注意,低分辨率和高分辨率图像下载同时开始,因此只有在大图像确实大到无法忍受时才使用它。
另外:您是说您已经优化了图像;我仍然建议您尝试Yahoo SmushIt,您会惊讶于如何从 PNG 中删除大量冗余数据而不会降低质量(我目前在使用他们的服务时遇到间歇性问题,但经过几次尝试后它可以工作,或者您可以使用OptiPNG但是 imo 为单个图像设置和配置它会花费太多精力)
更新:
建议您等待 domready 触发并使用$("#wrapper").css(...);
. 这样做是为元素添加内联样式,这将 1) 干扰选择器的特异性 2) 仅适用于这个特定的实例#wrapper
(如果它是来自服务器的 ajax 内容的一部分,则不好)。
您也可以在运行时添加新的 CSS 规则:
$('head').append('<style type="text/css">#wrapper {background: url(large-image.jpg) no-repeat center center;}</style>');
这将被有机地添加到文档样式表中并应用于所有未来的实例#wrapper
,并且不会干扰选择器的特异性。您仍然会得到一个短暂的无样式内容(在触发处理程序并应用样式之前),所以我不提倡这种方法。