今天说说前端性能

关于页面相应时间,有一条著名的“2-5-8原则”。当用户访问一个页面:

在2秒内得到响应时,会感觉系统响应很快;

在2-5秒之间得到响应时,会感觉系统的响应速度还可以;

在5-8秒以内得到响应时,会感觉系统的响应速度很慢,但可以接受;

而超过8秒后仍然无法得到响应时,用户会感觉系统糟透了,进而选择离开这个站点,或者发起第二次请求。

对于一个网站如果希望抓住用户,网站的速度以及稳定性是非常重要的。

从各式各样的前端监控平台中,你都可以获得页面很多的性能指标。本文将介绍几个几个比较关键的指标,并给出相应的优化思路。

开始渲染时间

该时间点表示浏览器开始绘制页面,在此之前页面都是白屏,所以也称为白屏时间。

该时间点可用公式Time To Start Render = TTFB(Time To First Byte) + TTDD(Time To Document Download) + TTHE(Time To Head End)表示。其中TTFB表示浏览器发起请求到服务器返回第一个字节的时间,TTDD表示从服务器加载HTML文档的时间,TTHE表示文档头部解析完成所需要的时间。在高级浏览器中有对应的属性可以获取该时间点。Chrome可通过chrome.loadTimes().firstPaintTime获取,IE9+可以通过performance.timing.msFirstPaint获取,在不支持的浏览器中可以根据上面公式通过获取头部资源加载完的时刻模拟获取近似值。开始渲染时间越快,用户就能更快的看见页面。

对于该时间点的优化有:

1)优化服务器响应时间,服务器端尽早输出

2)减少html文件大小

3)减少头部资源,脚本尽量放在body中

DOM Ready

该时间点表示dom解析已经完成,资源还没有加载完成, 这个时候用户与页面的交互已经可用了。用公式TimeTo Dom Ready = TTSR(Time To Start Render) + TTDC(Time To Dom Created) + TTST(Time To Script)可以表示。TTSR上面已经介绍过了,TTDC表示DOM树创建所耗时间。TTST表示BODY中所有静态脚本加载和执行的时间。在高级浏览器中有DOMContentLoaded事件对应。

详细规范可以查看W3C的HTML5规范。从MDN文档上可以看出该事件主要是指dom文档加载解析完成,看上去很简单,但是DOMContentLoaded事件的触发与css,js息息相关,现在有专门的名词Critical Rendering Path(关键呈现路径)来描述。

在不支持DOMContentLoaded事件的浏览器中可以通过模拟获取近似值,主要的模拟方法有:

1)低版本webkit内核浏览器可以通过轮询document.readyState来实现

2)ie中可通过setTimeout不断调用documentElement的doScroll方法,直到其可用来实现

具体实现方法可以参考主流框架(jquery等)的实现。 DOM Ready时间点意味着用户与页面可以进行交互了,因此越早越好,对于该时间点的优化有:

1)减少dom结构的复杂度,节点尽可能少,嵌套不要太深

2)优化关键呈现路径

首屏时间

该时间点表示用户看到第一屏页面的时间,这个时间点很重要但是很难获取,一般都只能通过模拟获取一个近似时间。一般模拟方法有:

1)不断获取屏幕截图,当截图不再变化时,可以视为首屏时间。可参考webPagetest的Speed Index算法;

2)一般影响首屏的主要因素是图片的加载,通过页面加载完后判断图片是否在首屏内,找出加载最慢的一张即可视为首屏时间。当然还需考虑其他细节,具体可参考【7天打造前端性能监控系统】

针对该时间点的优化有:

1)页面首屏的显示尽量不要依赖于js代码,js尽量放到domReady后执行或加载

2)首屏外的图片延迟加载

3)首屏结构尽量简单,首屏外的css可延迟加载

onload

该时间点是window.onload事件触发的时间,表示原始文档和所有引用的内容已经加载完成,用户最明显的感觉就是浏览器tab上loading状态结束。

该时间点的优化方式有:

1)减少资源的请求数和文件大小

2)将非初始化脚本放到onLoad之后执行

3)无需同步的脚本异步加载

为了优化整站性能,页面onload的时候可以考虑做一些预加载,把其它页面需要用到的资源预先加载进来。

阅读了上面的文章,不知道你有没有get到前端页面的性能指标分析技能。前端进阶学习的道路上,除了自己阅读参考书外,另一个好方法就是找资深的前端开发工程师交流,借助他人的经历获取高效的学习方法和快速进阶的方式。

10月30日晚,我们邀请到了网易高级前端技术专家蔡剑飞为大家进行《前端分层之数据管理》的直播分享。对于想要成为前端开发工程师,或正在前端成长之路上打怪升级的你来说,都是一次不错的学习机会。

关于这场直播,你需要了解…

分享人是谁?

本次直播的分享人是网易高级前端技术专家蔡剑飞。他拥有十年网易前端开发经验,是网易杭州研究院前端框架工具、流程规范工程化方向的技术负责人。

我能学到什么?

这场分享主要分为两个部分。

第一部分为技术专题,主要对前端分层的数据管理进行一些讲解;

