大家好,我又双叒叕来推广我的项目了~

2022-08-27 20:58:49 +08:00
 ZLY201

一些碎碎念

之前在 V 站发了贴,并申请了想 LeetCode 合作,详情可以看:

https://www.v2ex.com/t/868526

https://www.v2ex.com/t/868747

虽然被拒绝了,但是还是很感谢大家提出的意见,经过一个多月的优化和锤炼,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 来做出贡献

以上。

2597 次点击
所在节点    分享创造
5 条回复
s60985545lwh
2022-08-28 09:22:13 +08:00
支持一下👍
cweijan
2022-08-28 10:58:15 +08:00
使用场景确实是很少的, 你也说了来自依赖, 间接引用也算有点流氓了.. 看了下这个库, 有应用价值的只有 set 了.
ZLY201
2022-08-28 12:19:57 +08:00
@cweijan 所以面向的对象是使用 nodeJs 做数据处理的工作者,以及中间件依赖的开发者,其实群体还是很大的
ZLY201
2022-08-28 12:40:09 +08:00
@s60985545lwh 感谢支持 :D
alfredhuo
2022-08-29 00:27:22 +08:00
加油

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/875869

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX