【发布时间】:2012-08-23 06:30:45
【问题描述】:
我有 500x640 的静态图像位于由 20x20 块和 css 精灵组成的文件夹中,我正在设置背景位置来显示每一块,我需要这样的显示以便以后能够对每一块进行操作。
css:
.piece
{
width: 20px;
height: 20px;
display: inline-block;
//display: inline;
//zoom:1;
}
.ob { background-image: url("/Images/ob.jpg");}
js:
<script id="flipTemplate" type="text/html">
<div class="piece ob" data-bind="style: { backgroundPosition: viewModel.getLeftValue($index) + ' ' + viewModel.getTopValue($index) }, attr: {cond: Cond, id: Id }, click: viewModel.setClick ">
</div>
</script>
<script type="text/javascript">
viewModel = {
flips: ko.observableArray([]),
setClick: function (data, e) {
e.preventDefault();
//doing click
},
getLeftValue: function (index) {
var position = 0;
var currentLine = div(index(), 25);
if (currentLine > 0)
return '-' + (index() - (currentLine * 25)) * 20 + 'px';
else
return '-' + index() * 20 + 'px';
},
getTopValue: function (index) {
return '-' + (div(index(), 25)) * 20 + 'px';
}
};
ko.applyBindings(viewModel);
</script>
function div(val, by){
return (val - val % by) / by;
}
所以我遇到了一些性能问题。 例如,在 Opera 和 FF 中加载非常快,大约 1 秒,在 IE 中大约 3 秒,但在 Chrome 中加载非常慢
在 Chrome 中显示所有片段大约需要 17 秒...
浏览器只执行一个请求来获取图像,而不是从中切割小块,为什么在 Chrome 中可能需要这么长时间?
有什么方法可以提高性能吗?
刚刚做了 CTRL+Refresh 和这里奇怪的加载结果:
更新: 我只是在这里放了一个示例:http://bit.ly/TrcCdp
更新: 在我的示例中有 JSON 数组,它包含 800 个元素,所以我只是找出如果我减少它,例如 600-700 个元素,性能会变得更好,但无论如何我需要 800 个元素。
例如,当只有 600 个元素时,它会将 Chrome 中的负载减少到大约 6 秒....
所以可能是淘汰迭代模板的某个地方的问题?
【问题讨论】:
-
抱歉,图片有点小。你的精灵有多大?
-
@canon 如果您右键单击图像并按打开,它将以实际大小打开 (i.stack.imgur.com/WGdAr.jpg)。我的精灵是 83.78kb。
-
@SLaks 我会看看我能做什么,这可能需要一些时间。
-
这很奇怪,你得到一个 304 Not Modified 响应,但它需要 17 秒才能加载。手动加载图像(例如导航到它)是否也需要很长时间?
-
我认为问题与您的图片无关。你为什么在js之后请求图像?先放css和图片再放js,看看问题会不会继续..
标签: javascript css performance css-sprites knockout-2.0