zoukankan      html  css  js  c++  java
  • 首屏优化策略

    性能优化是程序开发中一个永恒的话题,在当前全民媒体的大环境下,低端机型、弱网环境、带宽限制依然占有市场很大的份额,前端页面的快速呈现,不仅影响用户的使用体验,对用户的阅读深度、停留时长等都有比较深远的影响。而在前端渲染优化中最重要的一个是首屏渲染优化。把内容最快的呈现给用户,提供及时的可交互方式,对我们来说至关重要。

    一、首屏性能检测工具

    1、lighthouse,你可以使用两种方式运行lighthouse,作为 Chrome 扩展程序运行,或作为命令行工具运行。运行结束会给你提供一些性能建议

    2、puppeteer,无头浏览器,是一个没有视图层的谷歌浏览器,它暴露开发者工具的可编程接口,比如说网络状况,模拟设备,代码覆盖率。

    二、首屏性能指标

    • 白屏时间:白屏时间是指浏览器从响应用户输入网址地址,到浏览器开始渲染内容的时间。
    • 首屏时间:首屏时间是指浏览器从响应用户输入网络地址,到首屏内容渲染完成的时间。 一般是首屏中的图片加载完毕的时候,我们认为是首屏结束的时间点。
    • 完全加载时间:DOM Tree 构建完成后,开始加载网页资源,资源完全加载完成后,从加载开始到此为网页的完全加载时间。
    • 可交互时间 (TTI):用户第一次可以和界面进行交互的时间
    • 慢会话 Long Tasks:RAIL有在100毫秒内相应用户输入的要求。如果响应超过这个时间就是慢会话

    /*
    * 帧率的计算
    */
    var frame = 0;
    var allFrameCount = 0;
    var lastTime = Date.now();
    var lastFameTime = Date.now();
      
    var loop = function () {
        var now = Date.now();
        var fs = (now - lastFameTime);
        var fps = Math.round(1000 / fs);
      
        lastFameTime = now;
        allFrameCount++;
        frame++;
      
        if (now > 1000 + lastTime) {
            //算出一秒左右的时间内总共渲染了多少帧
            var fps = Math.round((frame * 1000) / (now - lastTime));
            frame = 0;
            lastTime = now;
        };
      
        window.requestAnimationFrame(loop);
    }
     
    loop();

    淘宝网页用到的首屏优化策略:

      1、cdn边缘计算:renderToHtmlString,cdn预渲染

      2、资源请求优化:页面预缓存,利用了端侧提供的静态资源缓存方案,将HTML和基础JS等资源,推送下发至客户端;模块资源缓存,模块的JS+CSS资源,因为不同页面所使用的模块不同(例如男装会场和家装会场),并且总计有上百个模块,无法做到全量的提前缓存。这里我们通过捞取top流量页面的方式,仅将首屏相关的核心模块做了模块缓存下发,较好的缓解了模块请求的耗时;模块按需加载,除了刚提到的模块缓存下发,今年的618会场还通过“模块按需加载”的优化方式,最小化的控制了当前页面的模块数量,这对首屏的JS资源请求、数据请求都有一定的缩减。在实现方案上,通过在数据网关层先读取服务端所缓存的定向投放条件,判断当前访问的URL参数、客户端信息等是否满足模块的展示条件(例如,搜索框模块仅在手淘内才展示)。不满足条件时,则直接从页面中移除这一模块。例如,在外部浏览器里打开618超酷数码会场时,页面所加载的JS资源大小可因此减少40+%。

      3、降级策略:低端机、老系统,适当减少一些模块

      4、拆分页面:首先加载关键模块、非关键模块放入lazyQueue,在onload再加载;懒执行(交互执行),tab模块在hover或click的时候再执行;更懒的执行,一些非关键的信息在第一访问请求,并缓存,在第二次访问的时候才显示。

      5、缓存策略:低频修改模块缓存,设置过期时间;

      6、减少dom节点、减少js执行时间:非首屏html转换为字符串,保存到js中或者html标签中

      7、其它

      

  • 相关阅读:
    work_7_Boolean和boolean,基本类型和包装类型
    work_06_服务器上传图片错误
    work_05_64未随机id生成器
    work_04_谷歌验证码工具Kaptcha
    vue.js_13_vue的搭建
    每日一java(割草机)
    work_03_常见jq问题处理
    work_02_css样式
    java 27
    java 27
  • 原文地址:https://www.cnblogs.com/fqlGlog/p/13792428.html
Copyright © 2011-2022 走看看