第二部分会针对个人的学习成长,学习如何通过解决碰到的问题来提升个人能力。

收费吗?

不收费:) 本次直播为免费分享

如何参与直播?

扫描下方QQ群二维码,加入直播交流群~在直播开始之前,助教MM将会放出直播地址,并挥舞小皮鞭敦促大家去听课~


如果扫描跳转失败,可以直接添加群号:600918673~

网易云课堂《前端开发工程师》微专业由网易一线资深前端开发工程师团队打造,3个月让你掌握前端开发工程师必知必会的知识体系。通过网易真实产品案例,系统培养底层知识+技术能力+专业素养,手把手助你成为前端开发工程师。




10月25日-11月3日,《前端开发工程师》微专业正在进行课程团购活动。预付1元,可在尾款期抵扣200元,有兴趣的同学欢迎戳“阅读原文”了解活动详情~

前端开发 “性能”有多重要相关推荐

  1. 前端开发性能优化-Vue响应式优化

    vue 开发里面数据响应相关优化 在Vue开发中,经常会有加载大量数据的场景,如果按照原本的流程加载,Vue会对data中的数据设置数据响应式,有时候根本不需要进行响应式,仅仅是对其进行展示,这时候就 ...

  2. web前端页面性能优化小结

    一.提倡前端开发工程师在书写xhtml的时候做到结构语义化. 结构中主要包括了head和body两个部分,但是我们经常说的是结构语义化主要是body中的标签,但是我在这里还是简单的说一下head,he ...

  3. 前端开发中的性能那点事

     前端开发中的性能那点事(一)巧用xdebug 前言: 在我们平时的php开发中,一个大的项目经过长时间的积累以后你会发现性能越来越慢,而性能到底消耗在了什么地方,常常是一个令人头疼的问题,funct ...

  4. 【面试】前端面试之开发性能篇

    文章目录 如何优化前端的性能? 什么叫优雅降级和渐进增强? 如何规避JavaScript多人开发函数重名的问题? 请说出三种减低页面加载时间的方法? 你所了解到的Web攻击技术? 前端开发中,如何优化 ...

  5. 超实用web前端开发工具推荐(web开发+前端性能优化+浏览器兼容性测试+……)

    要说有哪些好用的前端开发软件和工具,我可有发言权哈~因为在学习的过程中积累了不少实用型前端开发工具.今天我就从浏览器兼容性测试工具.web开发工具.前端性能优化工具.大数据可视化工具这四个方向来和大家 ...

  6. web前端开发,如何提高页面性能优化?

    web前端开发,如何提高页面性能优化? 内容方面 减少HTTP请求次数 减少DOM操作 减少DNS查询 使用Ajax 可缓存 css方面 把css样式HTML代码页的上端 从页面中分离css代码,从外 ...

  7. 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)

    读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...

  8. 移动端开发者眼中的前端开发流程变迁与前后端分离

    写在最开始 这是一篇面向移动端开发者的科普性文章,从前端开发的最初流程开始,结合示范代码,讨论开发流程的演变过程,希望能覆盖一部分前端开发技术栈,从而对前端开发的相关概念形成初步的认识. 本文会提供一 ...

  9. 大学可以学前端开发_所有开发人员在大学中应该学习的东西

    大学可以学前端开发 忘记"代码行" (Forget About "Lines of Code") Source 资源 As a developer, you'l ...

最新文章

  1. 个人网盘倒下去 企业网盘顶起来
  2. FetchType.LAZY和FetchType.EAGER什么区别
  3. 汇编语言随笔(10)-内中断及实验12(返回到dos的中断处理程序)
  4. 成功解决bash syntax error near unexpected token from
  5. About Gnu Linker2
  6. 使用JavaScript的FormData向SAP ABAP系统发起登录请求
  7. Codeforces Round #643 (Div. 2)(AB)
  8. [react] react与angular、vue有什么区别?
  9. mybatis删除成功返回0_你还在用分页?试试 MyBatis 流式查询,真心强大!
  10. CCF201512-1 数位之和(100分)
  11. Android App Architecture使用详解
  12. literal和meta的意义和用法
  13. android怎么改名字,手把手教你如何修改安卓软件的图标和名字
  14. Oracle ERP 模块
  15. TouchDesigner案例(十)缤纷
  16. DialogFragment的OnDismissListener
  17. MCE | 单胺能 非单胺能对抑郁症的作用
  18. ezuikit-js萤石云
  19. Session注销方式
  20. 第四范式发布「式说」大模型,以生成式AI重构企业软件(AIGS)

热门文章

  1. 谷歌地球怎么用不了_谷歌地球怎么用
  2. 缓存击穿和缓存穿透的区别_后端RoadMap011:缓存穿透、缓存击穿、缓存雪崩区别和解决方案...
  3. 作者:杨波,山东农业大学硕士生。
  4. 秘钥协议及新兴密码学方向【7】
  5. 从初创型到独角兽企业,监控架构演进的那些事儿
  6. 初识vue之axios的封装
  7. CentOS7如何安装vsftpd
  8. 使用linux expect进行ssh和telnet自动化登录等操作
  9. 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式
  10. 由SpringMVC中RequetContextListener说起