javascript - 为什么 native 浏览器排序功能比快速排序慢?

标签 javascript performance sorting quicksort

我实现了快速排序,发现它比原生 .sort() 方法更快,here is the Performance test

为什么以及如何发生这种情况?

最佳答案

原因是尽管 .sort() 方法是原生的,但它比快速排序更通用。

排序方法采用比较函数。而在快速排序的情况下,比较的种类已经有限。

native sort() 方法速度较慢,以解决更多非常规比较函数。

另请注意:您应该阅读 underscore.js 与 lowdash 的对比。

Lowdash 充满了使用 for 循环而不是原生函数来提高速度的方法。

更新: 我阅读了下面的评论并意识到我的错误。经过一番挖掘,我找到了 native 性能较慢的真正原因。 native 代码显然是用较低级别的语言编写的,例如 C,其“安全”程度低于 javascript。

native 函数有许多检查以确保没有错误并且不会中断。 Javascript 代码不需要像 Javascript 那样多的检查,因为一种语言无论如何都会使您避免许多此类错误。

答案仍然不太令人信服,但是与 Array.forEach 相比,来自 lowdash 的 .each 也有类似的结果,低破折号的实现速度更快。这是因为低破折号实现跳过了 if (... in ....) 检查。由于当今 Javascript 的编译方式,诸如此类的小差异可以帮助 javascript 变得更快。所有功能在运行之前基本上都已转换为 native 代码。因此原生优势微乎其微。

关于javascript - 为什么 native 浏览器排序功能比快速排序慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20649515/

相关文章:

javascript - 使用按钮更改 javascript 变量

javascript - JS 脚本加载与 HTML 中的 <script> 标签

java - 按修改时间排序更改文件,不会出现比较方法违规错误

javascript - Vuex 在通过开发工具手动提交之前不会提交更改

javascript - ajax 在 Laravel 中无法工作,显示找不到页面

c# - 为什么 LZMA SDK (7-zip) 这么慢

performance - 在一个文档中存储多个大型数组 MongoDB

ruby-on-rails - 在 ruby​​ in rails 中按日期降序排序

python - 按排序顺序通过键遍历 Python 字典

javascript - 防止图像幻灯片增长超过容器单元格