在Javascript/jQuery中运行函数之前检查元素是否存在是否更有效?
加载到站点的脚本上的两个示例函数:在Javascript/jQuery中运行函数之前检查元素是否存在是否更有效?,javascript,design-patterns,Javascript,Design Patterns,加载到站点的脚本上的两个示例函数: function doSomething() { var a, b, c; var el = document.querySelectorAll('#container p'); if (el.length === 0) { return false; } a = 10; b = 20; c = a+b; for (var i = 0; i < el.length; i
function doSomething() {
var a, b, c;
var el = document.querySelectorAll('#container p');
if (el.length === 0) {
return false;
}
a = 10;
b = 20;
c = a+b;
for (var i = 0; i < el.length; i++) {
console.log(el)
el[i].style.marginTop = a+b+i+'px';
}
}
doSomething();
function doSomethingElse() {
var a, b, c;
var el = document.querySelectorAll('#container p');
a = 10;
b = 20;
c = a+b;
for (var i = 0; i < el.length; i++) {
el[i].style.marginTop = a+b+i+'px';
}
}
if (document.querySelectorAll('#container p').length) {
doSomethingElse();
}
函数doSomething(){
变量a、b、c;
var el=document.queryselectoral(“#容器p”);
如果(el.length==0){
返回false;
}
a=10;
b=20;
c=a+b;
对于(变量i=0;i
两个问题:
#container
不存在,这两个容器会占用浏览器资源吗?例如;变量是否会被分配、存储在内存中,是否会进行任何计算,等等谢谢。我可能会使用doSomething()函数,因为使用doSomethingElse()时,您会选择两次
#container p
,因此浏览器必须找到它两次,这可能会影响性能
至于检查它是否存在,这几乎没有影响,因为for循环无论如何都不会对空数组执行任何操作(因为0不小于0)。您担心mirco优化,但使用jQuery?即使没有jQuery的开销,任何差异都是微不足道的。其实这更多的是出于原则,而jQuery只是一个诚实的例子。如果我改成香草口味会有帮助吗?虽然我没有否定你的观点:)更新并删除jQuery。原理取决于你正在比较的确切代码。因此,删除jQuery后,问题在于额外的DOM选择(假设找到元素)是否值得。和所有这些问题一样,你应该通过测试找出答案。不同浏览器和版本的结果可能不同。也就是说,如果您想做尽可能少的工作,我会选择第二个,进行DOM选择,将结果存储到变量中,检查其长度,如果找到元素,则将其传递给函数。这样,您正好有1个DOM选择,并且可能没有……函数调用。然而,正如我在第一条评论中所说的,这里的任何差异都是微不足道的,除非这段代码每秒运行数千次。取消那个函数调用不会有什么不同。我会选择更干净、更易维护的,并寻找更好的优化方法,比如抛弃jQuery。