对 50 000 个对象的数组进行排序 - Javascript [关闭]

Posted

技术标签:

【中文标题】对 50 000 个对象的数组进行排序 - Javascript [关闭]【英文标题】:Sort array of 50 000 objects - Javascript [closed] 【发布时间】:2021-11-25 06:10:27 【问题描述】:

我需要在 javascript(角度项目)中对一组对象进行排序。

我的对象相当简单,只是一些字符串和整数的单层:


    id: 7683,
    base: "example",
    value: 1000000,
    poster: "example",
    price: 100,
    itemCount: 49

这些对象将有 50 000 个,我将它们显示在一个表格中,用户应该能够在其中按任何属性进行排序(我对它们进行分页以在渲染期间节省资源)。

我当前的实现是带有自定义排序功能的基本 javascript 排序算法:

this.myList.sort((a,b) => a.id - b.id)

目前这需要大约 25 秒,这不是我所追求的用户体验。我测试了一个数据表实现,它似乎工作得很快,所以我试图找出为什么我的速度没有那么快。

完成我的排序的最快方法是什么?我需要编写自定义快速排序吗?如果是这样,你介意解释一下使用自定义函数的默认排序会比我自己写的更慢吗?谢谢

编辑:

感谢那些强调不应该花这么长时间的人。我不确定这样的合理时间表。在创建了一些测试用例之后,似乎是 UI 元素的绘制/渲染花费了时间(尽管 chrome 调试器说这都是脚本,也许我对此的理解是不正确的)。感谢您的帮助。

【问题讨论】:

尝试将排序作业分散到 Web Worker。我对我的项目进行了相同的精确排序计算,并为此使用了 web worker。 更好的问题是,为什么要对 50k 项进行排序?这是什么类型的应用程序? 25秒怎么算? 25 秒对 50000 个项目进行排序看起来像冒泡排序性能。您确定在数据提取期间分页不起作用以进行排序吗? 你确定是那种,而不是别的? 【参考方案1】:

我建议您使用mat-sort,它非常快。

您可以做的另一件事来改进排序:

    如果可以的话 - 按服务器排序会更快更容易。 检查 API 请求需要多长时间才能完全获取数据 - “25 秒”可能是由慢速网络/文件格式(如需要解析的字符串/gzip 等)引起的...而不是排序本身。 仅在数据已排序后才呈现数据(如在 rxjs 管道 / *ngIf... 中排序)。 您可以使用trackBy,它可以加快处理速度。 您可以将第一个分页器页面的数据保存在 localStorage 中 - 然后在第二次您可以将第一页(来自 localStorage)呈现给用户 - 在您对“幕后”进行排序并重新呈现完整数据时。 还有更多解决方案取决于您拥有的应用程序 - 例如,如果它是具有相关数据的小型应用程序 - 您可以在应用程序初始化期间对数据进行排序APP_INITIALIZER Angular 材料table/paginator/sort 可以大大加快订购速度 - 此链接示例检查 23,575 个对象。

【讨论】:

【参考方案2】:

尝试一些解决方案,例如快速排序算法: https://github.com/duereg/js-algorithms/blob/master/lib/algorithms/11-sorting/quickSort.js

【讨论】:

以上是关于对 50 000 个对象的数组进行排序 - Javascript [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用关系对 NSMutableArray 进行排序

在javascript中对具有偏移量的对象数组进行排序

无法对数组进行排序

用于对字符串进行排序的 C++ sort() 函数

对多个字典的数组进行排序

根据嵌套键值对对象数组进行排序的最快方法