我正在一个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