美文网首页前端
前端页面性能

前端页面性能

作者: Aniugel | 来源:发表于2019-09-26 10:27 被阅读0次

    前端性能优化因为涉及到计算机网络、数据算法、图形图像处理、浏览器渲染等多方面计算机知识。

    前端性能优化之雅虎35条军规

    关于前端性能优化的 23 条建议

    web性能优化面试

    2018 前端性能优化清单-简略

    2018 前端性能优化清单

    页面优化

    一、避免页面卡顿

    拆分代码段———— 用 requestAnimationFrame()获取任务去执行

    减少layout————减少重排,重排要重新计算页面再渲染

    简化DOM结构————帮助搜索引擎快速渲染

    优化html空格注释等————减小内存

    代码优化——html嵌套少、css选择器简单层数少、js少用闭包

    二、加快页面打开速度

    ①减少渲染堵塞
    1、js放在 body后面 或者用defer异步加载(能用则不用,因为defer的加载优先级会降到最低)
    2、DNS预读取——并行下载,不会堵塞页面渲染,可以缩短资源加载时间

    ②减少head标签里的css文件————如果文件太大会阻塞渲染,如果放在body里面会导致重新layout
    1、不要放太多的base64在css,因为图片转换成base64也挺大的,图片转换css不能有选择性加载的优势了,因为有的会根据设备屏幕进行选择性加载,做成字体图标。
    2、文件不大的话可以把css样式做成内联的,压缩一下。因为cdn服务的请求解析下载需要时间消耗。

    ③优化图片
    1、使用响应式图片,srcset、picture
    2、图片使用懒加载

    ④压缩和缓存
    1、gzip压缩——Nginx服务器中配置
    2、Cache-Control 、
    3、Last Modified ——Nginx服务器中配置——缺点:每次生成文件的last modified都不一样,max-age也难以计算
    4、etag——对文件做一个校验和———缺点:如果文件较大增加服务器计算的负担,且etag用了较少数的字符表示,虽然重合的概率很小,但是还是存在的

    ⑤升级到HTTP/2
    对于一个域只建立一次TCP连接,使用多路复用,请求多个资源,可以减少使用雪碧图,合并js/css发送请求了
    且兼容性好,不妈祖条件做蛋糕切换到HTTP/1.1

    三、增强用户体验

    ①加loading效果——(页面初始化菊花转、进度条)
    ②加过度动画——轮播图、导航栏、弹窗
    ③单击输入——有按下去的动作
    ④记住用户使用习惯——记住用户的输入信息,本地存储实现,如果用户开启了隐身模式,本地存储将会被禁掉,可以改用cookies
    ⑤避免页面闪动——可以把样式内联,因为他是和DOM一起出来的。
    

    四、用好chrome调试工具

    ①打印 —— log table dir 打印带样式
    ②检查没有用的css/js ——  Coverage  用到的用绿色  没用到的用红色
    ③截全屏功能 —— Capture full size screenshot  debugger
    ④ios真机模拟器 —— Xcode safari
    ⑤用console.trace追踪函数调用
    ⑥查看某个函数绑定的事件
    7、模拟断网做些出错处理
    8、研究重绘
    9、检查内存泄漏
    10、查看连接时间 Network
    11、查看内存消耗
    12、垃圾回收 Timeline
    13、页面性能评测 Audits
    

    题目:提升页面性能的方法有哪些?

    1.资源压缩合并,减少HTTP请求
    2.非核心代码异步加载—异步加载的方式—异步加载的区别
    3.利用浏览器缓存—缓存的分类—缓存的原理
    4.使用CDN
    5.预解析DNS

    <meta http-equiv="x-dns-prefetch-control" control="on"> //一般浏览器a标签是默认打开DNS预解析,但是使用HTTPS时DNS预解析关闭的,所以添加这一条语句强制开启
    <link rel="dns-prefetch" href="//host_name_to_prefetch.com">
    

    异步加载的方式:

    1.动态脚本加载
    2.defer
    3.async

    异步加载的区别:

    详细区别参照:https://juejin.im/post/5bcdaed7e51d457a8254e1b7
    https://www.jianshu.com/p/9ce2896f8f84

    1.defer是在HTML解析完之后才会执行的,如果是多个,按照加载的顺序依次执行
    2.async是在加载完之后立即执行,如果是多个,执行顺序和加载顺序无关

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>性能优化</title>
        <!-- <script src="./defer1.js" charset="utf-8" defer></script>
        <script src="./defer2.js" charset="utf-8" defer></script> -->
        <script src="./async1.js" charset="utf-8" async></script>
        <script src="./async2.js" charset="utf-8" async></script>
      </head>
      <body>
        <div class="">
          test
          <script type="text/javascript">
            console.log('write');
            document.write('<span>write</span>');
          </script>
          <script type="text/javascript">
            for (var i = 0; i < 200000; i++) {
                if (i % 20000 === 0) {
                    console.log(i);
                }
            }
          </script>
        </div>
      </body>
    </html>
    

    浏览器缓存:
    https://juejin.im/post/5b9346dcf265da0aac6fbe57
    https://segmentfault.com/a/1190000008377508
    https://www.jianshu.com/p/54cc04190252

    缓存的分类:
    强缓存:(不询问服务端是否过期,直接把缓存拿来用)

    Expiress Expires:Thu,21 Jan 2017 23:39:02 GMT(服务端发送的绝对时间)
    Cache-Control Cache-Control:max-age=3600(相对时间)
    

    协商缓存:(和服务器问一下,是否过期了)

    Last-Modified If-Modified-Since Last-Modified:Wed, 26 Jan 2017 00:35:11 GMT
    Etag If-None-Match
    

    总结:

    image.png

    原文链接:https://blog.csdn.net/u014465934/article/details/86491034

    相关文章

      网友评论

        本文标题:前端页面性能

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