【问题标题】:Sort array of 50 000 objects - Javascript [closed]对 50 000 个对象的数组进行排序 - Javascript [关闭]
【发布时间】: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 个项目进行排序看起来像冒泡排序性能。您确定在数据提取期间分页不起作用以进行排序吗?
  • 你确定是那种,而不是别的?

标签: javascript angular sorting datatable large-data


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 2022-06-17
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      相关资源
      最近更新 更多