vue打包、网站运行速度优化

最近在做公司的官网,遇到的首要问题就是初次进入网站时,加载很慢,首页的视频和字体甚至需要30秒才能完全展示出来,用户体验可以说时很差了。接下来说几个优化的点。

一、减小图片的体积
如果项目中的图片过于多,并且体积大时,势必会加大打包的体积,影响网站的运行速率,推荐大家使用 TinyPNG,这是一个在线压缩图片的网站,5M以下的图片都能压缩,也不失真。

二、路由懒加载
利用以下写法进行懒加载

component: () => import('@/views/article')

三、打包不生成 .map文件
在vue.config.js文件中设置productionSourceMap为false
在这里插入图片描述
四、无用文件删除
在反复修改代码的过程中,如果项目中图片很多的话,可能会有很多无用的文件或图片存在。我们可以用插件 useless-files-webpack-plugin 来查找无用文件。
一般此类包不需要安装到项目中,减少node_modules体积(以项目实际情况决定-S/-D)

npm i useless-files-webpack-plugin -S

在vue.config.js中

const UselessFile = require('useless-files-webpack-plugin') //无用文件检查
module.exports = {publicPath:"./",productionSourceMap: false, // 生产环境是否生成 sourceMap 文件,一般情况不建议打开chainWebpack: (config) => {config.resolve.alias// .set('路径别名', resolve('vue.config文件的相对路径')).set('@$', resolve('src'))// 无用文件检查(添加下面这一段)config.plugin('uselessFile').use(new UselessFile({root: path.resolve(__dirname, './src'), // 项目目录out: './fileList.json', // 输出文件列表clean: false, // 是否删除文件,(为true的话会自动删除文件)exclude: /node_modules/ // 排除文件列表}))},
}

在这里插入图片描述
新生成这个文件,里面包含了所有未被使用的文件。

五、字体包压缩
展示类的网站往往会使用特定的字体,一般大家都会上网寻找字体包,目前我做的网站一共是用到了5个字体包,每个基本 都超过了10M,字体包在初次进入网站时就会进行加载,外加在首页还有视频的情况下,极大地拖慢了网站的加载速度。实际上我们是不需要字体包中的所有字的。所以需要提取我们项目中的所有用到的字。
Vue项目在vue.config.js同级目录新建一个word.js文件。这个文件是在网上找的,引用的哪位大佬的忘记了。

