方法 | 描述 |
---|---|
合并文件 | 将多个文件合并为一个文件,减少HTTP请求次数。 |
压缩文件 | 将文件进行压缩,减小文件大小,减少HTTP请求时间。 |
使用CDN | 使用CDN加速服务,减少服务器的请求压力,提高页面加载速度。 |
按需加载 | 将页面分为多个模块,按需加载,减少不必要的请求和页面加载时间。 |
懒加载 | 对于图片等资源,采用懒加载的方式,当用户需要查看时再加载,减少页面加载时间。 |
预加载 | 对于一些重要资源,采用预加载的方式,提前加载,提高用户体验。 |
使用WebP格式 | WebP格式的图片比JPEG和PNG格式的图片更小,加载速度更快,可以减少HTTP请求时间。 |
使用字体图标 | 使用字体图标代替图片,减少HTTP请求次数和文件大小。 |
使用缓存 | 合理使用浏览器缓存和服务器缓存,减少HTTP请求次数和请求时间。 |
代码分割可以将代码按照不同的逻辑或业务分割成不同的模块,从而实现按需加载,减少页面加载时间。在Vue中,可以使用以下方式进行代码分割:
使用Vue异步组件:将组件定义为函数返回一个Promise对象,在需要的时候再加载组件。
使用Webpack的代码分割功能:在Webpack配置文件中配置optimization.splitChunks进行代码分割。
代码分割实例:
在项目中,有一个比较大的组件需要加载,但是这个组件并不是每个页面都需要用到。在使用Vue异步组件进行代码分割之前,每次进入页面都需要加载这个组件,导致页面加载时间过长。使用Vue异步组件进行代码分割后,只有在需要用到这个组件的时候才会进行加载,从而减少了页面加载时间。
在项目中,有多个页面都需要使用到一个公共的模块,但是这个模块比较大,每个页面都将这个模块打包进去会导致打包后的文件过大。使用Webpack的代码分割功能进行代码分割后,公共的模块只会被打包一次,从而减小了打包后文件的大小。
懒加载是将某些组件或资源推迟到实际需要的时候再加载,可以有效减少首屏加载时的资源压力。
可以使用 方法实现懒加载,也可以使用第三方库如 。
示例代码:
表格:
优化手段 | 示例 |
---|---|
使用Webpack的UglifyJsPlugin插件进行代码压缩 | optimization: {minimize: true} |
使用Tree shaking技术去除未引用的代码 | optimization: {usedExports: true} |
将常量提取出来,避免重复定义 | new webpack.DefinePlugin({ ‘process.env.NODE_ENV’: JSON.stringify(‘production’) }) |
使用CDN引入第三方库 | |
使用Gzip进行压缩 | server { gzip on; } |
使用Web Workers进行代码分离 | const worker = new Worker(‘worker.js’) |
使用异步加载组件 | const Foo = () => import(‘https://blog.csdn.net/it_varlue/article/details/Foo.vue’) |
使用路由懒加载 | const Home = () => import(‘https://blog.csdn.net/it_varlue/article/details/Home.vue’) |
示例:
原图大小 | 压缩后大小 | 压缩率 |
---|---|---|
1.2MB | 350KB | 70% |
示例代码:
合理使用计算属性和缓存,避免重复计算。
使用v-if和v-show合理控制组件的显示和隐藏。
使用key值避免不必要的组件销毁和重建。
表格:
方式 | 优点 | 缺点 |
---|---|---|
beforeRouteEnter | 可以在路由进入组件前预加载数据 | 只能在路由进入组件前使用,无法在组件内部控制 |
created + v-if | 可以在组件的created生命周期钩子函数中预加载数据,并使用v-if指令控制组件的显示 | 页面渲染时可能出现空白的情况 |
keep-alive + activated | 可以缓存组件的状态,避免每次进入组件都需要重新加载数据 | 只有在组件被激活时才会重新加载数据 |
2.5 服务端优化
表格示例:
技术 | 描述 |
---|---|
CSS Sprites | 将多个小图片合成一张大图,减少HTTP请求次数 |
WebP | 一种图片格式,可以大幅度减小图片大小,提升加载速度 |
lazyload | 只有当图片进入可视区域才进行加载,减少不必要的网络请求 |
图片压缩工具 | 对于大图,可以使用图片压缩工具进行压缩,减小图片大小 |
响应式图片处理 | 使用srcset和picture标签进行响应式图片处理,提升移动端的加载速度 |
canvas和SVG | 对于需要动态生成的图片,可以使用canvas或SVG代替传统的图片格式 |
CDN | 使用CDN加速图片加载,提升用户体验 |
优化手段 | 实例 |
---|---|
避免频繁的数据更新 | 合并多个数据更新操作为一次更新 |
使用v-if和v-show合理控制组件的渲染 | 对于不常用的组件使用v-show代替v-if |
使用懒加载和分页加载大量数据 | 对于列表数据使用分页加载或滚动加载 |
使用localStorage或IndexedDB等本地存储技术缓存数据 | 对于静态数据使用localStorage进行缓存 |
3.5 服务端优化的实践- 服务端渲染(SSR):使用vue-server-renderer将vue组件在服务端渲染成HTML字符串,减少浏览器的渲染压力,提升首屏渲染速度。