引子
本blog使用的主题是Sakurairo,它默认使用google font api来提供字体服务,同时允许使用额外的字体文件。但是问题来了,fonts.googleapis.com在国内不能说是完全不能访问吧,起码也是处于accessible与unacceptable之间的量子叠加态。Sakurairo默认使用了部分google api提供的字体,比如Noto Serif SC、Noto Sans SC、Fira Code、etc。如果api无法访问会直接影响网站的访问速度,虽然使用wp的字体本地化插件可以解决前台的部分字体问题,但是更严重的是,Sakurairo对wp的后台也进行了字体定制,而这些插件似乎无法缓存后台的字体,导致wp后台直接爆炸。
最终催生了此项目。。。
)喜欢喵喵老师(Sakurairo项目contributor)朴实无华的解决方案
介绍
项目介绍详见github的README readme是ai补的( ,这里简单介绍下。
支持将ttf格式或者otf格式的字体文件切片并且自动转换成woff2格式。(实测切片出来的子集里如果两个子集有交集浏览器会直接报错,当时遇到这个问题也是百思不得其解啊)
这是一张css请求的截图:

css的拼接等较为耗时的操作尽量使用了functools.lru_cache装饰器做了优化,确实可以降低几毫秒的服务器响应速度。
带一个简单的预览界面:


可以支持google font api本来没有的字体,比如HYWenHei
已知问题
在功能方面肯定是比不上真正的google font api的,比如不支持字体特效与subset子集化指定。
对于某些字体,比如Noto Sans SC这类字符集较大的字体,我开了8个线程吃了大半个cpu都跑了几个小时才完成子集化操作,可能是cmap的遍历太耗时了,暂时没有想好解决方法。
写在最后的话
代码是矢山,欢迎合理讨论,拒绝人身攻击。
Comments NOTHING