防抖和节流
对搜索框和提交按钮防抖,用户频繁点击只会最后发送请求
对监听页面滚动进行节流
路由懒加载和图片懒加载
路由懒加载采用箭头函数和import引入组件
图片懒加载采用监听滚动距离,当滚动距离加可视化高度大于图片的offsetTop时再设置图片的src,可以用loading组件占位
减少回流与重绘
回流是dom元素尺寸或结构改变,重绘是元素的样式改变。
回流一定重绘。
即不要频繁操作dom
图片优化
小图片使用base64
使用雪碧图(多图合一)
webpack优化
利⽤CDN加速: 在构建过程中,将引⽤的静态资源路径修改为CDN上对应的路径。通过externals加载外部CDN资源
1.默认情况下,通过import语法导入的第三方依赖包,最终会被打包合并到同一个文件中,从而导致打包成功后,单文件体积过大的问题,为了解决上述问题,可以通过webpack的externals节点,来配置并加载外部的CDN资源。凡是声明在externals中的第三方依赖包都不会被打包。
Tree Shaking: 将代码中永远不会⾛到的⽚段删除
掉。可以通过在启动webpack时追加参数 --optimize-minimize 来实现
代码压缩:只需要将 mode 设置为 production 就可以默认开启,如果使用 Webpack 4 的话,开启生产环境就会自动启动这个优化功能。
代码分包:
对于一些不需要立即使用的组件,我们可以单独对它们进行拆分,拆分成一些小的代码块chunk.js; 这些chunk.js会在需要时从服务器加载下来,并且运行代码,显示对应的内容;
通过import函数导入文件打包出来的代码是分包的
如果我们的项目过大了,对于某些组件我们希望通过异步的方式来进行加载(目的是可以对其进行分包处理),那么Vue中给我们提供了一个函数:defineAsyncComponent。
异步导入组件
import { defineAsyncComponent } from 'vue';
const AsyncCategory = defineAsyncComponent(() => import("./AsyncCategory.vue"))
到时候这个组件会被打包到单独的包里,一般是把路由写成异步组件形式
loader优化
对于 Loader 来说,影响打包效率首当其冲必属 Babel 了。因为 Babel 会将代码转为字符串生成 AST,然后对 AST 继续进行转变最后再生成新的代码,项目越大,转换代码越多,效率就越低。当然了,这是可以优化的。
首先我们优化 Loader 的文件搜索范围
module.exports = {
module: {
rules: [
{
js 文件才使用 babel
test: /\.js$/,
loader: 'babel-loader',
只在 src 文件夹下查找
include: [resolve('src')],
不会去查找的路径
exclude: /node_modules/
}
]
}
}
对于 Babel 来说,希望只作用在 JS 代码上的,然后 node_modules 中使用的代码都是编译过的,所以完全没有必要再去处理一遍。
Happypack(plugin)-提高项目构建速度
受限于 Node 是单线程运行的,所以 Webpack 在打包的过程中也是单线程的,特别是在执行 Loader 的时候,长时间编译的任务很多,这样就会导致等待的情况。
HappyPack 可以将 Loader 的同步执行转换为并行的,这样就能充分利用系统资源来加快打包效率了
seo优化
SEO优化
●服务端渲染SSR
SSR也就是服务端渲染,也就是将Vue在客户端把标签渲染成HTML的工作放在服务端完成,然后再把htmI直接返回给客户端
代码优化
第三方模块按需导入
SPA页面采用keep-alive缓存组件
key保证唯一
如果需要使用v-for给每项元素绑定事件时使用事件代理