我正在写一些jQuery代码,它可以同时隐藏或显示大表中的大量表列。我想知道这将是更快地使用这样的代码:性能与可读性:多选择器与jQuery/JS中的多个语句
$("selector 1, selector 2, selector 3").css("display", "none");
或代码:
$("selector 1").css("display", "none");
$("selector 2").css("display", "none");
$("selector 3").css("display", "none");
所以我用jsperf.com to create a performance test case。因此,我确定第一种类型的代码(使用一个具有多个选择器的长字符串)比第二种类型的代码(一次隐藏一列)要快53%左右。然而,我写完它的时候,它会被边缘不可读,看起来像这样:
$("#table tr *:nth-child(4), #table tr *:nth-child(5), #table tr *:nth-child(6), #table tr *:nth-child(7), #table tr *:nth-child(8), #table tr *:nth-child(9), #table tr *:nth-child(10), #table tr *:nth-child(11), #table tr *:nth-child(12)").css("display", "none");
所以我的问题是,这是jQuery的/ JS代码大恶 - 效率低下的表现,或缺乏可读性?我的背景是Python,所以我倾向于将可读性看作高于性能,53%似乎并不像现实世界中的巨大下降。但另一方面,我打算一旦部署了我的JS代码就会缩小它的大小,所以它最终不会被读取......尽管我知道有那些可以将我的代码返回到其原始可读或不可读的形式。正如你所看到的,我可以在这个主题上围绕自己讨论,而且我不打算开始辩论或讨论,所以我只是在这里发布,以防在jQuery/JS社区。
有趣的是,在基准测试中,我发现这个方法实际上比多语句方法慢。 – GChorn 2013-04-09 06:27:28
我想你可能会测试错误...使用“setup”字段来定义你的初始变量,否则你也会在测试中引入数组的创建。我尝试了一堆浏览器,这比多个选择器快。 http://jsperf.com/6b11404dd2f0 – elclanrs 2013-04-09 06:35:47
奇怪的是,当我测试@ Ian的版本时没有针对单语句与长选择器版本进行变量设置时,他们的表现差不多。当我和你一起做的时候,速度要慢得多。但是当我直接测试你的版本与Ian的版本时,它稍微快了一点。这一切都没有预先定义的变量。但是你是对的,在我的实际代码中,我只能定义一次变量,如果我这样做,那么你的代码的两个代码比多个语句的代码要快得多。不管怎样,谢谢! – GChorn 2013-04-09 08:35:12