所以我想将我的所有javascript函数迁移到requireJS,并尝试尽可能多地使用ondomready事件。但是:
这会冻结浏览器,因为所有的javascript都是同步的。这是不好的。我的意思是哇用户看到浏览器内容的速度有点快,但是会尝试点击某处只是为了实现浏览器被冻结,并且必须再次点击。这真是太糟了。有办法解决这个问题吗?
答案 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);
});
});