前端项目首屏加速 gzip打包 路由懒加载 cdn资源优化

Posted btxlc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端项目首屏加速 gzip打包 路由懒加载 cdn资源优化相关的知识,希望对你有一定的参考价值。

目前主流的Vue, React 等单页项目中 build 把所有开发遇到的代码打包在一起形成一个js和一个css, 服务器请求, 然后加载js, css 等依赖进行渲染.

因此会经常遇到,个人写的项目,打开十分缓慢,需要加载很长时间才能加载完毕. 就算不是白屏,做了loading处理 但还是会很影响体验

排除服务器带宽实在太低, 服务器压力实在太大, 文件的大小是速度的第一影响.

 

gzip打包

gzip打包很好理解. 请求的东西可以通过压缩的方式, 到了客户端再解压 采用nginx即可 配置方案

 

    gzip on;
    gzip_buffers 32 4k;
    gzip_comp_level 6;
    gzip_min_length 200;
    gzip_types text/css text/xml application/javascript;
    gzip_vary on;        

 

路由懒加载

 

 

在每个页面 引用别的页面的时候 通常会写成:

 

import componentA from ‘./componentA‘

 

把这句话改成

 

const componentA = () => import(‘./componentA‘)

 

即可.

 

使用cdn

 

大型项目利用cdn可以减少很多服务器负载.

build打包的时候会将该项目所有用到的依赖都放进来(例如vue.js,最后会被整合), 因此vector.js文件会特别大.

如果打包的时候告诉它, 这个依赖你不用打包进去, 然后通过html里面的link和script标签从外部加载进来, 就可以不用打包进去了

浏览器访问该项目的时候 会从cdn上面下载这些已经稳定的依赖, 然后再加载你更新写的代码.

根据浏览器的异步原理, 这些依赖是可以同步下载的, 比起下载同一个文件的时间会少得多.

 

使用CDN只需要3步

1.在html页面里面加上

<script src="https://cdn.bootcss.com/vue/2.5.9/vue.runtime.js"></script>

<link href="https://cdn.bootcss.com/element-ui/2.9.1/theme-chalk/index.css" rel="stylesheet">

 

2.在任何import了css的页面 删除import

// import ‘element-ui/lib/theme-chalk/index.css‘

 

3.在build/webpack.base.conf.js里面, 在json的最后加上

node: 
       ....
  ,
  externals: 
    vue: "Vue",  //不再编译任何 import Vue from ‘vue‘ 即build的时候默认把vue当成外部源
  

 

 

特别的,ui组件库如果不是整体引入的话, 使用cdn是没有效果的.

举例: 一个使用vue+element-ui开发的项目

如果element-ui采用的是全局引入, 即在main.js里面使用了

 

import ElementUI from ‘element-ui‘;
import ‘element-ui/lib/theme-chalk/index.css‘;

Vue.use(ElementUI);

 

那么使用cdn的方法,可以不用把css文件和js文件编译到dist里面, 记得在html里面加上link和script标签.

 

但是如果是用babel-plugin-component插件按需引入, 即在每一页上面

 

import  Button, Select, Option  from ‘element-ui‘

export default 
  name: ‘componentA‘,
  components: 
    elButton: Button,
    elSelect: Select,
    elOption: Option
  ,
.....

 

这样子的话, 代码会在每一页进行编译的时候, 放入最终打包的css和js里面.

 

比起这两种方式, 全局引入需要加载所有elementui组件库, 虽然采用了cdn的方式,代码从cdn上面获取,但是包还是很大

如果用按需引入的方式, 则是从个人的网站服务器上面请求,但是组件库的大小会小很多.

下面这张图可以表示出这两者的关系

 

技术图片

那么到底该不该用CDN

以上是关于前端项目首屏加速 gzip打包 路由懒加载 cdn资源优化的主要内容,如果未能解决你的问题,请参考以下文章

vue项目性能优化,优化项目加载慢的问题

vite3+vue3 项目打包优化实战之-视图分析(rollup-plugin-visualizer)CDN引入依赖分包gzip压缩history404问题

前端优化

webpack配置

前端Vue项目打包性能优化方案

Vue项目优化首屏加载速度