在执行所有javascript函数onDomReady / onDomLoaded时避免冻结

时间:2014-04-17 23:06:49

标签: javascript jquery requirejs

所以我想将我的所有javascript函数迁移到requireJS,并尝试尽可能多地使用ondomready事件。但是:

这会冻结浏览器,因为所有的javascript都是同步的。这是不好的。我的意思是哇用户看到浏览器内容的速度有点快,但是会尝试点击某处只是为了实现浏览器被冻结,并且必须再次点击。这真是太糟了。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

  病人:我这样做会很疼。

     医生:那就不要那样做了。

如果你看到dom ready事件冻结,那么也许你想要做太多。执行javascript很快。进行页面重绘很慢。

不是每个都会对dom进行更改并且每个都会导致页面重绘的小事件,而是应该有一个函数来处理需要进行的更改列表。这就是domReady插件在ready事件之前所做的事情。在ready事件之后,它只是在接收它时运行它们,这可能导致多次重绘。

我在编写自己的动画库时学到了这一点。我使用单独的setInterval()来更改单个属性。一旦动画不再平滑,那么当做多于四个时。更好的方法是使用单个时间间隔处理需要进行的更改列表。

修改

不使用domReady作为插件require(["domReady!"],而是将其用作模块,以便您可以立即运行初始化代码,然后再对dom进行更改。

require(["domReady"], function(domReady) {
    var element = document.createElement('table');
    //more setup code
    domReady(function(){
        document.body.appendChild(element);
    });
});