- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我已经阅读了关于这个主题的几个问题/文章,并且我在我的解决方案中测试了使用 for
的相同代码块在大多数情况下比 each
快.
然而,我的问题与事实有关,在我的页面中,我有大约 30 个“循环”,使用 each
的起始结果约为 5300ms(平均),最大值为 5900ms,最小值为4800 毫秒。
在我将它们更改为 for
之后,最终结果出人意料地变慢了,比之前的平均值花费了更多的时间(而且从未低于 4800 毫秒,甚至高于 6000 毫秒)。 ...但是当我将 console.time('Time')
console.timeEnd('Time')
放在每个“循环 block ”中时,我得到了预期的结果( FOR 更快)。
使用 for
的全局“时间”怎么可能比使用 each
慢?
P.S.- 完整的源代码非常庞大,这里重要的部分是唯一的变化是:循环 each
转换为 for
.
用于 For 循环的示例
var l = list.length;
for (var i=0;i<l; i++) {
}
用于每个循环的示例
$.each(list, function (i, item) {
});
更新 #1
console.time('Time')
测量时间console.timeEnd('时间')
。对于全局时间,我只使用一个“计数器”。对于多个计数器,我当然使用不同的名称。更新 #2
For
或 Each
) list[i].SomeProperty
,恕我直言,时间差异永远不能归咎于内部代码(我认为)。更新#3
i
、ii
、iii
使用级联“循环”。var l = list1.length; ...; l = list2.length;
这同样适用于for
变量i
、ii
、iii
。
更新 #4
我注意到 Chrome 中的一个奇怪行为:以下模式用于重复多次,下降一段时间然后再次上升。
在所有这些测试期间,我关闭了所有其他 chrome 选项卡和不必要的应用程序。尽量减少不稳定的 CPU 可用性。
最佳答案
由于您正在对空循环进行基准测试,因此您为 JIT(即时编译器)提供了充足的优化空间。 each
调用可能会被一起删除,因为它没有副作用。但是,for 循环必须运行,因为 i
定义在 包含 for 循环的范围内,而不是在 for 循环内。
(function() {
for (var i=0; i<10; i++) {}
console.log(i); // outputs 10
})();
对比
(function() {
[0,1,2,3,4,5,6,7,8,9].forEach(function(i) {});
console.log(i); // i is not declared
})();
这也是 JSLint/JSHint 提示 i
被以下代码声明两次的原因:
for (var i=0; i<10; i++) {}
for (var i=0; i<10; i++) {}
关于Javascript For 循环 VS JQuery 每个 : strange result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14583941/
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 9 年前。 所以我运行了这段代码 String line =
此代码适用于我的网站: $(function(){ $('.link-follow-stop').on('click', function(event){ console.lo
private synchronized Map calculateStanding() { System.out.println("Calculate standing for
下面的程序 (prog1) 抛出 OutOfMemoryError 错误。确实如此。但如果我在第 5 行(prog2)下方添加 sysout,它不会抛出错误。这种奇怪的行为有什么原因吗? 程序1: p
class Foo(object): def __init__(self,x): self.x = x self.is_bar = False def
好的,我有一个设置了高度和宽度的简单 div。前后也设置了高度和宽度。它们都设置为显示为 block ,伪元素的内容为“”。 :before 在内容里面,而不是在它之前。:after 之前有一大堆奇怪
我无法解释 Scala 集合的这种行为。 让我们从一些定义开始。 import scala.collection.mutable.Set case class Item(name: String, c
在阅读我遇到的代码时,结构的以下定义和初始化: // header file struct foo{ char* name; int value; }; //Implementation file s
我正在尝试用 c 操作二进制数。我用下面的最小代码发现了一个奇怪的事情。谁能告诉我“+”和“|”有什么区别这里?谢谢! char next_byte1 = 0b11111111; char next_
我是德尔福的新手。在 TStrem 类的文档中,我读到它是一个抽象类。所以我认为当我尝试使用 创建它时编译器会出错 stream := TStream.Create(); 为什么不呢? 最佳答案 De
我有 2 个简单的表单,Form1 和 Form2 (Delphi 7)。 Form1 打开 Form2,我在那里等待特定的组合键 (Ctrl + F2)。一旦我关闭 Form2 并返回到 Form1
我有很多建立TCP网络的类-使用boost::asio,使用Packet进行传输。 (Packet的基类是std::vector) 我以为我已经解决了所有可能的内存泄漏,但是后来我在关闭客户端之前只是
我对以下声明有一些疑问: SELECT 1 FROM dual WHERE DECODE(1, 0, (SELECT COUNT(*) from tbl
我已经在 symfony 2.1 上安装了最新的 Sonata 管理包,但遇到了以下问题: 配置文件: services: app.geo.admin.city: class: App
我必须输出一系列先前保存在数据库中的随机图像。在输出的那一刻,而不是打印一张图片,代码打印一个奇怪的字符串(meaby dumpfile?): (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(
我刚刚在从 Code Project 下载的项目中看到了这个: base.DialogResult = this.Result != null; 我不认为自己是 C# 新手,但这个对我来说是新手。谁能
看看这个...今天晚上我试图将一些 primiteves 转换到 wrapper 上时发现: Integer i = (Integer)4; Integer i = (Integer)4f; // D
我很少使用 Python,所以我不清楚为什么允许这样的行为:没有 w 对象,因此它没有 s 属性,那为什么 f 允许进行 w.s 赋值? >>> def f(): w.s="ads" #al
在 Jsfiddle 上:http://jsfiddle.net/jhzux/ 我在这个简单的脚本上浪费了很多时间。我想做的是在 jQuery 中启用克隆表单,然后使它们正常工作。 首先,当我在 Js
这是我的代码: .specific_tag_cases a:after{ position: absolute; font-family: Arial; background-
我是一名优秀的程序员,十分优秀!