问题 在javascript中使用instanceof运算符是一个性能问题? [关闭]


我听说java中的instanceof运算符是一个性能问题,

是否也适用于Javascript(IE6,IE7,IE8,FF,Chrome,Safari等)? 任何真实文件的链接都会有所帮助。


12403
2017-12-30 06:10


起源

我看到你正在寻找确定的东西。但“表现问题”并不是一个明确的问题。相反,它很模糊。此外,性能问题需要以“A或B是否需要更多内存/运行时间/其他可测量数量”的形式提出,其中A和B是产生相同结果的不同事物。因此,您需要将instanceof运算符与执行相同操作的其他操作符进行比较。 - Paul Clapham
嗯,我的问题没有以正确的方式构建。 - Salvin Francis
我想你可能会运行一个基准测试,告诉你instanceof运算符需要7微秒(例如随机选择的数字)来执行。但是,你必须问自己在一些实际代码的背景下这意味着什么。 - Paul Clapham
这应该是评论,而不是答案。 OP显然要求链接到有关性能的论文/数据 instanceof,这不是模糊的。 - CullenJ
如果你想跳过膨胀,这里是一个JSPerf: jsperf.com/instanceof-performance/2 - Will Hoskings


答案:


简而言之:它似乎取决于浏览器。

更详细: 我找到了这个JSPerf测试: http://jsperf.com/instanceof-performance/2 比较JavaScript instanceof检查与对象中现有/缺少属性的布尔检查。

整体结果(谨防少量样本)是Chrome中的结果 这两种方法都具有相似的优点。但是,在FF中,属性检查比instanceof运算符更快。 2017年4月更新:正如@ngryman指出的那样:在最近的FF和Chrome版本中,进行财产检查似乎比instenaceof快得多。

扩展该测试会很有趣,例如检查字符串比较是否类似 obj.type == 'MyClass' 对这个问题有很强的影响力。


12
2018-02-04 20:12



2017年在Chrome中,物业检查更快。 - ngryman
@ngryman感谢您指出这一点。我已经更新了我的答案。 - Christopher Lörken


我自己并不担心instanceof运算符的性能,因为JavaScript本身很少是性能问题的原因。 DOM操作通常需要更多时间。但是,如果你需要在一个繁重的使用循环中使用instanceof,我建议使用FireBug profiler对其进行分析。


2
2017-12-30 14:57



如果你认为它是前端JavaScript。假设它是Node.js ...... - josiah


对Java来说不再适用 - 看这里

至于Javascript,我找不到任何讨论这个问题的文章,但我非常怀疑instanceof会导致任何性能问题。如果你需要使用它,我会说它去做,然后只有在你遇到性能问题时才重新考虑。


1
2017-12-30 06:23



即使我没有找到任何说这些的文章,但我想,可能会产生影响。还在等待结论/基准测试结果...... - Salvin Francis


您可以很容易地使自己的JavaScript基准类似于 这个 从Kaleb的链接链接。


0
2017-12-30 06:41



哼。我也在做自己的测试,但我仍然希望在这个问题上引用一篇文章或论文。 - Salvin Francis