zoukankan      html  css  js  c++  java
  • 前端性能优化总结

    1.一个页面中有大量的数据,如何优化页面

    1. 从数据上处理:分页分表,比如前端可以把数据分页展示,后端也分段吐数据
    2. 从渲染上解决:

          异步渲染,比如进入页面先不渲染,然后加载好页面再渲染。

          局部渲染:只渲染目前可见区域的数据,再渲染次屏数据。

          还有性能瓶颈,可以考虑web worker 做压缩和解码,也可以考虑离屏canvas做预渲染。

        3. 减少网络耗时:压缩数据,gzip等

    2.一个页面中有大量的图片,如何优化页面

       1.图片懒加载,滚动到某个位置再加载图片

          通过js将img标签的data-src属性赋值给src属性

       2.图片预加载,预先加载图片的前一张和后一张
       3.css sprite 精灵图加载(雪碧图)

          当网站或者APP有大量小icon,如果上传到图片服务器比如CDN, 要加载所有这些小icon将增加大量请求,而CDN是按流量收费的,这无疑将增加很多成本.

          CSS Sprites 技术早已不新鲜,就是将这些小icon合并成一张图片,只需要加载一次,每次通过background-position来控制显示icon,这样就可以节约大量请求,节约成本

       4.将图片压缩成base64格式来节约请求     

          将图片压缩成base64,随html或者css一起下载到浏览器,不需要额外的请求,这样就节约了请求.

          图片在传输过程中是流传输,如果将图片转换成base64,实际上是变大了,并且浏览器在decode  base64编码的图片时需要耗费很多时间的,所以如果选择此方案的话,最好选择一些小图片,不然得不偿失,在webpack中可以设置最大多少byte的图片压缩成base64

    3.为什么不用gzip压缩图片

        图片启用GZip压缩会适得其反

          一些开发者使用HTTP压缩那些已经本地已经压缩过的文件,而这些已经压缩过的文件再次被GZip压缩时,是不能提高性能的,表现在如下两个方面。

          首先,HTTP压缩需要成本。Web服务器获得需要的内容,然后压缩它,最后将它发送到客户端。如果内容不能被进一步压缩,你只是在浪费CPU做无意义的任务。

          其次,采用HTTP压缩已经被过压缩的东西并不能使它更小。

        图片启用GZip压缩,不仅浪费了CPU,还增大了体积,势必影响服务器性能,影响网站速

    4.单页面应用首屏优化

        1.压缩代码

          无论是否为单页应用,代码的压缩都是要做的。

          对于vue-cli生成的项目,在Webpack配置文件中使用了UglifyJsPlugin进行代码的压缩

    //webpack.prod.conf.js
    plugins: [
        ......
        new UglifyJsPlugin({
          uglifyOptions: {
            compress: {
              warnings: false
            }
          },
          sourceMap: config.build.productionSourceMap,
          parallel: true
        }),
        ......
    ]

        2.框架和插件按需加载

          对于项目中用到的一些UI框架,比如 Onsen UI 、Mint UI 等等。如果我们只使用框架的部分组件,可以不引入整个框架,按需引入用到的组件

          对于一些插件,比如表单验证插件,如果只是在个别组件中用的到,也可以不要在main.js里面引入,而是在组件中按需引入

        3.框架和插件从cdn中引入

          在开发过程中,我们其实不会要去更改这些第三方库,所以可以把它们放到cdn中,不参与打包。
          在 index.html 中使用cdn引入

    <script src="https://cdn.example.com/vue/2.5.3/vue.js"></script>
    <script src="https://cdn.example.com/vuex/3.0.1/vuex.min.js"></script>
    <script src="https://cdn.example.com/axios/0.17.1/axios.min.js"></script>

          在webpack.config.js(webpack.base.config.js)中添加externals,表示这些文件可以被引用,但不参与打包。

    externals: {
      'vue': 'Vue',
      'vuex': 'Vuex',
      'axios': 'axios'
    }

          这样配置之后,我们依然可以用import Vuex from 'vuex'来引入模块。

        4.路由懒加载

          路由懒加载也就是 把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件

          结合 Vue 的异步组件和 Webpack 的代码分割功能,轻松实现路由组件的懒加载。

            1.基本引入组件方式

              import Foo from './Foo.vue'

            2.定义一个能够被 Webpack 自动代码分割的异步组件

              const Foo = () => import('./Foo.vue')

    5.性能优化总结

        1.高频操作的防抖和截流

        2.定时器的使用

          合理的使用生命周期,比如在组件没用的时候,销毁掉无效的定时器

          使用watch代替一直轮询的setInterval定时器

        3.图片内容的懒加载

          图片这个东西加载起来很占用时间,同时并不是所有的图片都需要初始化的时候就加载进来

        4.模块组件化

          开发中经常会写很多组件,最好做到独立组件与业务组件的分离,或者业务组件在抽离的独立组件之上再做封装

        5.用animation动画代替v-show

          v-show本身控制的就是display属性,但是这种控制有的时候显得生硬

          用css3的animation动画代替displa:none的操作,如

    .animation_show {
        animation: animate_showup 0.5s;
        animation-timing-function: linear;
        opacity: 1;
    }
    .animation_hide {
        animation: animation_hidedown 0.5s;
        animation-timing-function: linear;
        opacity: 0;
    }
    @keyframes animate_showup {
        0% {
            opacity: 0;
        }
        100% {
            opacity: 1;
        }
    }
    @keyframes animation_hidedown {
        0% {
            opacity: 1;
        }
        100% {
            opacity: 0;
        }
    }

    以上就是基本的前端性能优化方式

  • 相关阅读:
    软件开发规范
    内置模块
    自定义模块
    装饰器 递归
    内置函数 闭包
    生成器 推导式
    函数名运用 新版格式化输出 迭代器
    函数进阶
    pycharm快捷键
    移动端必测点
  • 原文地址:https://www.cnblogs.com/yxkNotes/p/12711087.html
Copyright © 2011-2022 走看看