提高Javascript性能最经济的方法(通过取代jQuery)

提高Javascript性能最经济的方法(通过取代jQuery),javascript,jquery,performance,refactoring,Javascript,Jquery,Performance,Refactoring,好吧,除了买一台机器来提高性能 我有一个Javascript/AJAX驱动的web应用程序,它是利用jQuery编写的,目的是加快初始开发时间。我发现从性能的角度来看,我已经准备好开始逐段替换以提高代码效率 一个例子 我不再在活动区域中使用$(选择器).text(),而是使用getElementById(id).innerHTML 我有点不知所措,不知下一步该怎么做才能最大限度地发挥我的作用,使用jQuery会导致性能下降(超出加载时间)?任何jQuery自定义选择器,即不是浏览器固有的东西,

好吧,除了买一台机器来提高性能

我有一个Javascript/AJAX驱动的web应用程序,它是利用jQuery编写的,目的是加快初始开发时间。我发现从性能的角度来看,我已经准备好开始逐段替换以提高代码效率

一个例子

我不再在活动区域中使用
$(选择器).text()
,而是使用
getElementById(id).innerHTML


我有点不知所措,不知下一步该怎么做才能最大限度地发挥我的作用,使用jQuery会导致性能下降(超出加载时间)?

任何jQuery自定义选择器,即不是浏览器固有的东西,都会慢几个数量级。这样做

$('.sharedclass').find('crappyselector');
将加快长时间搜索

此外,如果您在循环(即表)中执行插入操作,请先构建一个字符串,然后一次全部插入

这是我遇到的两个大问题


此外,配置文件。修复一些没有问题的东西是没有意义的。

任何jquery自定义选择器,即不是浏览器固有的东西,都会慢几个数量级。这样做

$('.sharedclass').find('crappyselector');
将加快长时间搜索

此外,如果您在循环(即表)中执行插入操作,请先构建一个字符串,然后一次全部插入

这是我遇到的两个大问题

此外,配置文件。修复一些没有问题的东西是没有意义的。

  • 在类之前使用标记
  • 缓存jQuery对象
  • 利用锁链的力量
  • 使用子查询
  • 限制直接DOM操作
  • 利用事件授权(也称为冒泡)
  • 消除查询浪费
  • 延迟到$(窗口)。加载
  • 压缩你的JS
  • 学习图书馆
  • 总是从身份证上下来
  • 这些是我在使用jQuery时始终牢记的关键领域。

  • 在类之前使用标记
  • 缓存jQuery对象
  • 利用锁链的力量
  • 使用子查询
  • 限制直接DOM操作
  • 利用事件授权(也称为冒泡)
  • 消除查询浪费
  • 延迟到$(窗口)。加载
  • 压缩你的JS
  • 学习图书馆
  • 总是从身份证上下来

  • 这些是我在使用jQuery时始终牢记的关键领域。

    $。每个
    循环,其中循环特别大。如果很小,差别可以忽略不计,但是传统JavaScript for循环的性能要好得多,特别是在处理大量数据时

    此外,这并不是你特别想要的,而是在使用事件时重新访问所有选择器,特别是对于IE,它不支持“
    getElementsByClassName
    ”(许多其他浏览器都支持),并且在可能的情况下,在事件连接中使用的任何类名前加上ID。我发现这提高了IE的性能,特别是当与删除无上下文的伪选择器(如
    $(“:input”)

    e、 g

    变成

    $("#id").delegate(".etc", "click", function() { });
    

    $。每个
    循环,其中循环特别大。如果很小,差别可以忽略不计,但是传统JavaScript for循环的性能要好得多,特别是在处理大量数据时

    此外,这并不是你特别想要的,而是在使用事件时重新访问所有选择器,特别是对于IE,它不支持“
    getElementsByClassName
    ”(许多其他浏览器都支持),并且在可能的情况下,在事件连接中使用的任何类名前加上ID。我发现这提高了IE的性能,特别是当与删除无上下文的伪选择器(如
    $(“:input”)

    e、 g

    变成

    $("#id").delegate(".etc", "click", function() { });
    

    根据其他人的回答,我想我会在一个经常引用的答案上投入自己的两分钱。注意浏览器在选择器性能上的差异!你认为可能总是最快的并不总是真的

    最安全的选择器当然是代码> $'('yf'fo'),但是考虑以下内容:

    $('.bar')
    $(''foo.bar')
    $(''foo')快。在本机支持
    getElementsByClassName()
    的浏览器中查找('.bar')
    。事实上,速度要快得多(FF和基本上除IE以外的所有浏览器的速度都是FF的两倍多)

    有关证据,请参见


    你也许可以做一些特定于浏览器的选择器优化。

    根据其他人的答案,我想我会在一个经常引用的答案上投入自己的两分钱。注意浏览器在选择器性能上的差异!你认为可能总是最快的并不总是真的

    最安全的选择器当然是代码> $'('yf'fo'),但是考虑以下内容:

    $('.bar')
    $(''foo.bar')
    $(''foo')快。在本机支持
    getElementsByClassName()
    的浏览器中查找('.bar')
    。事实上,速度要快得多(FF和基本上除IE以外的所有浏览器的速度都是FF的两倍多)

    有关证据,请参见


    您可能可以执行一些特定于浏览器的选择器优化。

    尝试其他框架。请参见DOJO获胜的比较:
    我喜欢上面给出的所有提示,并发现Jose Vega的工作很好。

    尝试其他框架。请参见DOJO获胜的比较:
    我喜欢上面给出的所有指针,并发现Jose Vega的工作很好。

    还请注意,
    $('div.sharedclass').find('whatever')
    (或者,如果不是“div”,则是适当的标记)可能比仅仅一个类名要好。正如insert all一次将子树放在一个片段中所述,@Pointy中的ressing并不总是这样!看到我的答案了吗