【发布时间】:2018-07-08 08:43:48
【问题描述】:
我想知道当 DOM 准备好时调用函数的最佳方式是什么。我的意思是,我知道
$(document).ready(function(){})
和
$(function(){})
是实现 DOM 的 action ready 的相同方式。 我的问题更多是关于性能,我通常这样写我的 JS:
$(document).ready(function(){
console.log('Hello World');
});
但是一位老师曾经试图让我改变主意并这样写:
function main(){
console.log('Hello World!');
}
$(document).ready(main);
事实是我从来没有这样做过,但现在我想知道在性能方面最好的方法是什么......如果我把所有东西都放在一个外部函数中,它加载速度会更快吗?
事实上,我写的是第一种方式,因为我不希望我的函数可以从 DOM 访问,所以我这样做了:
$(document).ready(function(){
function Hello(){
console.log('Hello World');
}
Hello();
});
这样,就无法从 DOM 或控制台使用 Hello 函数了……所以我不喜欢老师的方式。 但现在我习惯将我所有的代码封装在一个匿名函数中,这样我更容易写成这样:
(function($){
function Hello(){
console.log('Hello World!');
}
$(document).ready(Hello);
})(jQuery);
这就是为什么我想知道这两种方法之间的性能,你们怎么看?
【问题讨论】:
-
其中任何一个的性能差异为零。我个人更喜欢
$(function() { /* code here... */ });,因为它节省了几个字节。另请注意,您的 IIFE 可以被删除,因为 document.ready 处理程序接受jQuery对象作为它的第一个参数,即。jQuery(function($) { /* code here... */ }); -
唯一的区别可能是,另一方面,您有一个命名函数
main和一个closure,这可能会在内存中保存一个位。否则,没有区别。更大的问题是,您几乎不需要ready states。大多数人总是会使用它们,但它们并不总是必需的。仅封装代码IIFE是更好的选择 ... -
除此之外,使用就绪状态而不知道它实际上做了什么can harm your page even more。
-
只需在
标签: javascript jquery performance dom ready