Vue项目优化方案

2023-03-30  本文已影响0人  一颗得道的仙丹

编码优化:

1.vue 在使用v-for 循环时可以使用事件代理方式监听用户操作,节约性能。
2.可以采用keep-alive缓存组件。
3.尽可能拆分组件,来提高复用性、增加代码的可维护性,减少不必要的渲染。因为组件粒度最细,改组件的数组,它只会渲染当前的组件。
4.v-if 当值为false时内部指令不会执行,具有阻断功能,很多情况下使用v-if替代v-show,合理使用if和show。
5.vue循环中key的取值建议使用数据id,相比index更能保证数据的唯一性,更好 的触发vue虚拟dom采用就地复用策略。
6.data中的所以数据都会被劫持,所以将数据尽可能扁平化,如果数据只是用来渲染可以使用Object.freeze,可以将数据冻结起来,这样就不会增加getter和setter。
7.合理使用路由懒加载、异步组件。
8.页面需要响应式的数据放在data中,其他非响应式数据不需要放在data中,data中的数据都会增加getter和setter,会收集对应的 watcher,这样就会降低性能。

资源加载性能优化

1.使用第三方插件实现按需加载( babel-plugin-component )
2.滚动到可视区域动态加载 ( https://tangbc.github.io/vue-virtual-scroll-list )
3.图片懒加载 (https://github.com/hilongjw/vue-lazyload.git)
4.路由懒加载引入组件页面
5.cdn加速引入资源
6.长列表优化

SEO优化

1.使用服务端渲染(SSR):Vue.js 2.0 提供了服务端渲染的功能,使得搜索引擎能够更好地索引和解析网站内容。在使用 SSR 时,可以在服务端生成 HTML,而不是在客户端生成,这样搜索引擎可以更好地理解页面内容。
2.使用预渲染(Prerendering):预渲染是一种在构建时生成静态 HTML 文件的技术。这样搜索引擎就可以直接访问这些静态文件,而不需要等待页面加载完成。使用 Prerendering 可以提高页面加载速度和用户体验。
3.添加 meta 标签:在网页头部添加 meta 标签,包括 title、description、keywords 等,可以让搜索引擎更好地理解网页内容和结构。可以使用 Vue.js 的插件 vue-meta 管理 meta 标签。
4.加载速度优化:优化网站的加载速度,包括压缩 CSS 和 JavaScript 文件、使用 CDN 加速、优化图片等,可以提高用户体验和搜索引擎排名。

打包优化

1.去除项目中所有的console.log()打印
    在项目开发中我们不可避免的要使用到特别多的console.log()进行查看,而打包进行清除时由于逻辑错综复杂,且页面较多,清除起来十分麻烦,此时就可以使用到下列方法,这里要提示一句console.log()占用部分内存且影响网站安全,应在不使用时及时进行清除。

//安装模块:npm i babel-plugin-transform-remove-console --save-dev
//配置模块(babel.config.js页面配置):
const proPlugins = [];
    //如果是开发环境,则添加 transform-remove-console 插件
    if (process.env.NODE_DEV == "production") {
      proPlugins.push("transform-remove-console");
    }
    module.exports = {
      presets: [
        '@vue/cli-plugin-babel/preset'
      ],
      "plugins": [
        [
          "component",
          {
            "libraryName": "element-ui",
            "styleLibraryName": "theme-chalk"
          }
        ],
        ...proPlugins
      ]
    }

2.图片压缩
    使用imagemin-webpack-plugin对项目中的静态大图实现无损压缩,只改变大小不改变质量

//安装模块
//cnpm install image-webpack-loader --save-dev
//注意是npm 安装此模块容易丢包下载不完整
//配置vue.config.js文件:
config.module
    .rule('images')
    .use('image-webpack-loader')
    .loader('image-webpack-loader')
    .options({
             mozjpeg: { //用于压缩 JPEG 图片的选项
                 progressive: true, //表示是否启用渐进式压缩
                 quality: 65 //表示压缩质量,值范围为 0-100
             },
             optipng: { //用于压缩 PNG 图片的选项
                 enabled: true //enabled 表示是否启用压缩
             },
             pngquant: { //用于压缩 PNG 图片的选项
                 quality: [0.65, 0.9], //quality 表示压缩质量,值范围为 0-1
                 speed: 4 //speed 表示压缩速度,值范围为 1-11
             },
             gifsicle: { //用于压缩 GIF 图片的选项
                 interlaced: false //表示是否启用隔行扫描
             },
             webp: { //用于压缩 WebP 图片的选项
                 quality: 75 //表示压缩质量,值范围为 0-100
             }
     })
    .end()

3.启用gzip压缩
    1.俩种压缩方式(服务端压缩、前端压缩)
    2.服务端压缩(服务端压缩:当浏览器发送请求时,服务器进行实时压缩,返回浏览器)

//服务端以node为例:
   //可以通过服务器端使用express做gzip压缩,其配置如下:
   //服务器端安装包 `npm i compression -D`
   //导入包 const compression=require("compression");
   //启用中间件 app.use(compression())
   //app.js
    const express=require("express")
    const compression=require("compression")
    const app=express()
    app.use(compression())              //启用压缩插件
    app.use(express.static('./dist'))   //压缩public目录下前段打包资源dist
    app.listen(80,()=>{
    console.log("正在运行3000")
    })
//服务端这一块我不太熟悉(有错误请各位前辈指导)

3.前端压缩
    使用webpack打包时,进行压缩,浏览器请求时,服务端进行一些配置,返回压缩文件

//使用步骤:
    //安装压缩模块:npm install --save-dev compression-webpack-plugin@2
    //配置vue.config.js文件:
        module.exports = {
            ...........................
            chainWebpack: config => {
                const CompressionWebpackPlugin = require('compression-webpack-plugin')
                if (process.env.NODE_ENV === 'production') {
                    // gzip压缩
                    config.plugin('CompressionPlugin').use(
                        new CompressionWebpackPlugin({
                            test: /\.(js|css|json|txt|html|ico|svg|png)(\?.*)?$/i,
                            threshold: 10240, // 超过10kb的文件就压缩
                            deleteOriginalAssets: true, // 不删除源文件 
                            minRatio: 0.8 //指定压缩比例达到多少才会进行压缩
                        })
                    )
                }
            }
        }

4.两者对比
第一种,因为是实时压缩,所以非常耗服务器性能
第二种,就是dist打的包会偏大
所以,两者综合起来会更好
思路:webpack打包时,当文件体积超过一定程度的时候,进行gzip压缩,生产同名的.gz文件,然后配置nginx,让浏览器请求的时候,如果有.gz文件,返回压缩文件,没有的话,进行实时的压缩

上一篇下一篇

猜你喜欢

热点阅读