javascript - 为什么 'delete' 在 javascript 中很慢?

标签 javascript arrays

我刚刚偶然发现了这个 jsperf 结果:http://jsperf.com/delet-is-slow

它表明在 javascript 中使用 delete 很慢,但我不确定我明白为什么。 javascript 引擎在幕后做了什么使事情变慢?

最佳答案

我觉得问题不在于为什么删除慢...简单的删除操作的速度不值得衡量...

您显示的 JS 性能链接执行以下操作:

  • 创建两个数组,每个数组包含 6 个元素。
  • 删除一个数组的索引之一。
  • 遍历每个数组的所有索引。

该脚本显示循环遍历应用了 delete 的数组比循环遍历普通数组慢。

您应该问问自己,为什么删除会使数组变慢?

引擎在内部将数组元素存储在连续的内存空间中,并使用数字索引器访问它们。

这就是他们所说的快速访问数组。

如果删除这个有序且连续的索引中的一个元素,就会强制数组变为字典模式...因此,之前元素在数组(索引器)中的确切位置成为键在数组必须在其下搜索元素的字典中。

所以迭代变得很慢,因为不再移动到内存中的下一个空间,而是一遍又一遍地执行哈希搜索。

关于javascript - 为什么 'delete' 在 javascript 中很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27397034/

相关文章:

javascript - SonataMediaBundle : a way to remove unlink thickbox

ios - Swift 3 将 JSON 数据排序/分组到带有部分的 TableView 中

java - [JAVA]我将Integer类型的LinkedList转换为Array。转换后如何确定数组的大小

javascript - 将页面上的所有图像替换为其 src 属性

javascript - 获取 JSON 中的最后一个索引值

php - 在 php 中,使用连接运算符 (.) 向数组添加值的目的是什么?

java - do-while 循环在回答 no 时不会终止

javascript - 循环遍历对象数组,如果属性匹配,则对该对象进行切片 - Javascript

javascript - jQuery SpriteSpin 缩放图像

javascript - 有没有办法缩小我的菜单按钮的回调?