工做中我相信你們都遇到過設計要求使用一些奇奇怪怪字體的需求,而後由於字體文件太大,選擇切圖。css
我這個需求就厲害了,用戶發的文章能夠選擇字體。這文章中能夠出現的字就太多了,顯然上個方案就不合適了,那咱們是這麼作的呢?html
廢話很少說,先上 demo,別問我 demo 是誰。前端
問題只有一個,那就是字體文件太大了(10MB)。先不說流量貴不,這麼大個文件垃圾網時,我文章都看完你字體還沒回來。git
固然是把字體文件縮小,那麼有兩種方案github
英文的話比較簡單,好比只提供 26 個字母。npm
可是中國漢字博大精深,太難了,那麼咱們能夠提供一些經常使用字。gulp
優勢:緩存
缺點:微信
這個方案就是把文章中的全部字提出來,而後生成一個字體文件使用。
其實這個方案經常使用於靜態頁面,跑個腳本分析生成一個字體文件。ide
優勢:
缺點:
固然,咱們最後選擇了這個動態生成字體文件方案,就了文件小,加載快。
好了上面把方案說了,下面就開始說怎麼搞了。
我使用的是 fontmin 庫來實現的功能。
npm install --save fontmin
var Fontmin = require('fontmin'); new Fontmin() .src('/static/font/font.ttf') // 載入字體 .use(rename(txtMD5+'.ttf')) // 修改輸出的文件名 .use(Fontmin.glyph({text: txt,hinting: false})) //子集化 text 參數就是輸出時要的字體 .use(Fontmin.ttf2eot()) // eot 轉換插件 .use(Fontmin.ttf2woff()) // woff 轉換插件 .use(Fontmin.ttf2svg()) // svg 轉換插件 .use(Fontmin.css()) // css 生成插件 .dest('/static/fontmin'); // 設置字體輸出路徑 .run(function (err, files) { if (err) throw err; console.log('success'); });
var rename = require('gulp-rename'); .use(rename(txtMD5+'.ttf')) // 修改輸出的文件名
.use(Fontmin.css( fontFamily: 'MD5' ))