因此,我开始了这个小项目,即网络应用程序,该应用程序使用了大量的小图像和一些mp3声音,但随着用户发现新的“地点”,随着时间的推移会加载新的图像和声音,我感到不满意,因此我想出了解决$.ajax
GET
方法使用方法来加载所有图形和声音,然后在所有准备就绪时显示页面。这是代码:
var i;
for(i = 0; i < this.imagesNumber; i = i + 1) {
(function(i) {
$.ajax({
url: self.images[i], // for example 'images/arrow.png'
type: 'GET',
complete: function(data) {
console.log("Completed.", i, self.images[i]);
},
progress: function(event) {
if (event.lengthComputable) {
console.log("Loaded " + parseInt( (event.loaded / event.total * 100), 10) + "%");
} else {
console.log("Length not computable.");
}
}
});
}(i));
}
然后我做:
this.loadAssets();
$(window).load(function() {
app.initialize();
});
它确实是在下载所有内容,但是当我尝试使用页面上的某些元素时,它们中的一些又会继续下载(只有某些是从缓存加载的。要检查我是否从google chrom网络标签中监视所有内容)。
那么,jQuery内部资产调用和我的Ajax调用之间有什么区别?我错过了什么?
几周前我在玩纸牌游戏时也遇到了同样的问题。问题在于某些浏览器如何处理通过异步方式加载的图像的缓存。我可以在笔记本电脑上的Firefox中复制此问题,但不能在PC上复制。我不确定实际的问题是什么,但是我知道如何用创可贴修复它。
只需将图像或资产的加载移动到主Javascript文件中即可。这些文件在页面生成时加载,并存储在缓存中页面的相应本地副本中。但是,通过Ajax缓存的文件并不总是与当前页面保存在同一位置,这取决于加载时间。我相信这是导致此异常行为的关键设置,因为它会因系统的不同而有所不同,具体取决于使用不同浏览器,不同缓存积极性等的设置。任何与页面一起保存在缓存中的文件都会立即加载(按预期方式),但保存的所有文件不页面所归属的属性将应要求重新加载。如果这些后续重新加载再次保存在不同的位置,则必须有效地一次又一次地重新加载这些文件。
因此,您通过Ajax调用加载的所有文件,都将它们全部加载到主Javascript中,而没有Ajax调用。对于您的迷你游戏,这是可以的,因为用户将期望加载期。只要确保他们知道事情正在发生,就不会造成任何伤害。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句