对 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章