我正在尝试缓存几百个相当大的图像(每个图像大约为 2000x2500,350KB),以便在 Web 应用程序中显示。我的基本过程是为每个创建一个 Image 对象,设置它的 src,然后等待它下载。然后在应用程序需要时使用 Image 对象加载图像。
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var countSpan, errorSpan;
var imageArray = new Array();
var index = 0;
var imageCount = 199;
var concurrent = 4;
var count = 0;
var error = 0;
function runTest() {
countSpan = document.getElementById('countSpan');
errorSpan = document.getElementById('errorSpan');
next();
}
function next() {
while (index < imageCount && concurrent > 0) {
downloadImage('images/' + index + '.jpg', index);
index++;
}
countSpan.innerHTML = count;
errorSpan.innerHTML = error;
}
function downloadImage(src, index) {
concurrent--;
var image = new Image();
imageArray[index] = image;
image.onload = function() {
concurrent++;
count++;
next();
}
image.onerror = function() {
concurrent++;
error++;
next();
}
image.src = src;
}
</script>
</head>
<body onload='runTest()'>
<p>Downloaded: <span id='countSpan'></span></p>
<p>Errors: <span id='errorSpan'></span></p>
</body>
</html>
这在 Firefox、Chrome、Safari 和 IE9 中运行良好。但是,IE10 将在中途终止连接。例如,如果我尝试下载 200 个这些图像,IE10 将下载 100 个(约 35MB 数据),然后在剩余的 100 个上出错。网络捕获选项卡将连接显示为已中止。我看到 iexplore.exe 进程打开 TCP 连接,然后在图像开始出错时立即关闭它们。
如果我尝试下载 200 个较小的图像(640x480,~45KB),它可以工作。
如果我不坚持对图像的引用
// imageArray[index] = image;
IE10 下载所有 200 张图像。但这违背了目的。
在我看来,IE10 对图像引用有大小限制。但我找不到任何文件来支持这一点。如果您可以提供指向定义此限制的文档的链接或提供解决方法,我们将不胜感激。