我在一个图片较多的网站上使用jquery和backbone.js。该网站的核心功能涉及许多相对较小的图片(150x180像素的jpg文件)。图片列表通过ajax/json使用backbone.js集合获取。然后针对集合中的每个模型都会呈现包含img元素的视图,然后将视图添加到dom中。
有一个用户具有数千张图片-与我们大多数普通用户拥有的图片数量相比是一个超级边缘案例。当这位用户的图像数据加载时,浏览器无法处理所有图片,至少不能按照当前代码的方式进行处理。大约一半的图像最终可以正常加载,但浏览器(我正在使用Chrome 35)会不响应几分钟。另一半图像无法加载,并且浏览器控制台显示未加载的图像的“net::ERR_INSUFFICIENT_RESOURCES”错误。
以下是我们加载图像的关键代码部分。是否有人能够提供关于为什么出现此图像加载失败的技术解释,并提供一个不需要向图像列表添加分页或“点击这里加载更多”功能的解决方案?
// inside the view that renders the images
render: function () {
this.collection.each(this.addOne, this);
return this;
},
addOne: function (imgModel) {
var imgView = new App.Views.ImageView({ model: imgModel});
this.$el.append(imgView.render().el);
}
这是 App.View.ImageView 视图的 render() 代码:
render: function () {
var renderedTemplate= theTemplate(this.model.toJSON());
this.$el.html(renderedTemplate);
return this;
}
App.View.ImageView使用的模板(只会通过_.template编译一次):
<script type="text/template" id="thumb-template">
<a href="<%= ImageUrl%>"><img src="<%= ImageUrl%>" /></a>
<div class="delete"></div>
</script>