JSQLite:在浏览器里用TypeScript重写SQLite只读核心,能行吗?
原创JSQLite:在浏览器里用TypeScript重写SQLite只读核心,能行吗?
第一次听说有人把 SQLite 的只读实现逐行翻译成 TypeScript 时,我的第一反应是“谁这么想不开”。SQLite 在数据库世界里以“小而全”著称,代码量大但结构稳定,C 到 JavaScript 的翻译通常伴随着代码膨胀,性能上几乎注定要打折扣。但 JSQLite 这个项目确实存在,作者 salva 在 GitHub 上放了 1,150 次提交,版本号 0.0.0-beta.7,公开测试版 来源:GitHub。从C到TypeScript:一次反直觉的纯翻译实验
这个项目的核心约束很有意思,不嵌入 C、不依赖原生 SQLite、不用 WebAssembly,只面向浏览器和 Fetch 兼容运行时 来源:GitHub。翻译出来的代码跑在普通 JS 引擎里,这意味着它放弃了 WASM 这条许多 SQLite 浏览器移植走过的路。sql.js 和 wa-sqlite 都是 WASM 路线的代表,而 JSQLite 选了一条完全不同的路。 作者在 README 里说这是“browser-safe read-only SQLite”,许可证用 GNU GPL v3 或更高版本,这与 SQLite 传统的公共领域许可不同 来源:GitHub。这里已经埋了一个伏笔,后面再说。 关于“逐行翻译”这个说法,仓库里有 reference/sqlite 目录,保留了原文 C 源码作为参照物 来源:GitHub。1,150 次提交对应的是翻译过程中的迭代,这个项目远非一次写完就算完。这种纯翻译路线在 SQLite 移植史上确实少见,因为普遍认为 C 到 JS 的代码膨胀会带来性能灾难 来源:HN。渐进式路线图与已落地的功能切片
项目的完整产品契约写在 docs/SPEC.md 里。路线图分三步,先做 JS/TS 友好的 C 等价 API,然后建上游测试 harness 和首个测试集,最后渐进式翻译,每个切片都有测试先行 来源:SPEC。 目前公开 API、pinned 开发 oracle、测试 harness 和渐进式 TypeScript 引擎都已经存在 来源:SPEC。已支持的 SQL 特性包括 represented joins、compounds、aggregates、subqueries/views、CTEs、windows、JSON 函数以及选定的索引规划 来源:GitHub。 测试方面有两个目录,test/ 管运行时行为,test-d/ 管类型层面 来源:GitHub。项目还提供 live playground,可以在浏览器里在线体验 来源:GitHub。 README 也说,这只覆盖了 beta 分类里的功能承诺,远未达到完整的只读 SQLite 兼容,更谈不上项目完成。作者特意区分了“已承诺功能”和“差距、优化、交付证据”,beta 不等于正式发布 来源:GitHub。多源交叉验证:仓库文档与社区数据的矛盾
把 README 和 SPEC.md 放在一起看,两者在“无 WASM、无原生扩展”这个核心约束上完全一致 来源:GitHub、来源:SPEC。文档内部没有矛盾。 但仓库根目录的 review.md 和 NOTICE.md 显示作者在发布前做了内部评审,而 HN 帖子只有 1 点、0 条评论 来源:GitHub、来源:HN。1,150 次提交对 0 条 HN 评论,这个反差很说明问题,项目高度活跃,但在外部社区几乎没有可见度。 reference/sqlite 目录的存在验证了“逐行翻译”的方法论 来源:GitHub。作者保留了原始 C 源码,翻译过程中可以随时对照。值得跟踪的下一步与潜在挑战
一个实际的障碍是,项目没有发布到 npm registry,只能通过 GitHub release tarball 安装 来源:GitHub。这意味着标准工具链里的安装流程走不通,想试用的人得手动下载。 测试 harness 如何与上游 SQLite 测试套件对齐,SPEC.md 里提到的“upstream-test harness”是关键验证点,但目前尚不明确 来源:SPEC。没有这个对齐,就无法知道翻译后的实现到底覆盖了上游多少行为。 纯 TypeScript 翻译的代码体积和运行时性能还是未知数,需要与现有的 sql.js(WASM)和 wa-sqlite(WASM+OPFS)做基准对比 来源:GitHub。作者没有提供基准数据,这块空白短期内不会被填上。 最后是许可证问题。GPL v3 与 SQLite 的公共领域许可不兼容 来源:NOTICE。对于想用 SQLite 做商业闭源浏览器应用的团队来说,这个许可证选择会让 JSQLite 很难被接受。 我的判断是,这个项目在技术上确实走了一条不寻常的路,但目前还处于 beta 早期,外部关注几乎为零,性能数据缺失,许可证也会劝退一部分人。值得跟踪,不值得现在就用,等它把 npm 发布和基准测试补上再说。原文:
JSQLite: Browser-safe TypeScript version of SQLite's read-only implementation · 来源:Hacker News
作者:itfan123 值班编辑 · 发布于 2026年11月13日
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123



