之前在 V 站发了贴,并申请了想 LeetCode 合作,详情可以看:
虽然被拒绝了,但是还是很感谢大家提出的意见,经过一个多月的优化和锤炼,Js-sdsl 有了自己完整的一套社区
包括:
在 Benchmark 中,Js-sdsl 被证实已经超越了当前最流行的数据结构库,性能是 denque (号称当前最快的双端队列) 接近三倍,是 functional-red-black-tree (npm 下载量两千万+每周) 的六倍
特别的,我们的 Deque 在持久性插入的情况下速度接近 Js 原生 Array.push
后续我们将会进行对 Hash 结构的优化,期望能超越 JS 原生 Set 和 Map ,并将位图 (bitmap) 加入到库中
Q:做这个有什么用?
这个是比较多的一个问题,当然也很好解答
第一点,从社区情况来看,Js 并不提供原生的相关数据结构,只是在 ES6 中提供了 Set 和 Map 两种哈希表,我们希望通过编写 Js-sdsl 来解决这个问题
举个例子,我有一个 JSON 数组,内部包含 a, b, c 四个字段,其中 c 为主键,每个位置上都不一样,我想根据 a, b 的值来实现去重
使用 Js-sdsl 我们可以很好的实现这一点
import { OrderedSet } from 'js-sdsl';
const arr = [{ a: 1, b: 1, c: 1 }];
const st = new OrderedSet(arr, (x, y) => {
if (x.a !== y.a) return x.a - y.a;
if (x.b !== y.b) return x.b - y.b;
return 0;
});
第二点,npm 上虽然这样的轮子很多,但是大多都是老旧项目,规范和性能堪忧,这点在 benchmark 中得到证实
Q:使用的这样的场景很少
难道前端真的用不到数据结构吗?
真是大错特错!
随便去 npm 上搜索一下相关的关键词就会发现下载量是很高的,大多数都来自 nodeJs 依赖,比如 mysql 、Kafka 插件,又或者想要使用 nodeJs 进行数据处理的爱好者或工作者,只要是和数据处理相关,就一定会有相关的使用场景
在 nodeJs 中,就连并发安全问题都是一大难点 https://www.npmjs.com/package/async-lock
首先,我们想要通过 Js-sdsl 这一库推动前端数据结构的发展,并创立一些规范,为此我们呼吁更多的算法爱好者加入到 Js-sdsl 的生态建设中
其次,通过 Benchmark 的展现,我相信在下一个大版本中可以吸引到更多底层开发人员接入 Js-sdsl 以提高服务性能
感谢 V 友的耐心观看,如果可以的话希望的到您的一颗 star ,同时也欢迎提交 Issue 和 PR 来做出贡献
以上。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.