meow-memorizing

Meow Memorizing

一个简单易用的记单词浏览器插件:在日常浏览网页时自动高亮生词,选词即可查询和加入词库,让背单词融入真实阅读场景。(讨论)

License

ts react biome Linux Windows MacOS


项目简介

Meow Memorizing 是一个基于 WXT + React 的跨浏览器扩展,面向希望通过英文网页阅读积累词汇的用户。插件会把用户保存的单词同步到页面扫描流程中,在网页正文里自动标出已收藏单词;用户也可以直接选中页面上的新词,查看释义并加入自己的词库。

项目的核心设计目标是:使用门槛低、页面侵入少、匹配性能稳定。词匹配热点逻辑由 Rust 编译到 WASM,通过 Aho-Corasick 自动机一次扫描完成多词匹配,避免在大词表下用 JavaScript 对每个单词反复 indexOf 带来的性能退化。

已上架 Chrome Web Store

https://chromewebstore.google.com/detail/ginipindgefglbpiaogadmdknaaojdhp?utm_source=item-share-cb

使用演示

example.gif

功能亮点

技术栈

方向 技术
扩展框架 WXT、Manifest V3
前端界面 React 19、TypeScript、Ant Design、Tailwind CSS
扩展能力 @webext-core/storage@webext-core/messaging
高性能匹配 Rust、WASM、aho-corasick、wasm-bindgen
包管理与构建 Bun、Vite、TypeScript
代码质量 Biome、oxlint、Cargo fmt、Clippy
测试 Vitest、Playwright e2e / benchmark、Cargo test

架构优势

Rust + WASM 高性能词匹配

整页扫描单词的热点计算下沉到 Rust 编译的 WASM 后端 (crates/wasm-matcher),用 Aho-Corasick 自动机一次扫描全部命中, 替代原先 O(文本 × 单词数)indexOf 嵌套循环,匹配性能与单词表 规模无关。自动机按单词表缓存复用;WASM 以 base64 内联进扩展包, 不需要额外 fetch,也不需要配置 web_accessible_resources

无 JS 兜底:不支持 WASM 的浏览器即不支持本插件。这个取舍可以让运行路径更简单,也避免维护两套匹配语义。

详见 crates/wasm-matcher/README.mdsrc/wasm/README.md

MV3 CSP 兼容

WASM 初始化运行在 background service worker 中,content script 通过消息调用 matcher。这样可以避开宿主页 CSP 对 WebAssembly.Module 的限制,在 GitHub、X 等严格 CSP 页面上仍能稳定高亮。

自包含发布产物

scripts/build-wasm.sh 会用 release 模式构建 wasm32 目标,再由 scripts/inline-wasm.ts.wasm 嵌入生成文件。扩展运行时不需要 再拉取额外的 WASM 资源,发布产物更容易在扩展商店和本地安装环境中保持一致。

开发

安装依赖:

bun install

启动开发环境:

bun run dev

Firefox 开发环境:

bun run dev:firefox

生成 WASM:

bun run wasm

打包

bun run build

产物位置:

之后谷歌浏览器开发者模式可直接安装已解压目录;商店或发布流程使用对应 zip。

构建会自动先生成 WASM (bun run wasm),需要 wasm32-unknown-unknown 目标与匹配版本的 wasm-bindgen-cli(当前固定为 0.2.122)。

常用命令

bun run compile
bun run check:rust
bun run lint:rust
cargo test -p wasm-matcher
bun run test:e2e

说明:

相关文档

参与贡献

欢迎提交 issue、PR,或者在 Discussions 里交流使用体验和改进建议。

License

Code: (c) 2024 - Present - yebei199

License: GPL-3.0-only

License Text: View License Text