返回顶部
首页 > 资讯 > 精选 >gulp-font-spider如何实现中文字体包压缩
  • 863
分享到

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

2023-07-05 12:07:08 863人浏览 泡泡鱼
摘要

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

这篇文章主要讲解了“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

  • 简单可靠:完全基于 htmlCSS 分析进行本地处理,无需 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.src('./index.html')        .pipe(fontSpider());});gulp.task('defualt', ['fontspider']);

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

@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 h3, .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.提取项目中使用到的汉字

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

gulp.task('extract', () => {    return gulp.src('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.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';                                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 利用字蛛执行压缩任务

gulp.task('fontspider', function () {    return gulp.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.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(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.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';                                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只能实现提取项目中出现的汉字,对于后端接口返回的动态汉字无法提取,只能预先列举可能使用的汉字来使用

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

--结束END--

本文标题: gulp-font-spider如何实现中文字体包压缩

本文链接: https://lsjlt.com/news/351848.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • gulp-font-spider如何实现中文字体包压缩
    这篇文章主要讲解了“gulp-font-spider如何实现中文字体包压缩”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“gulp-font-spider如何实现中文字体包压缩”吧!1.背景在...
    99+
    2023-07-05
  • gulp-font-spider实现中文字体包压缩实践
    目录1.背景2.方法3.gulp-font-spider 安装及使用3.1 特性3.2 安装3.3 使用场景限制4. 自动化流程主要步骤4.1.提取项目中使用到的汉字4.2 生成字蛛...
    99+
    2023-03-19
    gulp font spider中文字体包压缩 gulp-font-spider包压缩
  • Java如何实现文件压缩为zip和解压zip压缩包
    本篇内容介绍了“Java如何实现文件压缩为zip和解压zip压缩包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!压缩成.zip代码如下:pu...
    99+
    2023-07-02
  • C#如何实现多文件打包压缩
    C#如何实现多文件打包压缩,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。最近项目需要实现多文件打包的功能,尝试了一些方法,最后发现使用ICSharpCode.S...
    99+
    2023-06-22
  • Android如何实现压缩和解压缩文件
    废话不多说了,直接给大家贴java代码了,具体代码如下所示: Java代码 package com.maidong.utils; import java.io.Buffe...
    99+
    2022-06-06
    压缩 解压 Android
  • JS中如何使用gulp实现压缩文件及浏览器热加载功能
    小编给大家分享一下JS中如何使用gulp实现压缩文件及浏览器热加载功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!gulp类似...
    99+
    2024-04-02
  • java如何实现不解压直接读取压缩包中文件的
    小编给大家分享一下java如何实现不解压直接读取压缩包中文件的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java的优点是什么1. 简单,只需理解基本的概念,就...
    99+
    2023-06-14
  • 在java项目中使用ant包如何实现压缩和解压缩
    在java项目中使用ant包如何实现压缩和解压缩?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java ant包中的org.apache.tools.zip实现...
    99+
    2023-05-31
    java ant ava
  • CSS3中如何使用@Font-Face实现定制字体
    这篇文章给大家分享的是有关CSS3中如何使用@Font-Face实现定制字体的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用 @Font-Face 实现定制字体  Web 设计...
    99+
    2024-04-02
  • java如何实现字符串压缩
    使用双指针进行字符串压缩实例:public static void zipStr(String str) { char[] c = str.toCharArray(); int index = 0; int num = 1; ...
    99+
    2017-06-10
    java入门 java 字符串
  • webpack如何实现拆分、打包、压缩
    这篇文章主要介绍webpack如何实现拆分、打包、压缩,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!步骤1.传统项目中的问题在不依赖任何自动化、模块化工具的项目中,通常我们的代码是这...
    99+
    2024-04-02
  • 如何用C#实现压缩文件
    目录一、单文件压缩二、多文件压缩三、多文件异步压缩四、压缩文件夹一、单文件压缩 场景,文件可能比较大,需要压缩传输,比如上传和下载 /// <summary> ///...
    99+
    2024-04-02
  • 计算机中如何把两个文件压缩成一个压缩包
    这篇文章给大家分享的是有关计算机中如何把两个文件压缩成一个压缩包的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法:1、整理好要压缩的文件,把两个文件放在同一个目录下;2、选中要压缩的两个文件,鼠标右击,在打开的...
    99+
    2023-06-14
  • vue-cli3中如何打包成zip压缩文件
    目录vue-cli3打包成zip压缩文件如何实现?思考vue-cli3打包优化vue-cli3打包成zip压缩文件 目前在我司,采用前后分离的方式开发,这就会面临一个问题。那就是部署...
    99+
    2022-11-13
    vue-cli3打包 zip压缩文件 vue-cli3打包成zip
  • 如何在Java中利用zip实现压缩和解压缩
    这篇文章主要介绍了如何在Java中利用zip实现压缩和解压缩,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和...
    99+
    2023-06-06
  • java不解压直接读取压缩包中文件的实现方法
    前言 最近写了个上传压缩包,将压缩包中的图片保存的接口,所以翻了翻网上文件流操作的博客,总结了一个不用解压,直接读取文件的方法 上代码 @RequestMapping(valu...
    99+
    2024-04-02
  • 里有Java如何实现压缩与解压zip文件
    里有Java如何实现压缩与解压zip文件?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java解压缩zip - 多个文件(包括文件夹),对多个文件和文件夹进行压...
    99+
    2023-05-31
    java ava zip
  • 如何用CSS font-family为英文和中文字体分别设置不同的字体
    这篇文章主要讲解了“如何用CSS font-family为英文和中文字体分别设置不同的字体”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用CSS fon...
    99+
    2024-04-02
  • Python底层技术揭秘:如何实现文件压缩与解压缩
    Python底层技术揭秘:如何实现文件压缩与解压缩文件压缩与解压缩是我们在日常开发中经常需要处理的任务之一。Python作为一种强大的编程语言,提供了丰富的库和模块来处理文件操作,其中包括文件压缩与解压缩的功能。本文将揭秘Python底层技...
    99+
    2023-11-09
    Python 解压缩 文件压缩 底层技术
  • Java 如何实现解压缩文件和文件夹
    目录一 前言 二 压缩文件 2.1 压缩多个文件 2.2 压缩文件或文件树 2.3 借助文件访问器压缩 三 解压文件 四 总结 一 前言 项目开发中,总会遇到解压缩文件的时候。比如...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作