中文Web Font 切割工具7.0 —— Rust Speed

簡介
cn-font-split是中文網字計劃所使用的字體分包工具,通過高性能的各種技術將龐大的字體包拆分為適合網絡分發的版本。經過七個大版本的字體研究與代碼迭代,這項技術在我們的網站中得到了充分的應用,實現了中文字體在Web 領域的加載速度與效率的雙飛躍。
cn-font-split不僅支持中文,針對於中韓日文字、少數民族文字、阿拉伯文等皆有優化,可以根據實際字體包內字符進行智能地分包。
-
WebAssembly或者Rust FFI實現, 原生運行分包,進入秒級構建; - 堅持Web 平台為基底,兼容性極強。瀏覽器、Node、Deno、CICD 環境,統統可以運行。 Rust、JS、Python 多語言使用。
- ? 功能齊全完備,支持生成文字圖片預覽,支持完整全字符,支持複雜字形,支持可變字體!
- ⛰️ 自研Rust 工具,構建文本SVG 引擎,獨立渲染文本圖像。
- ?我們有前端編譯器插件啦! —— vite-plugin-font, 支持Vite、Nuxt、Next、Webpack、Rspack,快速嵌入你的前端工具鏈。
Opentype Feature 支持情況支持95 | 部分支持9| 等待測試20
使用文檔指引
如果您想要支持某些語言,可以提交Issues 或者PR。
新版本功能
- ✅ 原生構建支持,速度進入秒級時代(2MB 字體只需要50ms)!
- ✅ 完備測試與版本發布流程!
- ✅ ? 更加擬人的源代碼,維護難度直線下降!
- ✅ 依賴檢查與重構,安全版本。
- ✅ ? 更加可控的分包方式,支持細顆粒度的字符拆分。
- ✅ ? 支持OTF 格式字體打包,支持複雜字形渲染。
- ✅ ?️ 字體預覽圖生成
- ✅ ⌨️ 支持Nodejs、Deno、Bun、Browser,跨平台隨處可使用、構建產物一致!
- ✅ ? 不止中文,只要是包內的字符,統統分包
- ✅ ?️ 支持自動識別可變字體字重
感謝
- 項目核心插件為Harfbuzz,為我們提供了專業級的字體子集化和字體繪製功能。我們採用了Rust 版本的harfbuzz_rs_now 來嵌入Rust 代碼生態,實現了非常理想的字體子集化效果。
- Rust opentype 項目提供了無與倫比的字體信息抽取能力,為字體特性和分包算法提供了強健的基礎。
- Rust Cross 項目提供了強大的Rust 跨平台產物構建能力。
- 特別感謝—— 通義千問和GPT-4o 為Rust 重構過程提供的諸多信息提示和代碼幫助, 主項目能夠在20 天內完成Rust 化,離不開大模型的輔助。
舊版本曾經使用過的項目
- 6.0 版本中,opentype.js 是這個項目為第二解析引擎,主要處理feature 關係判斷和文本轉化為SVG 的任務,在渲染方面給我們的支持很多。
- 6.0 版本中,@napi-rs/ttf2woff2 使得Nodejs 平台和Bun 平台可以以極快的原生速度壓縮字體文件,效率極高,速度極快。
- 6.0 版本中,wawoff2 項目將Google 的woff2 格式轉換功能代碼編譯成為了wasm,為我們的字體壓縮提供了非常簡便的API。但是wawoff2 項目的導出方式為js 嵌入wasm,極大影響了js 打包和使用,故項目也重新構建並發佈出適合的版本。
- 6.0 版本中,多線程採用了workerpool 的解決方案,多線程的加持下,速度快了非常多。
開源許可證
Apache-2.0