// 项目启动就会提取项目中的所有文字
const fs = require('fs');
const path = require('path');
let filesList = [];//vue 文件路径列表
let jsFilesList = [];//ts 文件路径列表
function readFileList(dir, filesList = []) {  const files = fs.readdirSync(dir); files.forEach((item) => { var fullPath = path.join(dir, item);    const stat = fs.statSync(fullPath); if (stat.isDirectory()) {         readFileList(path.join(dir, item), filesList); //递归读取文件    } else if(fullPath.endsWith('.vue')) {              filesList.push(fullPath);              }else if (/(.ts|.js)$/g.test(fullPath)){jsFilesList.push(fullPath)}});  return filesList;}readFileList(path.resolve(__dirname, 'src'),filesList);fs.stat(path.resolve(__dirname, 'src/local'),function(err,statObj){// 判断local文件是否存在,如果不存在则创建,如果创建则直接处理json文件if(!statObj){fs.mkdir(path.resolve(__dirname, 'src/local'),function(err){writeFile(filesList,'index');writeFile(jsFilesList,'jsIndex');})}else{writeFile(filesList,'index');writeFile(jsFilesList,'jsIndex');}})function writeFile (fileArr,fileName){const reg_1 = /(?<!\/\/\s*.*|<!--\s.*)([\u2E80-\u9FFF]*\$?{{0,2}\w*\.*\w*}{0,2}[\u2E80-\u9FFF]+)*/gconst obj = fileArr.reduce((pre,cur)=>{let  fileSuffix = cur.match(/(.ts|.js|.vue)$/g)?.[0];let pathName = path.basename(cur,fileSuffix)// 如果文件名是index,取父级文件名if(pathName === 'index'){const pathArr =  cur.split(path.sep);pathName = pathArr[pathArr.length-2];}pre[pathName] = {};let pkg = fs.readFileSync(cur,'utf-8');const strArr = pkg.match(reg_1); if(strArr?.length){strArr.forEach((item,index)=>{if(item.includes('{')){let index = 0item = item.replace(/\$?{{0,2}\w*\.*\w*}{0,2}/g,function(val){if(val){index ++ return `{${index-1}}`}else{return ''}})}// 如果匹配的字符串的字数大于10,处理key 值if(item.length){let str = item.length >=10? `${item.substring(0,7)}...`:item;pre[pathName][str] = item;}})}return pre},{})// 创建json文件fs.writeFile(path.resolve(__dirname, `src/local/${fileName}.json`),JSON.stringify(obj), 'utf8',function(err){// console.log(err)})}

项目运行以后就会生成一个local文件夹,里面分别是index.json和jsIndex.json,提取了.vue文件和.js文件中的所有文字。然后 就可以根据这些字进行字体包压缩了。(不过建议自己提取的时候 标点符号和 ‘撞‘ 这个字再写一下’),我项目中有撞这个字但没提取到。

压缩字体包推荐使用font-spider(字蛛),需要提前有node环境。

npm install font-spider -g


输入font-spider -V 出现版本就说明安装好了。在电脑新建一个文件夹,把需要压缩的ttf字体包放进去。新建index.html,

<!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"><title>Document</title><!--link rel="stylesheet" href="./index.css"--><!-- style部分可以提取出来放在css文件中,使用link引入,也可以直接写在html文件内 --><style>@font-face {font-family: 'PingFang-Medium';src: url('./PingFang-Medium.ttf')  format('truetype');font-weight: normal;font-style: normal;}.myFont{font-family: 'PingFang-Medium';}</style>
</head>
<body>//  这里写需要压缩的字,可以把项目中用到的字都放到这里来<h1 class="myFont">字体包压缩测试</h1>
</body>

ttf文件与index.html文件, css文件看个人要不要。样式我是直接写在index.html里面了。
在这里插入图片描述
之后在控制台执行

font-spider index.html

注意两种情况,一是报错<web font not found>,这说明你命令执行的路径不对,font-spider index.html主要在index.html同级下执行。第二个是我纠结很久的问题,在一开始我压缩的时候,压缩包的体积和原字体包的体积一直是一样的,不改变。如果出现这种情况就说明你找的ttf文件本来就不能压缩,我是压缩苹方字体,最后是在github才找到了能压缩的字体包。
在这里插入图片描述
成功的话则如上图所示,字体包极大地压缩了。最后说一下如果你实在找不到能压缩的字体包,并且你用的字体很少的情况下,你可以把不能压缩的字体包用FontCreator软件打开进行文字的提取,这个具体操作可以在网上搜一下这个软件怎么用的。这里就不赘述了,也比较麻烦。
以上内容有用的话麻烦大家点个赞喔,转载麻烦标明出处。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML5基础语法与标签

一、 HTML5介绍 HTML5是什么&#xff1f; HTML5是超文本标记语言&#xff08;HTML&#xff09;的第五个主要版本&#xff0c;用于描述网页结构和呈现内容。它是到目前为止最新且最强大的HTML版本。 HTML5语法约定 1.标签是HTML语法中的基本单位&#xff0c;由尖括号 ​<>…

【CSS加载动画特效】28种纯CSS实现的加载loading动态特效(附源码)

文章目录 写在前面涉及知识点效果展示1、Loading节点的创建2、部分效果的实现源码1&#xff09;三点加载动画Html代码CSS样式代码 2&#xff09;圆点矩阵加载特效Html代码CSS样式代码 3&#xff09;圆形轨迹加载动画Html代码Css样式代码 4&#xff09;栅栏式加载动画Html代码Cs…

Linux--查看常驻进程:ps

进程分为瞬时进程和常驻进程 瞬时进程&#xff1a;瞬间完成从加载到内存、显示在输出设备、退出过程 int main() {printf("hello world!\n");return 0; } 常驻进程&#xff1a;一直在内存中 int main() {while (1){printf("hello world!\n");sleep(1);…

itheima苍穹外卖项目学习笔记--Day1:项目介绍与开发环境搭建

苍穹外卖 Day1:a. 项目概述b. 开发环境搭建(1). 前端环境搭建(2). 后端环境搭建(3). 前后端联调 c. 完善登录功能d. Swagger Day1: a. 项目概述 b. 开发环境搭建 (1). 前端环境搭建 前端工程基于 nginx 运行启动nginx&#xff1a;双击 nginx.exe 即可启动 nginx 服务&#x…

亚马逊云科技推出的一项完全托管的生成式AI服务——Amazon Bedrock

在全球生成式AI浪潮兴起之际&#xff0c;以“智联世界&#xff0c;生成未来”为主题的2023世界人工智能大会&#xff08;WAIC 2023&#xff09;于7月6日在上海世博中心拉开帷幕。大会首日&#xff0c;亚马逊云科技携生成式AI产品Amazon Bedrock亮相大会现场&#xff0c;亚马逊云…

蓝桥杯每日一练专栏导读2

之前一直更新的是C、C相关的题目&#xff0c;但作为一名前端工程师&#xff0c;还是对Js了解的更多一些&#xff0c;所以从此以后停止更新C/C相关内容&#xff0c;改为更新Js相关的练习题。 内容 更新的内容依旧是蓝桥杯大赛官网提供的习题。每一道题都会提供详细的解题思路&a…

前端VUE

基础语法 安装VUE 入门Demo 定义的Vue只有id是app的才能使用他的变量值name&#xff0c;age&#xff0c;gender。 - 方法非id是app的也不可以调用。 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><!…

0305kali linux配置运行-docker-macos aarm64

文章目录 1 下载运行2 配置2.1 配置系统环境2.2 配置SSH服务2.3 安装工具 3 问题总结结语 1 下载运行 拉取kali linux镜像 docker pull kalilinux/kali-rolling该镜像为“纯净版”系统&#xff0c;没有任何工具&#xff0c;体积小。下面当我们运行起来之后&#xff0c;到容器中…

华为云CodeArts DevSecOps系列插件——助力更高效的软件研发

HDC期间入驻华为云&#xff0c;可参与Toolkit插件抽奖活动&#xff0c;活动链接在文末 一、前言 DevOps的概念想必大家都不陌生&#xff0c;它是一组过程、方法与系统的统称&#xff0c;通过它可以对交付速率、协作效率、部署频率速率、质量、安全和可靠性等进行提升改善。相比…

【算法与数据结构】150、LeetCode逆波兰表达式求值

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;我们常看见的表达式是中缀表达式&#xff08;关于中缀表达式的定义可以参考前缀、中缀、后缀表达式&am…

强化学习快速复习笔记--待更新

目录 蒙特卡洛方法动态规划算法策略迭代 时序差分方法Sarsa算法Q-learning算法如何区分在线学习和离线学习DQN深度强化Q学习概念介绍代码解析 DQN改进算法Double DQN网络 蒙特卡洛方法 求解价值函数和状态价值函数&#xff0c;可以使用蒙特卡洛方法和动态规划。首先介绍一下蒙…

从零开始的前后端分离项目学习(前后端从零环境搭建)

一、 前后端分离介绍&#xff1a; 前端独立编写客户端代码&#xff08;用户交互数据展示&#xff09;&#xff0c;后端独立编写服务端代码&#xff08;提供数据处理接口&#xff09;&#xff0c;并提供数据接口就行。 前端通过Ajax访问后端数据借口&#xff0c;将model展示到…