美文网首页
首屏加载

首屏加载

作者: 撑船的摆渡人 | 来源:发表于2019-10-17 18:45 被阅读0次

关于首屏加载相信很多人在项目中会遇到。

为什么要做首屏优化?

首屏时间的快慢直接影响到用户对网站的认知度。加载的越快可能用户停留的时间越长,用户转化率越高。
最能反映页面性能的一个指标是FPS(每秒传输帧数(Frames Per Second))。每秒钟帧数愈多,所显示的动作就会越流畅。一般系统设定屏幕的刷新率为60fps,一帧的时长约16ms,除去系统上下文切换开销,每一帧只留10ms左右的程序处理时间。

怎么做?

首先要明白的一点是,关键模块优先加载,要保证不论什么情况下都不能失去重点。然后首屏的内容强制渲染,其他的进入懒加载队列。懒加载一般在浏览器空闲时间处理,保证不阻塞;担心未触发onload事件,5s之后执行懒加载队列

  • 当页面中触发 mousemove scroll mousedown touchstart touchmove keydown resize onload 这些事件的时候,说明用户开始与页面交互了,程序必须开始加载。
  • 如果用户没有交互,但是页面已经 onload 了,程序当然不能浪费这个绝佳的空档机会,趁机加载内容;经测试,部分情况下,onload 事件没有触发(原因尚不知),所以还设定了一个超时加载,5s 之后,不论页面加载情况如何,都会将剩下的非关键模块加入到懒加载监控。
前端缓存和异步加载

1.懒加载,我们只加载页面上第一眼看到的内容。
2.本地存储
3.loading动画或者一个海报
4.异步加载
5.在使用ui库时,尽量使用按需加载方式.
6.合理规划三方库的引用
7.善用webpack-bundle-analyzer优化项目依赖
8.服务端开启 gzip压缩

webpack-bundle-analyzer webpack打包分析工具

npm install --save-dev webpack-bundle-analyzer

然后在 webpack.prod.conf.js 中配置

const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
plugins: [
new BundleAnalyzerPlugin(
    {
         analyzerMode: 'server',
         analyzerHost: '127.0.0.1',
         analyzerPort: 8888,
         reportFilename: 'report.html',
         defaultSizes: 'parsed',
         openAnalyzer: true,
         generateStatsFile: false,
         statsFilename: 'stats.json',
         statsOptions: null,
         logLevel: 'info'
       }
    ),
]

配置完成,在项目 npm run build 结束后,就会自动打开一个文件的模块组成图在默认浏览器中,图中面积大的就是对应模块占据的空间。
列如,打包后全局注册的elementUI包很大,我们可以改成按需引入的形式,然后看是否有安装babel-plugin-component插件,才能使局部引用有效。

CND,直接外链第三方库

首先在index.html加入需要引入的库
然后在webpack.base.conf.js中加入externals


module.exports = {
  context: path.resolve(__dirname, '../'),
  entry: {
    app: './src/main.js'
  },
  externals: {
    'jquery': 'jQuery',
    'element-ui':'ELEMENT',
    'vue': 'Vue'
  }
/**** 项目中使用是这样的 ****/
externals: {
    "Vue": "vueFamily.vue",
    "vue-router":'vueFamily.vueRouter',
    'vuex':'vueFamily.vuex',
  },
  plugins:[
    new HtmlWebpackExternalsPlugin({
      externals: [
        {
          module: 'vueFamily',
          entry: '//static.cn/fe-libs/vueFamily.js',
          global: 'vueFamily',
        },
      ],
    })
  ]

GZIP打包,首先安装gzip

npm install -save gzip
在webpack.prod.conf.js加入如下代码

if (config.build.productionGzip) {
  const CompressionWebpackPlugin = require('compression-webpack-plugin')
 
  webpackConfig.plugins.push(
    new CompressionWebpackPlugin({
      asset: '[path].gz[query]',
      algorithm: 'gzip',
      test: new RegExp(
        '\\.(' +
        config.build.productionGzipExtensions.join('|') +
        ')$'
      ),
      threshold: 10240,
      minRatio: 0.8
    })
  )
}

在index.js中加入如下代码

productionGzip: false,
productionGzipExtensions: ['js', 'css'],

相关文章

  • 前端页面性能优化

    一、网络加载类 1.首屏数据请求提前,避免JavaScript文件加载后才请求数据2.首屏加载和按需加载,非首屏内...

  • 81.vue前端性能优化实践

    前提:vue-cli3.0,pc端项目,首屏加载时间较长问题: 影响首屏时间长的主要问题:大文件的加载长,导致首屏...

  • 首屏加载

    关于首屏加载相信很多人在项目中会遇到。 为什么要做首屏优化? 首屏时间的快慢直接影响到用户对网站的认知度。加载的越...

  • 从输入网址到页面呈现都发生了什么?

    ~~~~~如有错误,欢迎吐槽~~~~~~ 前端开发中我们常常要考虑首屏加载时间,为了尽可能减少首屏加载时间我们需要...

  • 直播中的首屏加载优化

    本文转自:直播中的首屏加载优化 | www.samirchen.com 直播中的首屏加载时间指的是进入直播间时从播...

  • 常见面试题--js+css+vue

    1、变量提升、函数提升 2、数组的常用方法 3.优化首屏加载速度 4.Vue 首屏加载速度优化 5、Vue如何设置...

  • Vue防止白屏添加首屏动画

    单页应用有个无法避免的问题就是首屏加载慢,虽然可以通过 gzip、路由懒加载、CDN、提高服务器带宽 等手段,首屏...

  • vue项目优化方案

    使用严格模式,指定代码书写规范 首屏加载优化 开启gzip压缩代码,此方案同样是解决首屏加载过慢的方案之一 UI库...

  • 构建工具

    Vue 首屏加载优化 关于 Vue 首屏加载优化的一点总结为什么我们要做三份 Webpack 配置文件 在知乎上我...

  • SPA(单页应用)首屏加载速度慢怎么解决

    一、什么是首屏加载 首屏时间(First Contentful Paint),指的是浏览器从响应用户输入网址地址,...

网友评论

      本文标题:首屏加载

      本文链接:https://www.haomeiwen.com/subject/zvyuwqtx.html