玩家必看科普!麻豆人人妻人人妻人人片AV,欧美老妇交乱视频在线观看,久久综合九色综合久99_知乎
<ruby id="fgcka"></ruby>
  • <progress id="fgcka"></progress>
    <tbody id="fgcka"></tbody>
    <dd id="fgcka"></dd>

    1. <dd id="fgcka"></dd>

      <em id="fgcka"></em>
        1. 系統城裝機大師 - 固鎮縣祥瑞電腦科技銷售部宣傳站!

          當前位置:首頁 > 網絡編程 > JavaScript > 詳細頁面

          gulp-font-spider實現中文字體包壓縮實踐

          時間:2023-03-18來源:系統城裝機大師作者:佚名

          在前端開發中,經常需要使用特定的字體包,但由于中文字體包特別大,嚴重影響網頁的加載速度,所以需要對字體包進行壓縮。

          2.方法

          提取項目中使用到的漢字,并利用gulp-font-spider來實現ttf格式字體包的壓縮,并生成eot,svg,woff等其他格式的字體包,其中使用gulp來實現這一流程的自動化。

          3.gulp-font-spider 安裝及使用

          字蛛是一個中文 WebFont 自動化壓縮工具,它能自動分析頁面使用的 WebFont 并進行按需壓縮,無需手工配置。

          3.1 特性

          • 按需壓縮:從原字體中剔除沒有用到的字符,可以將數 MB 大小的中文字體壓縮成幾十 KB
          • 簡單可靠:完全基于 HTML 與 CSS 分析進行本地處理,無需 js 與服務端輔助
          • 自動轉碼:將字體轉碼成所有瀏覽器支持的格式,包括老舊的 IE6 與現代瀏覽器
          • 圖標字體:除了常規的字體支持外,還支持圖標字體(字蛛 v1.0.0 新特性)

          3.2 安裝

          1 npm install gulp-font-spider --save-dev

          3.2 使用范例

          1
          2
          3
          4
          5
          6
          7
          var gulp = require( 'gulp' );
          var fontSpider = require( 'gulp-font-spider' );
          gulp.task('fontspider', function() {
              return gulp.src('./index.html')
                  .pipe(fontSpider());
          });
          gulp.task('defualt', ['fontspider']);

          推薦的跨瀏覽器 @font-faceCSS 寫法:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          /* html中 聲明 WebFont*/
          @font-face {
            font-family: 'pinghei';
            src: url('../font/pinghei.eot');
            src:
              url('../font/pinghei.eot?#font-spider') format('embedded-opentype'),
              url('../font/pinghei.woff') format('woff'),
              url('../font/pinghei.ttf') format('truetype'),
              url('../font/pinghei.svg') format('svg');
            font-weight: normal;
            font-style: normal;
          }
          /*使用選擇器指定字體*/
          .home h2, .demo > .test {
              font-family: 'pinghei';
          }

          特別說明: @font-face中的 src定義的 .ttf 文件必須存在,其余的格式將由工具自動生成

          font-spider [options] <htmlFile1 htmlFile2 ...>

          3.3 使用場景限制

          • 僅支持固定的文本與樣式,不支持 javascript 動態插入的元素與樣式
          • .otf 字體需要轉換成 .ttf 才能被壓縮
          • 僅支持 utf-8 編碼的 HTML 與 CSS 文件
          • CSS content 屬性只支持普通文本,不支持屬性、計數器等特性

          4. 自動化流程主要步驟

          4.1.提取項目中使用到的漢字

          利用through2插件,將業務文件夾src內所有的漢字提取出來,并生成chars.txt文件暫存。

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          gulp.task('extract', () => {
              return gulp.src('src/**/*{.vue,.scss,.ts}', { dot: true }).pipe(concat('chars.txt'))
                  .pipe(through2.obj(function (file, enc, callback) {
                      const { contents } = file;
                      let text = contents.toString();
                      var result = text.match(/[\u4e00-\u9fa5]/ig)?.join('');
                      if (result){
                          file.contents = Buffer.from(result)
                          this.push(file);
                      }
                      callback();
                  })).pipe(gulp.dest('fontMinify/'))
          });

          4.2 生成字蛛所需的html入口文件

          讀取上一步生成的chars.txt中的漢字,組裝html文件,寫入字體文件引入樣式,并將提取出的漢字插入html中

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          gulp.task('insertCharactersToHtml', () => {
              return gulp.src('fontminify/chars.txt').pipe(concat('fontMin.html'))
                  .pipe(through2.obj(function (file, enc, callback) {
                      const { contents } = file;
                      let text = contents.toString();
                      if (text){
                          file.contents = Buffer.from(`<!DOCTYPE html>
                              <html lang="en">
                              <head>
                                  <meta charset="UTF-8">
                                  <style>
                                      @font-face {
                                          font-family: 'fz';
                                          src: url('${fontName}.eot');
                                          src: url('${fontName}.eot?#font-spider') format('embedded-opentype'),
                                              url('${fontName}.woff') format('woff'),
                                              url('${fontName}.ttf') format('truetype'),
                                              url('${fontName}.svg') format('svg');
                                          font-weight: normal;
                                          font-style: normal;
                                      }
                                      /*使用選擇器指定字體*/
                                      #app {
                                          font-family: 'fz';
                                      }
                                  </style>
                              </head>
                              <body>
                                  <div id="app">
                                  ${text}
                                  </div>
                              </body>
                              </html>`);
                          this.push(file);
                      }
                      callback();
                  })).pipe(gulp.dest('fontMinify'))
          });

          4.3 利用字蛛執行壓縮任務

          1
          2
          3
          4
          gulp.task('fontspider', function () {
              return gulp.src('./fontMinify/fontMin.html')
                  .pipe(fontSpider());
          });

          5. 完整代碼及目錄

          5.1 目錄結構

          5.2 完整代碼

          實現提取文字,壓縮字體包后,移動到靜態資源文件夾public下并刪除任務中生成的fontMInify文件

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          39
          40
          41
          42
          43
          44
          45
          46
          47
          48
          49
          50
          51
          52
          53
          54
          55
          56
          57
          58
          59
          60
          61
          62
          63
          64
          65
          66
          67
          68
          69
          70
          71
          72
          73
          74
          75
          76
          const gulp = require('gulp')
          const through2 = require("through2");
          const del = require('del');
          const concat = require('gulp-concat');
          const fontSpider = require('gulp-font-spider');
          let fontName = 'FZMWFont'
          gulp.task('genFontMinify', () => {
              return gulp.src(`public/originalFont/${fontName}.ttf`).pipe(gulp.dest('fontMinify/'))
          });
          // 提取項目中的漢字
          gulp.task('extract', () => {
              return gulp.src('src/**/*{.vue,.scss,.ts}', { dot: true }).pipe(concat('chars.txt'))
                  .pipe(through2.obj(function (file, enc, callback) {
                      const { contents } = file;
                      let text = contents.toString();
                      var result = text.match(/[\u4e00-\u9fa5]/ig)?.join('');
                      if (result){
                          file.contents = Buffer.from(result)
                          this.push(file);
                      }
                      callback();
                  })).pipe(gulp.dest('fontMinify/'))
          });
          // 將提取出的漢字插入模版html中
          gulp.task('insertCharactersToHtml', () => {
              return gulp.src('fontminify/chars.txt').pipe(concat('fontMin.html'))
                  .pipe(through2.obj(function (file, enc, callback) {
                      const { contents } = file;
                      let text = contents.toString();
                      if (text){
                          file.contents = Buffer.from(`<!DOCTYPE html>
                              <html lang="en">
                              <head>
                                  <meta charset="UTF-8">
                                  <style>
                                      @font-face {
                                          font-family: 'fz';
                                          src: url('${fontName}.eot');
                                          src: url('${fontName}.eot?#font-spider') format('embedded-opentype'),
                                              url('${fontName}.woff') format('woff'),
                                              url('${fontName}.ttf') format('truetype'),
                                              url('${fontName}.svg') format('svg');
                                          font-weight: normal;
                                          font-style: normal;
                                      }
                                      #app {
                                          font-family: 'fz';
                                      }
                                  </style>
                              </head>
                              <body>
                                  <div id="app">
                                  ${text}
                                  </div>
                              </body>
                              </html>`);
                          this.push(file);
                      }
                      callback();
                  })).pipe(gulp.dest('fontMinify'))
          });
          // 字體文件壓縮
          gulp.task('fontspider', function () {
              return gulp.src('./fontMinify/fontMin.html')
                  .pipe(fontSpider());
          });
          // 將生成后的字體文件移動到預定的靜態資源目錄
          gulp.task('mvMinifyFontToPublic', function () {
              return gulp.src(`./fontMinify/${fontName}.*`)
                  .pipe(gulp.dest('public/fonts'));
          });
          // 刪除字體壓縮文件產生的中間文件
          gulp.task('rmFontMinify', function () {
              return del('fontMinify')
          });
          gulp.task('default', gulp.series('genFontMinify','extract', 'insertCharactersToHtml', 'fontspider', 'mvMinifyFontToPublic','rmFontMinify'))

          6.優缺點

          6.1 優點

          如上介紹,可以實現字體文件的壓縮并生成多種格式字體包,本文使用的字體包從5M壓縮到了200K,體積大大減小,并且可以通過gulp.watch監聽src文件夾的變動來實現這一流程的自動化

          6.2 缺點

          目前gulp-font-spider只能實現提取項目中出現的漢字,對于后端接口返回的動態漢字無法提取,只能預先列舉可能使用的漢字來使用

          分享到:

          相關信息

          系統教程欄目

          欄目熱門教程

          人氣教程排行

          站長推薦

          熱門系統下載

          玩家必看科普!麻豆人人妻人人妻人人片AV,欧美老妇交乱视频在线观看,久久综合九色综合久99_知乎 人人玩人人添人人澡超碰偷拍 青春娱乐视频精品分类官网2 最好最新高清中文字幕 91国自产拍最新2018 欧美精品一区二区三区不卡网 深夜你懂得我的意思2021 宿舍NP乖把腿张开H 网恋奔现一天被要几次 为什么我越叫他越快 学渣各种各样的PLAY 英语课代表下面好软小说 亚洲国产综合在线区尤物 FREE性丰满HD性欧美 我年轻漂亮的继坶BD 最近中文字幕完整免费视频 啦啦啦免费视频卡一卡二 青柠视频在线观看大全 在线天堂WWW在线资源 亚洲国产日本韩国欧美MV 天天学习|久久久久久久精品国产亚洲87 国产K频道分享系统进入口 三个嘴都吃满了还塞满了 JAPONENSIS老师学生JAVAHBB 亚洲精品1卡2卡3卡4卡 樱花草在线社区WWW韩国 好涨水快流出来了快吃动视频 久久AV无码精品人妻出轨