前端Vue3字体优化三部曲(webFont、font-spider、spa-font-spider-webpack-plugin)

server/2024/10/17 16:35:15/

webpackplugin_0">前端Vue字体优化三部曲(webFont、font-spider、spa-font-spider-webpack-plugin)

引言

最近前端引入了UI给的思源黑体字体文件,但是字体文件过于庞大,会降低页面首次加载的速度,目前我的项目中需要用到如下三个字体文件,加在一起24M左右

在这里插入图片描述

一、webFont

首先想到的是我们可以通过webFont技术对自己进行压缩,然后利用css@font-face方法对压缩后的字体文件进行引用操作,我相信这也是大多数开发者的项目用的最多的一个技术了吧?将字体文件压缩成woff2格式,基本相当于原字体文件ttf的0.3-0.5大小,目前已知的比较好用的网站如下:

字体文件压缩网站:https://transfonter.org/,可将ttf字体文件转换为base64格式,然后我们在index.html文件中引用该css文件即可
在这里插入图片描述
如上图,我们选择woff2文件类型,也是目前最常用压缩率最高的字体文件类型了

在这里插入图片描述

压缩完成,我们点击Download看看下载的文件都是什么:
在这里插入图片描述
解压文件我们发现得到的字体包是不是比原来小了一半,而且带有demo文件和转化好的css文件,不得不说这个网站真贴心
在这里插入图片描述
如下图展示,这是我们设计图目前用到的思源黑体的三种字体,有没有一种感觉,用webFont技术字体文件还是过于庞大(如下图:14M),当我们打开首页,尤其项目中首页文字较多时,还是会出现页面先加载默认字体,然后等字体文件下载完成时,又变为了设计的字体这个问题,这对于对用户体验有较高要求的项目来说,此问题无疑是很严重的。虽然目前我做的这个项目是PC端的系统,但为了以防万一,再加上对技术的一点点追求,决定还是要找一找更好的解决方案…
在这里插入图片描述

二、font-spider

由于此前对前端字体优化有一些经验,让我想到字蛛这个技术,既然领导把字体的任务交给我,就是对咱的信任,如果能把字体文件缩小这个事情有一个质变,那岂不是让人很有成就感的一件事情?
具体方案如下:

  1. 全局安装font-spider
npm install font-spider -g
  1. 将我们项目中所用到的字都总结到如下图的index.html中,或者test.html,名称不重要,不一定是我们的系统中默认的index.html文件
  2. 在项目根目录下创建一个 fonts 文件夹,并放入你的字体文件。

在 index.css 中定义 @font-face:

@font-face {font-family: 'Lato-Medium';src: url('./fonts/SourceHanSansCN-Regular.ttf');src: url('./fonts/SourceHanSansCN-Regular.woff') format('woff');
}
index.html
这里首先在<head>处要引入index.css文件<link rel="stylesheet" href="index.css">,然后在<body>处压缩我们想要的字体吧,这里只能压缩静态字体哦<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport"content="width=device-width, initial-scale=1.0,minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"><title>font spider</title><link rel="stylesheet" href="index.css">
</head><body><div><!-- 这里对应的是Regular的压缩包 --><div class="bold">abcdefghijklmnopqrstuvwxyz</div><!-- 这里对应的是Medium的压缩包 --><div class="medium">ABCDEFGHIJKLMNOPQRSTUVWXYZ</div><!-- 这写在class元素之外的就没有对应的压缩包了 -->123456</div>
</body></html>
  1. 输入font-spider [options] <url|localfile>运行工具。
font-spider ./path/to/your/test.html

这种办法,得到的字体文件肯定会被优化到极致,但是不足的是它只能将index.html中的字识别成新的字体,不能动态的渲染其他页面中的字,因此后来又有了新的方案

webpackplugin_81">三、终极方案:spa-font-spider-webpack-plugin

这是github上的一个webpack插件,
https://github.com/zhuzhengshou/spa-font-spider-webpack-plugin
直接在启动或打包的时候提取所需文字,不用单独再将页面的文字复制到index.html里。

