首屏优化系列(二)

栏目: jQuery · 发布时间: 5年前

内容简介:title: 首屏优化系列(二) date: 2018-7-14 09:42:30 tags:需求描述:优化首屏加载速度,减少白屏时间。(优化打包后的文件体积)继上次的优化手段,测试都是基于本地的,主要涉及到数据请求方面,而这次优化是基于打包后的项目展开,本以为这次项目优化的已经非常不错了,可是打包后vendor.js体积过大,还有首屏的图片过大,导致初次进入页面竟然要等到20秒甚至更多,这期间,页面始终处于白屏状态,在此之前,我并未意识到是自己的问题,还将其归咎于网速的问题。。。 ## 通过CDN的方式

title: 首屏优化系列(二) date: 2018-7-14 09:42:30 tags:

  • webpack
  • 图片处理
  • element-ui categories: 前端

需求描述:优化首屏加载速度,减少白屏时间。(优化打包后的文件体积)

继上次的优化手段,测试都是基于本地的,主要涉及到数据请求方面,而这次优化是基于打包后的项目展开,本以为这次项目优化的已经非常不错了,可是打包后vendor.js体积过大,还有首屏的图片过大,导致初次进入页面竟然要等到20秒甚至更多,这期间,页面始终处于白屏状态,在此之前,我并未意识到是自己的问题,还将其归咎于网速的问题。。。 ## 通过CDN的方式引入,减少vendor.js体积   为什么打包后vendor.js会那么大呢?vendor为厂商的意思,即第三方,webpack将引用的第三方库,打包为一个合集,本次项目引用的第三方库较多,自然打包后的vendor.js就很大了,本次项目引入的第三方库如下: ```JavaScript "dependencies": { "axios": "^0.18.0", "element-ui": "^2.2.1", "js-cookie": "^2.2.0", "qrcode": "^1.2.0", "vue": "^2.5.2", "vue-router": "^3.0.1", "vuex": "^3.0.1", "vue-lazyload": "" } ``` > 注意 :warning: vue-cli中,可以执行'npm run build --report'来生成项目的依赖图,通过这张图,有助于分析文件的大小,组件的执行脚本。

通过分析得知,所引用的库打包后的大小,elemnt-ui非常大,官方文档上讲可以按需引入,结果,打包后文件体积减少了100kb,相较于整个vendor.js来讲,还是差别不大。像是这些相对成熟的库,都是有对应的CDN的,诸如,cndjs、cdn.bootcss、unpkg.com等等,通过CDN的方式引入,速度要比引入我们本地的vendor.js快很多,对比了几种cdn的加载速度后,选择了CDNJS,加载速度比较快。

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/element-ui/2.4.3/theme-chalk/index.css"/>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-router/3.0.1/vue-router.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/3.0.1/vuex.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/element-ui/2.4.3/index.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-lazyload/1.2.6/vue-lazyload.js"></script>
复制代码

在引入这些库的地方就可以去掉引入了,在build/webpack.base.config.js中添加externals:

externals: {
    'vue': 'Vue',
    'axios': 'axios',
    'vue-router': 'VueRouter',
    'element': 'element-ui',
    'vuex': 'Vuex',
    "vue-lazyload": "VueLazyload"
  }
复制代码

开启gzip压缩,生成压缩文件

  1. 安装插件
npm install --save-dev compression-webpack-plugin
复制代码
  1. 修改config/index.js中的productionGzip为true,执行build之后,每个js和css文件会压缩一个gz后缀的文件,服务器端配置gzip,如下:
gzip on;
gzip_types text/plain application/javascriptapplication/x-javascripttext/css application/xml;
复制代码

图片处理

静态图片处理

对于展示类的首页,不能指望UI帮我们压缩banner,可是好几兆的图片,在服务器带宽不足的情况下,加载是很慢的,测试了一下,一个1M的图片,放到阿里云OSS上,无缓存初次请求需要100ms,200kb的图片通过webpack打包,然后部署到服务器上,请求需要4s,网络环境一致,索性,就把项目所有的静态图片都传到阿里云上了,然后建了一个常量文件,进行管理,不得不说,这样加载速度快了,打包速度也快了不少。

const IMG_URL = {
    // 首页
    HOME: {
        BANNER1: 'https://oss-cn-beijing.aliyuncs.com/images/static-img/xx/xx.jpg'
    },
    COURSE_INDEX: {
        // 头像背景文件
        AVTOR_BG: 'https://oss-cn-beijing.aliyuncs.com/images/static-img/xx/xx.png'
    }
  }
复制代码

icon处理

在我刚开始实习的时候使用的是css sprite,天啦噜,真的是麻烦哦,每次改一次icon,都需要重新合成,然后就要重新计算位置,在一个项目中用了一次之后,果断放弃了。iconfont非常好用,对于团队合作也很方便,每次UI做完图上传上去就好了,大小,颜色什么的,我们自己控制,尤其是做到一半,要换主题色的话,就更方便了,UI不用重新出图,我们只改一个主题色的变量值就可以了(这种方式不支持多色icon,多色icon,如果想改变颜色,可以手动去改svg里面的色值,通用不需要UI重新出图) 使用方式和为什么使用,已经有人写的很明白了。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

iBATIS实战

iBATIS实战

(加)Clinton Begin、(加)Brandon Goodin、(加)Larry Meadors / 叶俊 / 人民邮电出版社 / 2008-5 / 45.00元

《图灵程序设计丛书•Java系列•iBATIS in Action iBATIS实战》是讲述iBATIS框架的权威著作。书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。《图灵程序设计丛书•Java系列•iBATIS in Action iBATIS实战》的最后给出了一个设计优雅、层次清晰的示例程序JGa......一起来看看 《iBATIS实战》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器