$().each 与 $.each 与 jQuery 中的 for 循环?

2023-11-30

我不明白为什么会发生这种情况。

I read here那 :

首先$.each构成一个single函数调用来启动 迭代器。

第二$(foo.vals).each makes three函数调用来启动 迭代器。

  • 第一个是 $() ,它生成一个新的 jQuery 包装器 设置(不确定在此期间进行了多少次其他函数调用) 过程)。
  • 然后调用$().each。
  • 最后它使内部 调用 jQuery.each 来启动迭代器。

在您的示例中,至少可以说差异可以忽略不计。 但是,在嵌套使用场景中,您可能会发现性能变得 一个问题。

最后,jQuery Enlightenment 中的 Cody Lindley 不建议使用 $.each 用于由于函数调用而导致迭代次数大于 1000 涉及。使用普通的 for( var i = 0... 循环。

所以我用这个 jsperf 测试了它:

(任务:找到已选中其中复选框的 Tr,并为该 tr 着色。)

这是jsbin

但看看jsperf

出乎所有人的意料,opposite是真的。 (chrome、FF 和 IE)

enter image description here

那个用的人$().each(其中调用三个方法是最快的 等等..

这里发生了什么?


您的测试过于繁重,无法真正确定三个循环选项之间的实际差异。

如果您想测试循环,那么您需要尽力从测试中删除尽可能多的不相关工作。

目前,您的测试包括:

  • DOM选择
  • DOM遍历
  • 元素突变

与循环本身相比,所有这些都是相当昂贵的操作。当删除额外的东西时,循环之间的差异更加明显。

http://jsperf.com/asdasda223/4

在 Firefox 和 Chrome 中,for循环比其他循环快 100 倍以上。

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

$().each 与 $.each 与 jQuery 中的 for 循环? 的相关文章

随机推荐

  • 将 cv::Mat 复制到另一个 ROI 内

    我需要复制一个cv Mat图像 源 到另一个 目标 的 ROIcv Mat image I found 这个参考 但似乎它不适用于我的情况 您是否有任何指示我如何使用 OpenCV C 接口来做到这一点 OpenCV 2 4 src cop
  • R、rbind 具有由变量定义的多个文件

    首先 这与 Coursera R 编程课程的作业问题有关 我已经找到了其他方法来做我想做的事情 但我的研究让我发现了一个我很好奇的问题 我有数量可变的 csv 文件 需要从中提取数据 然后取所述文件中 污染物 列的平均值 这些文件在其目录中
  • 如果我们无法绑定MouseBinding的Command,我们该怎么办?

    我希望能够使用常规的MouseBinding捕获我的 CTRL Click 事件TextBlock 不幸的是Commandproperty 不是依赖属性 而且我正在使用 MVVM 所以我无法将它绑定到我的视图模型 微软怎么会忽略这个基本功能
  • 使用“near”作为变量名时出现编译器错误

    我的代码中出现了一个非常奇怪的错误 我用 C 创建了这个类 class Tester float f Tester float float 我是这样实现的 Tester Tester float near float a this gt f
  • 为什么 C++ 中从 stdin 读取行的速度比 Python 慢得多?

    我想比较使用 Python 和 C 读取来自 stdin 的字符串输入行 并惊讶地发现我的 C 代码运行速度比等效的 Python 代码慢一个数量级 由于我的 C 很生疏 而且我还不是专家 Pythonista 请告诉我我是否做错了什么或者
  • Gradle CreateDebugCoverageReport 不运行本地单元测试

    我正在使用 jacoco 进行代码覆盖 它运行 gradlew createDebugCoverageReport 很好并生成所有的代码覆盖率androidTest案例 但是 它不运行本地单元测试 因此不计算这些测试的代码覆盖率 我怎样才能
  • 在输出中打印 Python 版本

    如何从脚本中打印当前 Python 安装的版本号 Try import sys print sys version 这将打印完整的版本信息字符串 如果你只想要 python 版本号 那么巴斯蒂安 莱昂纳德的解决方案是最好的 您可能想要检查整
  • 正确安装 Android SDK、ADT 和 Eclipse 3.6.1

    按照 Eclipse 3 6 1 Classic 和 Android SDK 发布的说明 ADT 其中 OS 2 3 是最新的 错过了几个步骤 在 Eclipse 中加载 ADT 之前 一切似乎都正常 在此之前 将以下依赖项站点添加到列表中
  • 如何在 Metro/WinRT 中将主机名解析为 IP 地址?

    我正在将 WP7 应用程序移植到 Windows 8 Metro 我遇到的 许多 转换障碍之一是根据主机名或 DNS 名称发现 IP 地址 以下是我之前在WP7中使用的示例 DnsEndPoint dnsEnd new DnsEndPoin
  • xcode sqlite3 libsqlite.dylib

    我的项目出现了错误 但我不知道问题出在哪里 这是我编译后的错误 ld警告 在 install Platforms iPhoneSimulator platform Developer SDKs iPhoneSimulator3 0 sdk
  • 为什么我的 requirejs 配置中的 shim 的 `unit` 没有被调用?

    Update 我正在编写一个小模块来处理这个 csrf 令牌问题backbone直到我收到 Louis 答案的推送通知 他的回答很优雅 看起来不错 但我会离开a link to my 主干 csrfmodule github repo 仅供
  • Homebrew:安装新公式 php72-imagick

    我需要在我的 php 7 2 上安装 imagick 模块 I see brew search php72 gt Searching local taps gt Searching taps on GitHub gt Searching b
  • 我们可以在类中声明密封方法吗

    class X sealed protected virtual void F Console WriteLine X F sealed void F1 protected virtual void F2 Console WriteLine
  • 使用 C++ 将托管事件公开给 COM

    可以公开用 C 编写的托管事件 以便在使用 C 编写的 COM 对象中公开和使用 对 com 和 atl 不太熟悉 您能否展示一下 MSDN 文章中所示示例的 C 方面是什么样子的 http msdn microsoft com en us
  • 使用 ADO 处理 MS Access 中附件类型的字段

    我的数据库中有一些字段需要存储图像 位图 JPG 或 PNG 和 PDF 或 Excel RTF TXT 文件 通过互联网浏览 我了解到MS Access 2007 和更新版本 有一个类型字段Attachment这可以满足我的需要 但是 我
  • 如何获得算术中忘记转换的警告?

    考虑这种情况 uint64 t add uint32 t a uint32 t b return a b programmer neglected uint64 t a b 我们如何让 GCC 或任何其他编译器 的 C 或 C 前端对这种情
  • 使用 iOS/Obj-c 按流派搜索 Apple App store

    您将如何使用 Obj c 搜索 Apple App store 来执行以下操作 返回游戏总体类别中前 100 名的详细信息或 特定游戏类别 返回游戏类别中特定游戏的详细信息 Anyone 嗯 据我所知 您有两种方法来搜索 App Store
  • WPF 中图像填充按钮上的空间

    I have Button在我的 WPF 应用程序上 我想要一个Image来填补Button完全地 目前我有以下代码 它没有填充Button
  • 在 Unix 中根据模式重命名多个文件

    一个目录下有多个以 prefix 开头的文件fgh 例如 fghfilea fghfileb fghfilec 我想将它们全部重命名为以前缀开头jkl 是否有一个命令可以做到这一点 而不是单独重命名每个文件 有多种方法 但使用rename可
  • $().each 与 $.each 与 jQuery 中的 for 循环?

    我不明白为什么会发生这种情况 I read here那 首先 each构成一个single函数调用来启动 迭代器 第二 foo vals each makes three函数调用来启动 迭代器 第一个是 它生成一个新的 jQuery 包装器