您不必担心交通问题。初始化应用程序时很容易缓存图像。在以下 JSFiddle 中查看我的示例:http: //jsfiddle.net/pAwdC/。当我初始化我正在调用的应用程序时loadImages
。img
此方法为每个数字创建DOM 元素。它src
是从数组中取出的imagesSrc
。调用该loadImages
函数时,浏览器向服务器发出少量 HTTP get 请求:
![在此处输入图像描述](https://i.stack.imgur.com/VX38P.png)
实际上,每个请求都是在以下情况下发出的:
current.src = imagesSrc[i];
被执行。
加载图像后,我只是将它们隐藏起来。当图像带有display: none
或visibility: hidden
用户实际上看不到它们,但是当您使这些隐藏元素可见时,不再发出请求,只有最终的重绘、重排/重布局、重新样式由浏览器完成。仅在需要时才缓存和显示所有元素。您可以检查您的萤火虫或您正在使用的任何其他开发工具,以确保不再请求这些图像。
这是我的示例中的代码:
var images = [],
imagesSrc = ['https://lh3.ggpht.com/-107YXK-eAXs/UB6V49H9yuI/AAAAAAAACsY/69ceZJXaYZE/s1600/number-one-.png',
'https://lh3.ggpht.com/-8rOrxAwDl48/Txf99Sus18I/AAAAAAAAL1w/VcmeP7rNFwY/s1600/number2c.png',
'https://lh3.ggpht.com/-aGatHUidcGw/UG6Oh2HdWXI/AAAAAAAADQY/yc1CTC7cpOY/s1600/number3.png'];
function loadImages() {
var current;
for (var i = 0; i < imagesSrc.length; i += 1) {
current = document.createElement('img');
current.src = imagesSrc[i];
images.push(current);
current.style.display = 'none';
document.body.appendChild(current);
}
}
function showImage() {
var current = showImage.current || 0;
if (current >= 3) {
current = 0;
}
hideImages();
images[current].style.display = 'block';
current += 1;
showImage.current = current;
setTimeout(function () {
showImage();
}, 1000);
}
function hideImages() {
for (var i = 0; i < images.length; i += 1) {
images[i].style.display = 'none';
}
}
loadImages();
showImage();
对于我的示例,我只需要每个数字的一个实例。当然,对于您的时钟,您可以img
为每个数字创建四个实例(四个 DOM 元素),以便显示重复项。
对于您的应用程序,更好的方法可能是按需加载图像,但只加载一次然后缓存它们。这样做很好,因为用户可能不会停留在您的页面上查看每个数字(从 0 到 9),并且您可以通过这种延迟加载稍微提高性能。对于这种策略,您可以检查享元模式。它的主要思想是管理一组可重用的小对象并按需使用它们,同时控制它的创建。这是一个显示模式结构的 UML 类图:
![在此处输入图像描述](https://i.stack.imgur.com/H0QaI.png)
我提到的方法有不同的变体。您可以做的最轻的变化可能是使用包含所有数字的单个图像。之后,您可以创建具有数字大小的不同元素(例如 div)。当您为这些元素设置具有特定位置的背景时,您可以通过仅加载单个图像来创建所有数字。这会将您的请求从 10 个减少到一个。例如,Facebook 有效地使用了这种方法。
如果您需要进一步的帮助,我很乐意提供帮助。</p>