我的编程空间,编程开发者的网络收藏夹
学习永远不晚

gulp-font-spider如何实现中文字体包压缩

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

gulp-font-spider如何实现中文字体包压缩

这篇文章主要讲解了“gulp-font-spider如何实现中文字体包压缩”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“gulp-font-spider如何实现中文字体包压缩”吧!

1.背景

在前端开发中,经常需要使用特定的字体包,但由于中文字体包特别大,严重影响网页的加载速度,所以需要对字体包进行压缩。

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 安装

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

2 使用范例

var gulp = require( 'gulp' );var fontSpider = require( 'gulp-font-spider' );gulp.task('fontspider', function() {    return gulp.class="lazy" data-src('./index.html')        .pipe(fontSpider());});gulp.task('defualt', ['fontspider']);

推荐的跨浏览器 @font-faceCSS 写法:

@font-face {  font-family: 'pinghei';  class="lazy" data-src: url('../font/pinghei.eot');  class="lazy" data-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 h3, .demo > .test {    font-family: 'pinghei';}

特别说明: @font-face中的 class="lazy" data-src定义的 .ttf 文件必须存在,其余的格式将由工具自动生成

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

3.3 使用场景限制

  • 仅支持固定的文本与样式,不支持 javascript 动态插入的元素与样式

  • .otf 字体需要转换成 .ttf 才能被压缩

  • 仅支持 utf-8 编码的 HTML 与 CSS 文件

  • CSS content 属性只支持普通文本,不支持属性、计数器等特性

4. 自动化流程主要步骤

4.1.提取项目中使用到的汉字

利用through3插件,将业务文件夹class="lazy" data-src内所有的汉字提取出来,并生成chars.txt文件暂存。

gulp.task('extract', () => {    return gulp.class="lazy" data-src('class="lazy" data-src*{.vue,.scss,.ts}', { dot: true }).pipe(concat('chars.txt'))        .pipe(through3.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中

gulp.task('insertCharactersToHtml', () => {    return gulp.class="lazy" data-src('fontminify/chars.txt').pipe(concat('fontMin.html'))        .pipe(through3.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';                                class="lazy" data-src: url('${fontName}.eot');                                class="lazy" data-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 利用字蛛执行压缩任务

gulp.task('fontspider', function () {    return gulp.class="lazy" data-src('./fontMinify/fontMin.html')        .pipe(fontSpider());});

5. 完整代码及目录

5.1 目录结构

gulp-font-spider如何实现中文字体包压缩

5.2 完整代码

实现提取文字,压缩字体包后,移动到静态资源文件夹public下并删除任务中生成的fontMInify文件

const gulp = require('gulp')const through3 = require("through3");const del = require('del');const concat = require('gulp-concat');const fontSpider = require('gulp-font-spider');let fontName = 'FZMWFont'gulp.task('genFontMinify', () => {    return gulp.class="lazy" data-src(`public/originalFont/${fontName}.ttf`).pipe(gulp.dest('fontMinify/'))});// 提取项目中的汉字gulp.task('extract', () => {    return gulp.class="lazy" data-src('class="lazy" data-src*{.vue,.scss,.ts}', { dot: true }).pipe(concat('chars.txt'))        .pipe(through3.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.class="lazy" data-src('fontminify/chars.txt').pipe(concat('fontMin.html'))        .pipe(through3.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';                                class="lazy" data-src: url('${fontName}.eot');                                class="lazy" data-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.class="lazy" data-src('./fontMinify/fontMin.html')        .pipe(fontSpider());});// 将生成后的字体文件移动到预定的静态资源目录gulp.task('mvMinifyFontToPublic', function () {    return gulp.class="lazy" data-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监听class="lazy" data-src文件夹的变动来实现这一流程的自动化

6.2 缺点

目前gulp-font-spider只能实现提取项目中出现的汉字,对于后端接口返回的动态汉字无法提取,只能预先列举可能使用的汉字来使用

感谢各位的阅读,以上就是“gulp-font-spider如何实现中文字体包压缩”的内容了,经过本文的学习后,相信大家对gulp-font-spider如何实现中文字体包压缩这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

gulp-font-spider如何实现中文字体包压缩

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

gulp-font-spider如何实现中文字体包压缩

这篇文章主要讲解了“gulp-font-spider如何实现中文字体包压缩”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“gulp-font-spider如何实现中文字体包压缩”吧!1.背景在
2023-07-05

gulp-font-spider实现中文字体包压缩实践

这篇文章主要为大家介绍了gulp-font-spider实现中文字体包压缩实践详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-19

Java如何实现文件压缩为zip和解压zip压缩包

本篇内容介绍了“Java如何实现文件压缩为zip和解压zip压缩包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!压缩成.zip代码如下:/*
2023-07-02

C#如何实现多文件打包压缩

C#如何实现多文件打包压缩,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。最近项目需要实现多文件打包的功能,尝试了一些方法,最后发现使用ICSharpCode.S
2023-06-22

java如何实现不解压直接读取压缩包中文件的

小编给大家分享一下java如何实现不解压直接读取压缩包中文件的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java的优点是什么1. 简单,只需理解基本的概念,就
2023-06-14

在java项目中使用ant包如何实现压缩和解压缩

在java项目中使用ant包如何实现压缩和解压缩?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java ant包中的org.apache.tools.zip实现
2023-05-31

如何使用PHP进行文件的压缩和解压缩?(PHP中实现文件压缩和解压缩的常用库有哪些?)

本文介绍了使用PHP进行文件压缩和解压缩的方法,包括常用库及其优缺点。Zlib:轻量级,语法简单,提供gzip和deflate算法。BZip2:压缩率更高但速度较慢,需要PHP扩展。7-Zip:第三方库,提供各种算法,压缩率最高但速度最慢。其他库:如Phar、Rar、Tar和Gzip。选择库应考虑压缩率、速度、易用性和文件格式支持。最佳实践包括选择合适库、权衡压缩率和速度、解压缩前使用压缩文件以及妥善处理压缩文件。
如何使用PHP进行文件的压缩和解压缩?(PHP中实现文件压缩和解压缩的常用库有哪些?)
2024-04-02

如何在JavaWeb项目中实现文件压缩下载功能

本篇文章为大家展示了如何在JavaWeb项目中实现文件压缩下载功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体代码如下所示://文件名称 String[] names={"one.jpg
2023-05-31

如何通过CSS的@font-face属性实现在网页中嵌入任意字体

本文小编为大家详细介绍“如何通过CSS的@font-face属性实现在网页中嵌入任意字体”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何通过CSS的@font-face属性实现在网页中嵌入任意字体”文章能帮助大家解决疑惑,下面跟着小编的
2023-06-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录