我正在一個Web藝術項目,需要許多對象淡入和淡出在特定的時間間隔(我希望使用100個或更多的對象)。我有jQ讀取包含元數據的XML文件,並將Ps附加到主體,然後根據元數據中的信息告知其淡入和淡出。我使用setTimeouts來實現這一點。JS/jQ更有效的方式來處理大量的setTimeouts
這件作品最終會非常耗費資源。在頁面加載一兩分鐘後,我的機器開始喘息。 (或者,我認爲它可能不是一個資源問題,而是一個圖形化的問題。)
有沒有人有一些建議,使這更資源友好/高效?我感謝任何幫助!
這裏的活鏈接:http://justwhatdoyoucallthis.com/trynottogiveup/(當心資源豬)
下面是相關的腳本:
$.ajax({
type: 'get',
url: 'problems.xml', /* ...which contains like 99 problems */
dataType: 'xml',
success: function(problems) {
$(document).ready(function() {
var winWidth=$(window).width();
var winHeight=$(window).height();
$(problems).find('problem').each(function() {
var probType=$(this).attr('type');
var probAppear=$(this).attr('appear');
var probName=$(this).children('name').text();
var probID=(probName.replace(/\s/g, '')).toLowerCase();
var probIntensity=($(this).children('intensity').text()+5)*10;
var probInterval=$(this).children('interval').text();
var probDuration=$(this).children('duration').text();
var ranLeft=Math.random()*winWidth-(probIntensity/2);
var ranTop=Math.random()*winHeight-(probIntensity/2);
$('body').append('<p id="'+probID+'" class="'+probType+'" style="left: '+ranLeft+'px; top: '+ranTop+'px; height: '+probIntensity+'px; width: '+probIntensity+'px;"><span>'+probName+'</span></p>');
(function showLoop() {
if(probAppear=='fade') { var fadeInDuration=1000; } else { var fadeInDuration=0; }
$('#'+probID).delay(probInterval*1000).fadeIn(fadeInDuration).delay(probDuration*1000).fadeOut(1000);
setTimeout(showLoop, 1000);
})();
});
});
}
});
適用於Core i5/Linux 64位,firefox 17. BUt我認爲一般使用jQuery動畫操縱一堆DOM元素無論如何都會佔用資源。可能是Canvas在這些事情上更有效率。 – hayavuk
您可以隨時嘗試查看更改全局間隔值是否有助於您。 '$ .fx.interval = 50;'。從jQuery 1.8開始,默認值是13。 50仍然有一個平穩過渡,並會節省你一些CPU的強度。提高和降低它,直到找到適合您的動畫的東西。這不是傻瓜證明。 – Ohgodwhy