V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ZLY201
V2EX  ›  分享创造

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

  •  1
     
  •   ZLY201 · 2022-08-27 20:58:49 +08:00 · 2575 次点击
    这是一个创建于 600 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一些碎碎念

    之前在 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 来做出贡献

    以上。

    5 条回复    2022-08-29 00:27:22 +08:00
    s60985545lwh
        1
    s60985545lwh  
       2022-08-28 09:22:13 +08:00 via Android
    支持一下👍
    cweijan
        2
    cweijan  
       2022-08-28 10:58:15 +08:00
    使用场景确实是很少的, 你也说了来自依赖, 间接引用也算有点流氓了.. 看了下这个库, 有应用价值的只有 set 了.
    ZLY201
        3
    ZLY201  
    OP
       2022-08-28 12:19:57 +08:00
    @cweijan 所以面向的对象是使用 nodeJs 做数据处理的工作者,以及中间件依赖的开发者,其实群体还是很大的
    ZLY201
        4
    ZLY201  
    OP
       2022-08-28 12:40:09 +08:00
    @s60985545lwh 感谢支持 :D
    alfredhuo
        5
    alfredhuo  
       2022-08-29 00:27:22 +08:00
    加油
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5524 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:58 · PVG 10:58 · LAX 19:58 · JFK 22:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.