npm i spa-font-spider-webpack-plugin
"spa-font-spider-webpack-plugin": "^1.1.1",

如下为vue-cli5.0版本的写法,其他版本请自己转换为该版本的webpack配置写法

const {defineConfig} = require('@vue/cli-service')
const SPAFontSpiderWebpackPlugin = require("spa-font-spider-webpack-plugin")
module.exports = defineConfig({lintOnSave: false,transpileDependencies: true,devServer: {...},configureWebpack: {...},chainWebpack: config => {config.plugin('spa-font-spider').use(SPAFontSpiderWebpackPlugin, [{fontFamilyPkgList: [{url: 'http://localhost:3002/font/SourceHanSansCN-Regular.ttf',name: 'Source Han Sans CN'},{url: 'http://localhost:3002/font/SourceHanSansCN-Medium.ttf',name: 'Source Han Sans CN-Medium'},{url: 'http://localhost:3002/font/SourceHanSansCN-Bold.ttf',name: 'Source Han Sans CN-Bold'}],preload: true,complete: true,silent: true}]).end()}
})

在这里插入图片描述
在这里插入图片描述
在这里我们可以清晰的看到,该插件已经将打包过的js文件一一识别出来,肯定做了文字识别处理
在这里插入图片描述

在控制台我们可以看到提取的文字,但是我觉得这里有个问题就是提取的并不止这100多个,这应该是插件的bug,因为我们在系统中所用到的字并不止这100多个,但都显示成功了,目前还没有做过多的研究为什么在控制台只报出了这100多个,它很有可能没有计算出*中的个数!
在这里插入图片描述

自此,整个字体文件被缩减到了200k,页面加载效率提升了很多,在移动端效果会更明显,而这应该是一个让开发者很满意的一个结果了。

此文原创,转载请注明出处


http://www.ppmy.cn/server/131305.html

相关文章

鸿蒙开发(NEXT/API 12)【密码自动填充】系统安全

功能简介 密码保险箱作为HarmonyOS系统原生安全功能&#xff0c;为用户提供了便捷的免密登录体验。 用户在应用或浏览器进行注册/登录操作时&#xff0c;可一键完成自动生成强密码、自动保存、自动填充&#xff0c;无需记住或手动输入繁琐的密码&#xff0c;由系统实现统一的…

工厂车间|基于springBoot的工厂车间系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书&#xff08;可指定任意题目&#xff09; 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完…

更改一列checkbox的顺序

不知道取啥标题了&#xff0c;记录之用&#xff0c;效果如图&#xff1a; 选取任意checkbox&#xff0c;点击向上或向下按钮,就可以改变顺序&#xff1a; 代码如下&#xff1a; vue2 <div class"vm-container"><el-checkbox-group v-model"selectedV…

docker详解介绍+基础操作 (四)容器镜像

一.镜像结构和原理 Docker 镜像是 Docker 技术的核心组成部分之一&#xff0c;它用于封装应用程序及其依赖项&#xff0c;以便在任何支持 Docker 的环境中运行。了解 Docker 镜像的结构和原理对于有效使用 Docker 至关重要。以下是对 Docker 镜像结构和原理的详细介绍。 Dock…

R语言生物群落(生态)数据统计分析与绘图

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂&#xff0c;涉及众多统计分析方法。以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线&#xff0c;通过多个来自经典…

grpc的python使用

RPC 什么是 RPC &#xff1f; RPC&#xff08;Remote Procedure Call&#xff09;远程过程调用&#xff0c;是一种计算机通信协议&#xff0c;允许一个程序&#xff08;客户端&#xff09;通过网络向另一个程序&#xff08;服务器&#xff09;请求服务&#xff0c;而无需了解…

LabVIEW提高开发效率技巧----点阵图(XY Graph)

在LabVIEW开发中&#xff0c;点阵图&#xff08;XY Graph&#xff09; 是一种强大的工具&#xff0c;尤其适用于需要实时展示大量数据的场景。通过使用点阵图&#xff0c;开发人员能够将实时数据可视化&#xff0c;帮助用户更直观地分析数据变化。 1. 点阵图的优势 点阵图&…