背景:用kanzi开发HMI项目,需要支持多个国家语言,每个语言有不同的字体,切换语言,画面卡顿明显
1. 卡顿原因
切换语言会切换字体,并刷新文字的显示,如果字体包中有几万字,那么渲染一个字符需要查询Unicode码很久,现象就是切换英文很快,切换中文等很卡,因为中文的Unicode码大。
2. 优化原理
HMI界面的大部分文字都是固定的,即使是中文,也只使用的几百个字,字体中上千上万的字符都是多余的。把ttf字体中多余字符剔除,就可以得到一个很小的ttf文件,包含的字符就很少,切换渲染会很快。
3. 方案实施
3.1 在Kanzi Studio导出语言表


获得po文件,里面的msgstr就是翻译的文字


3.2 写一个工具,提取msgstr

3.3 写一个网站,裁剪ttf
借助js的fontmin包裁剪ttf,制作网站能方便项目使用
const fontmin = new Fontmin()
.src(fontPath) // 输入字体文件路径
.use(Fontmin.glyph({ // 使用 glyph 插件指定要保留的字符
text: text // 你也可以从 req.body 获取其他字符集参数
// 或者使用 file: 指定一个包含字符的文件
}))
.dest(outputPath); // 输出目录


ttf字体大小下降到24kb

392

被折叠的 条评论
为什么被折叠?



