私は静止画像500x640をcssスプライトで20x20のピースで覆われたフォルダーに置いています。各ピースを表示するために背景位置を設定しています。後で各ピースを操作できるようにするには、このような種類のディスプレイが必要です。
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秒かかります...
ブラウザが画像を取得するために1つのリクエストを実行し、画像から小さな断片を切り取るよりも、Chromeでこれほど時間がかかるのはなぜですか?
パフォーマンスを向上させる方法はありますか?
CTRL + Refreshを実行しただけで、ここで奇妙な読み込み結果が発生します。
更新:ここにサンプルを配置しました:http://bit.ly/TrcCdp
更新: 私のサンプルにはJSON配列があり、800個の要素が含まれているので、それを少なくするかどうかを確認します。たとえば、600〜700個の要素のパフォーマンスは向上していますが、とにかく800個の要素が必要です。
たとえば、要素が600個しかない場合、Chromeの負荷は約6秒に短縮されます。
では、おそらくノックアウト反復テンプレートのどこかで問題が発生する可能性がありますか?