背景:由于目前线上版本的h5加载一直很慢,于是趁着最近有空就打算优化一下,首先打开network分析影响加载速度的文件有哪些。

看原文件大小有接近1.4m,不能忍!!!

注意:

1、博主这里用的vue-cli2.x版本,webpack为3.6.0版本。
2、vendor文件一般放的是长时间不怎么更新的库,比如vue、vuex、vue-router等等。

开始搞事情。

1、删除多余的第三方库

检查自己package.json文件下dependencies里面有哪些是安装引用了但是没用的。因为里面可能存在当时做项目测demo引入的库忘记删除,挨个挨个筛选,找到以后执行下面的命令将其卸载。

npm un xxxx

这一步执行完后博主的vendor文件体积减少了接近400k

2、拆分体积较大的文件为多个小文件

// webpack.base.conf.js// entry: {
//   app: './src/main.js'
// },
// webpack.dev.conf.jsentry: {app: './src/main.js'
},
// webpack.prod.conf.jsentry: {vendor1: ["vue-router", "vuex", "vue"]],vendor2: ["js-cookie", "v-viewer", "clipboard"],vendor3: ["element-ui"],app: './src/main.js'
},new webpack.optimize.CommonsChunkPlugin({// 这里要跟entry配置的顺序反着来,否则不能成功names: ["vendor3", "vendor2", "vendor1"], minChunks: Infinity// 下面是cli默认配置// name: 'vendor',// minChunks (module) {//   // any required modules inside node_modules are extracted to vendor//   return (//     module.resource &&//     /\.js$/.test(module.resource) &&//     module.resource.indexOf(//       path.join(__dirname, '../node_modules')//     ) === 0//   )// }}),

配置完后重新打包,very nice!!! 结果如下:

体积是小了很多,但是这个element-ui也太大了不,光这一个库就有600k,我们给它再处理一下。

3、第三方ui库使用按需加载

使用官方提供的按需加载插件babel-plugin-component,安装

npm install babel-plugin-component -D(等同于--save-dev)

.babelrc 里配置 plugins如下 (如果是vue-cli3.x版本的话,则在babel.config.js文件添加,其他操作一样)

{"presets": [["env", {"modules": false,"targets": {"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]}}],"stage-2"],"plugins": ["transform-vue-jsx","transform-runtime",/************* 添加下面的代码 start  ****************/["component",{"libraryName": "element-ui","styleLibraryName": "theme-chalk"}]/*************** end **************/]
}

在src下新建element文件夹,再在element下建一个index.js文件,用于配置element-ui的按需加载,如下:

// src/element/index.jsimport { Carousel, Rate, Dialog, Form, FormItem, Checkbox, CarouselItem, InfiniteScroll, Switch, Collapse, CollapseItem, Timeline, TimelineItem } from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import Vue from 'vue'Vue.use(InfiniteScroll)
Vue.component(Carousel.name, Carousel)
Vue.component(Rate.name, Rate)
Vue.component(Dialog.name, Dialog)
Vue.component(Form.name, Form)
Vue.component(FormItem.name, FormItem)
Vue.component(Checkbox.name, Checkbox)
Vue.component(Switch.name, Switch)
Vue.component(CarouselItem.name, CarouselItem)
Vue.component(Collapse.name, Collapse)
Vue.component(CollapseItem.name, CollapseItem)
Vue.component(Timeline.name, Timeline)
Vue.component(TimelineItem.name, TimelineItem)

在main.js引入该文件,如下:

import './element/index'

再修改webpack.prod.conf.js文件配置如下:

// webpack.prod.conf.jsentry: {vendor1: ["vue-router", "vuex", "vue"]],vendor2: ["js-cookie", "v-viewer", "clipboard"],element: './src/element/index.js',app: './src/main.js'
},new webpack.optimize.CommonsChunkPlugin({// 这里要跟entry配置的顺序反着来,否则不能成功names: ["element", "vendor2", "vendor1"], minChunks: Infinity
}),

再次npm run build走一波,结果如下,可以看到,干了这么多的事,还是很有效果的,element体积只有100k了。

4、gzip压缩

这里还有一个就是gzip压缩,如果没有启用这个方案的赶紧试一下,据说可以压缩接近70%的体积,因为博主这里一开始就是配置好的,不受这个影响,也就没写详细过程,想知道自己是否已经开启gzip压缩,可通过如下方式查看:

有gzip就表示开启了的,另外也可以在Reponse Headers查看,如下:

5、图片压缩同时采用cdn引入

图片压缩入口,你们去试一下就知道有多爽,至少可以压缩一半的体积,还高保真,强烈安利!!!

6、设置路由懒加载

// 方法一
{path: '/demo',name: 'demo',component: resolve => require(['@/components/demo'],resolve)
}方法二:
const Demo=  () => import('@/components/demo')
{path: '/demo',component: Demo
},

7、禁止打包生成.map文件

// webpack.config.js 与publicPath同级module.exports = {...productionSourceMap: false, // 是否在构建生产包时生成.map文件...
}

8、预渲染或设置骨架屏

这个方案很多,百度一下你就知道。

注意:预渲染也是有弊端的,需要根据自己的情况酌情使用。

单页(SPA)首页白屏优化相关推荐

  1. 前端白屏问题_首页白屏优化实践

    前言 自从前端三大框架React.Vue.Angular面世以来,前端开发逐渐趋向规范化.统一化,大多数时候新建前端项目,首先想到使用的技术一定是三大框架之一,框架给前端开发带来了极大的便利和规范,但 ...

  2. Vue 单页应用 的 首屏优化

    对于单页应用,要在一个页面上为用户提供产品的所有功能,在这个页面加载的时候,首先要加载大量的静态资源,这个加载时间相对比较长.所以我们需要做一些相应的优化,减少响应时间,尽快把首屏显示出来. 1.压缩 ...

  3. vue 首页白屏优化

    方法一 <style>#app {height: 100vh;position: relative;}.im {position: absolute;left: 50%;top: 50%; ...

  4. 白屏优化_今日头条品质优化 图文详情页秒开实践

    背景 作为一个内容类应用,看新闻读资讯一直是头条用户的核心需求,页面的打开速度直接关系到用户使用头条的核心体验,在头条中,为了更多的承载足够丰富的样式和逻辑下保持多端体验的统一,详情页的内容我们是通过 ...

  5. 首页白屏解决与优化方案

    当前很多页面都使用前端模板进行数据渲染,那么在糟糕的网速情况下,一进去页面,看到的不是白屏就是 loading,这称为白屏问题. 此问题发生的原因基本可以归结为网速跟静态资源 1.css文件加载需要一 ...

  6. 前端白屏问题_首页白屏的引发的思考(一)

    最近在做项目的优化,除了整体的架构更改,我们发现在每次加载的时候,首页白屏的问题十分明显. 为什么会出现白屏 现在的前端框架, React.Vue.Angular 三大巨头已经占据了主导地位,市面上大 ...

  7. [vue] vue首页白屏是什么问题引起的?如何解决呢?

    [vue] vue首页白屏是什么问题引起的?如何解决呢? 1.打包后文件引用路径不对,导致找不到文件报错白屏 2.路由模式mode设置影响 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易 ...

  8. 【web性能】获取web各个阶段响应时间:服务器响应时间、首页白屏时间、dom渲染完成时间等

    [web性能]Web performance 获取web各个阶段响应时间:DNS解析时间.TCP建立连接时间.首页白屏时间.dom渲染完成时间.页面onload时间等 准确地测量web应用程序的性能特 ...

  9. php网站后,Thinkphp网站缓存导致网站迁移搬家后访问首页白屏

    Thinkphp作为一个最原始的开源php框架,很多网站建立程序员选择使用这个框架开发,快速的开发项目.不过随着更多开源程序的出现,还有涉及各个领域的海量模板,现在是很多客户使用了其它的建站程序建站, ...

最新文章

  1. Vue $createElement
  2. WinAPI: GetSystemPowerStatus - 获取系统电源状态的信息
  3. 利用configure脚本将定制的模块加入到Nginx中
  4. 解决xp登陆域很慢的方法
  5. Silverlight 3 全系列开发工具发布
  6. C语言中几个容易踩的“坑”!
  7. zigbee与WiFi模块和蓝牙模块的区别是什么?
  8. python正则判断_Python 正则表达式
  9. swift 打包sdk_在封装SDK中Swift和OC混编之相互调用
  10. 他,先后担任4所大学校长!
  11. 对比学习:充分利用有限的医学标注数据 |NeurIPS 2020
  12. php自带excel,基于php中使用excel的简单介绍_PHP
  13. win10下驱动级套节字通信(ksocket)
  14. SAM4E单片机之旅——11、UART之PDC收发
  15. matlab2014a vs2015,Matlab2014a使用VS2015混合编译
  16. 焦作大学计算机专业分数线,焦作大学历年分数线 2021焦作大学录取分数线
  17. VMWare虚拟机Ubantu20.10添加中文智能拼音输入法
  18. 中证登姚前演讲:数字资产是数字金融的核心(全文)
  19. 杭州5.8万人面临饮水难 一村庄居民一月未沐浴
  20. 使用U盘重装win10系统

热门文章

  1. 一键搜索之Win10锁屏壁纸
  2. Android 9.0模拟器root权限获取
  3. JavaWeb《一》概念、服务器部署及servlet
  4. MATLAB学习记录:记录模型/模型截图/参数配置/子系统封装/Mask
  5. 搭建自己的ebook网站
  6. python批量生成图表_教你用Python自动读取数据生成图表,产生的效益很可观
  7. java安装教程以及环境变量的配置
  8. 【与神对话】和【零极限】系列完整书单
  9. 如何找到科研金点子?
  10. VirtualBox 桥接网卡设置