Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

终端性能优化杂谈 #147

Open
hoperyy opened this issue Sep 5, 2019 · 0 comments
Open

终端性能优化杂谈 #147

hoperyy opened this issue Sep 5, 2019 · 0 comments

Comments

@hoperyy
Copy link
Owner

hoperyy commented Sep 5, 2019

性能优化的理论方法

常用工具

  • Chrome 自带的 Dev Tools
  • Google 推出的 PageSpeed Insights
  • Lighthouse

Browser Processing Model

image

术语

  • redirect: timing.fetchStart - timing.navigationStart
  • dns: timing.domainLookupEnd - timing.domainLookupStart
  • connect: timing.connectEnd - timing.connectStart
  • network: timing.connectEnd - timing.navigationStart
  • load: timing.loadEventEnd - timing.navigationStart
  • domReady: timing.domContentLoadedEventStart - timing.navigationStart
  • interactive: timing.domInteractive - timing.navigationStart
  • ttf: timing.fetchStart - timing.navigationStart
  • ttr: timing.requestStart - timing.navigationStart
  • ttdns: timing.domainLookupStart - timing.navigationStart
  • ttconnect: timing.connectStart - timing.navigationStart
  • ttfb: timing.responseStart - timing.navigationStart
  • firstPaint: timing.msFirstPaint - timing.navigationStart

核心指标

  • 非视觉指标(Non-Visual Metrics)

    • 首字节时间(用于衡量网络链路和服务器响应性能)
    • 白屏时间(firstPaint)
    • 可交互时间(interactive)
    • 完全加载时间(load)
  • 感官指标(Visual Metrics)

    • First Paint Time (First Non-Blank Paint Time)

      文档中任一元素首次渲染的时间

    • FCP: First Contentful Paint Time

      代表文档中内容元素(文本、图像、Canvas,或者 SVG)首次渲染的时间。

      它通常情况下是无意义的渲染,比如头部和导航条。

    • FMP: First Meaningful Paint Time

      首次有意义的渲染时间(它的统计在重大的布局变化之后,往往代表了用户所关心的首次渲染时间)。

    • First Interactive Time

      首次可交互时间

    • Consistently Interactive Time

      持续可交互时间

    • Fisrt Visual Change

      首次视觉发生变化的时间点

    • Last Visual Change

      最后一次视觉发生变化的时间点

    • Speed Index (SI)

      视觉速度:Mean Pixel-Histogram Difference 算法。

      算法如下,它代表了我们页面在加载过程中视觉上的变化速度,其值越小代表感官性能越好:

      image

    • PSI: Perceptual Speed Index(PSI)

      视觉速度:Structural Similarity Image Metric 算法。

      更贴近用户的真实感受。

重点指标

  • 非视觉指标(Non-Visual Metrics)

    • 首字节时间(用于衡量网络链路和服务器响应性能)
    • 白屏时间(firstPaint)
    • 可交互时间(interactive)
    • 完全加载时间(load)
  • 感官指标(Visual Metrics)

    • FCP
    • FMP
    • PSI

落地工具

  • 开发阶段

    • Chrome 自带的 Dev Tools
    • Lighthouse
    • 同时借助非视觉指标(Non-Visual Metrics)和视觉指标(Visual Metrics)进行分析
  • 生产状态

    • 用研:眼动仪、用户沟通、用户反馈、调研问卷、专家评估,缺点是无法量化
    • 自研:跨平台对标分析

优化策略

  • 纯前端离线化(在浏览器中通过纯前端的手段进行资源文件的离线化)
  • 客户端离线化(在客户端容器内通过离线包的方式实现资源文件及页面的离线化)
  • 页面组件化并按需加载(通过组件化方式对页面细粒度拆分并按需加载)
  • 预渲染提升感官性能(在框架启动之前,通过预渲染的方式确保页面框架最快呈现)

lighthouse 分析

常用性能监控方案

  • 全量
  • 抽样

参考资料

@hoperyy hoperyy changed the title 性能优化梳理 终端性能优化杂谈 Sep 27, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant