【问题标题】:What is the most common waste of computing power in Javascript?Javascript中最常见的计算能力浪费是什么?
【发布时间】:2016-05-24 05:31:41
【问题描述】:

我们都见过这样做的人:

jQuery('a').each(function(){
    jQuery(this)[0].innerHTML += ' proccessed';
});

function letsPoluteNS() {
    polute = '';
    for (morePolution = 0; morePolution < arguments.length; morePolution++)
        polute.join(arguments[morePolution]);
    return polute;
}

等等。我想知道人们见过哪些最常见的 JavaScript/jQuery 技术会减慢页面速度和/或浪费 JavaScript 引擎的时间。

我知道这个问题似乎不适合什么是公认的问题,但我问的是“什么是最常见的公认浪费?”

【问题讨论】:

  • 你如何判断“最常见的垃圾”?

标签: javascript jquery performance


【解决方案1】:

我对此感到内疚。基本上只在 jQuery 选择器中使用元素的类。而不是将类选择器与元素标签名称结合起来。

<div></div>
<div class="hide"></div>
<div class="show"></div>
<div class="hide"></div>
<div class="hide again"></div>

$(".hide").hide();

而不是更快

$("div.hide").hide()


这也是低效的,很多人不使用选择器的上下文参数

$( selector, [ context ] )


   $("#mydiv").click(function () {
      $("#mydiv span").show();
   }

这样处理比较好:

   $("#mydiv").click(function () {
      $("span", this).show();
   }

【讨论】:

  • 什么? #hello 绝对是更快的一个(尽管document.getElementById())。
  • 是的 getElementById 比 {getElementByClassname->getElementById} 快得多,即使没有开销
  • $("#hello") 本质上与getElementById('hello'); 相同,这是一种非常有效的获取 dom 元素的方法。向选择器添加额外的标签名称没有帮助。
  • 哦,你的意思是上课。 *掌心*
  • @BoltClock ,@qwertymk,@box9 对不起,伙计们来晚了,我的意思是说班级不是身份证。我编辑了我的答案。
【解决方案2】:

你还会看到这个:

$('#this').find('a').doSomeThing();

知道什么更有效吗?一个涵盖两者的选择器将为您提供更好的服务...

$('#this a').doSomeThing();

这似乎很明显,但你会一直看到它。

【讨论】:

  • 其实不然。第一个更快,因为它直接委托给document.getElementById() 以缩小搜索范围。
  • 那么循环选择的集合更有效吗?我一直认为单个选择器是首选方法。
  • 视情况而定。可以由浏览器直接处理的事情总是更快。最明显的例子是getElementById(),但如果浏览器支持getElementsByNamegetElementsByTagNamequerySelectorAll,那么提供可以由这些函数直接处理的选择器并使用jQuery 方法过滤结果会更快。
【解决方案3】:

与跟踪用户和大量宣传有关的任何事情。那肯定是浪费空间。

我猜在非常复杂的 html 中错误地使用诸如使用类而不是 ids 作为选择器之类的东西会减慢速度。 当然还有ie

【讨论】:

  • 您可以通过将其更改为 z>1000 来使其更慢
  • @JCOC611 也适用于 (i=0;i
  • @travelboy 更改为 z&gt;1000 将使循环根本不运行;)我认为您的意思是 z--
  • @box9: 对……脸红 是啊,这个性能的东西很先进! :)
  • 大声笑 M$ 的实现如何MakeIESlow()??大声笑,它已设置为默认值 XD
【解决方案4】:

调用 $.animate 来动画元素应该会让事情变慢。

【讨论】:

    【解决方案5】:

    不从 getgo 声明你的 var 以便它们被缓存,不使用闭包和重复 x 个相同的函数/调用/等,但只使用 eval() 更改每个的 id 或类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      相关资源
      最近更新 更多