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

前端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中的字识别成新的字体,不能动态的渲染其他页面中的字,因此后来又有了新的方案

三、终极方案: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,页面加载效率提升了很多,在移动端效果会更明显,而这应该是一个让开发者很满意的一个结果了。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/890682.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 8 的内存结构

Java8内存结构图 虚拟机内存与本地内存的区别 Java虚拟机在执行的时候会把管理的内存分配成不同的区域&#xff0c;这些区域被称为虚拟机内存&#xff0c;同时&#xff0c;对于虚拟机没有直接管理的物理内存&#xff0c;也有一定的利用&#xff0c;这些被利用却不在虚拟机内存…

每天3分钟,彻底弄懂神经网络的优化器(十)Nadam

1. Nadam算法的提出 Nadam&#xff08;Nesterov-accelerated Adaptive Moment Estimation&#xff09;算法是由Tim Salimans et al. 在2016年提出的。这一算法结合了Adam算法和Nesterov Accelerated Gradient&#xff08;NAG&#xff09;算法的优点&#xff0c;旨在提高优化算…

[运维]6.github 本地powershell登录及设置ssh连接

当我在本地的git hub 进行修改后&#xff0c;需要推送到远程github仓库。 当我运行了git add . git commit -m "ingress-controller image" 以后&#xff0c;运行git push origin main&#xff0c;发现由于网络原因无法连接到远程github仓库。 此时开始设置ssh连…

MySQL中表的约束

1&#xff0c;概念 表中一定要有各种约束&#xff0c;通过约束&#xff0c;让我们来插入数据库中的数据是符合预期的。 约束本质是通过技术手段&#xff0c;倒逼程序员插入正确的数据&#xff1b;反过来&#xff0c;站在MySQL的角度来单&#xff0c;内部已经插进来的数据&…

即插即用hilo注意力机制,捕获低频高频特征

题目&#xff1a;Fast Vision Transformers with HiLo Attention 论文地址: https://arxiv.org/abs/2205.13213 创新点 HiLo自注意力机制&#xff1a;作者提出了一种新的自注意力机制&#xff0c;称为HiLo注意力&#xff0c;旨在同时捕捉图像中的高频和低频信息。该方法通过…

通信工程学习:什么是SPI串行外设接口

SPI&#xff1a;串行外设接口 SPI&#xff0c;即串行外设接口&#xff08;Serial Peripheral Interface&#xff09;&#xff0c;是一种由Motorola公司首先在其MC68HCXX系列处理器上定义的同步串行接口技术。SPI接口主要用于微控制器&#xff08;MCU&#xff09;与外部设备之间…

1. 到底什么是架构

1. 什么是架构 定义&#xff1a;架构&#xff0c;又名软件架构&#xff0c;是有关软件整体结构与组件的抽象描述&#xff0c;用于指导大型软件系统各个方面的设计优秀架构的特点&#xff1a;优秀的性能、超强的TPS/QPS的承载能力、高可用决定了你能够支撑多少PV的流量 2. 什么…

【Linux修炼进程之权限篇】探讨Linux权限问题

【Linux修炼】——权限问题 目录 一&#xff1a;认识Linux下用户的分类 1.1&#xff1a;如何添加新用户【使用root用户创建添加】 1.2&#xff1a;su指令用法 二&#xff1a;Linux下权限是什么&#xff1f; 2.1&#xff1a;权限所认证的是身份(人身份角色) 2.2&#xff…

【WPF】04 Http消息处理类

这里引入微软官方提供的HttpClient类来实现我们的目的。 首先&#xff0c;介绍一下官方HttpClient类的内容。 HttpClient 类 定义 命名空间: System.Net.Http 程序集: System.Net.Http.dll Source: HttpClient.cs 提供一个类&#xff0c;用于从 URI 标识的资源发送 HTTP 请…

dbt doc 生成文档命令示例应用

DBT提供了强大的命令行工具&#xff0c;它使数据分析师和工程师能够更有效地转换仓库中的数据。dbt的一个关键特性是能够为数据模型生成文档&#xff0c;这就是dbt docs命令发挥作用的地方。本教程将指导您完成使用dbt生成和提供项目文档的过程。 dbt doc 命令 dbt docs命令有…

Gitxray:一款基于GitHub REST API的网络安全工具

关于Gitxray Gitxray是一款基于GitHub REST API的网络安全工具&#xff0c;支持利用公共 GitHub REST API 进行OSINT、信息安全取证和安全检测等任务。 Gitxray&#xff08;Git X-Ray 的缩写&#xff09;是一款多功能安全工具&#xff0c;专为 GitHub 存储库而设计。它可以用于…

STM32CUBEIDE的使用【三】RTC

于正点原子潘多拉开发板&#xff0c;使用stm32官方免费软件进行开发 CubeMx 配置 使用CubeMx 配置RTC 勾选RTC 设置日期和时间 配置LCD的引脚用来显示 STM32CUBEIDE 在usbd_cdc_if.c中重定向printf函数用于打印 #include <stdarg.h>void usb_printf(const char *f…

第十六章 RabbitMQ延迟消息之延迟插件优化

目录 一、引言 二、优化方案 三、核心代码实现 3.1. 生产者代码 3.2. 消息处理器 3.3. 自定义多延迟消息封装类 3.4. 订单实体类 3.5. 消费者代码 四、运行效果 一、引言 上一章节我们提到&#xff0c;直接使用延迟插件&#xff0c;创建一个延迟指定时间的消息&…

【C++算法】双指针

目录 一、快乐数&#xff1a; 二、有效三角形的个数&#xff1a; 三、盛最多水的容器&#xff1a; 四、复写0&#xff1a; 五、三数之和&#xff1a; 总结&#xff1a; 一、快乐数&#xff1a; 题目出处&#xff1a; 202. 快乐数 - 力扣&#xff08;LeetCode&#xff09…

ROS2 通信三大件之动作 -- Action

通信最后一个&#xff0c;也是不太容易理解的方式action&#xff0c;复杂且重要 1、创建action数据结构 创建工作空间和模块就不多说了 在模块 src/action_moudle/action/Counter.action 下创建文件 Counter.action int32 target # Goal: 目标 --- int32 current_value…

智能健康顾问:基于SpringBoot的系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Qt:图片文字转base64程序

目录 一.Base64 1.编码原理 2.应用场景 3.优点 4.限制 5.变种 二.文字与Base64互转 1.ui设计 2.文字转Base64 3.Base64转文字 三.图片与Base64互转 1.ui设计 2.选择图片与图片路径 3.图片转Base64 4.Base64转图片 四.清空设置 五.效果 六.代码 base64conver…

PDF编辑不求人!4款高效工具,内容修改从此变得简单又快捷

咱们现在生活在一个数字时代&#xff0c;PDF文件可不就是工作、学习还有日常生活中经常要用的东西嘛。但遇到那些需要改动的PDF文件&#xff0c;是不是就觉得有点头疼啊&#xff1f; 因为传统的PDF文件真的不好编辑&#xff0c;这确实挺烦人的。不过呢&#xff0c;我今天要给你…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第三十九章 Linux Misc驱动

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

SpringBoot下的智能健康推荐引擎

3系统分析 3.1可行性分析 通过对本基于智能推荐的卫生健康系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本基于智能推荐的卫生健康系统采用SSM框架&#…