性能:前端的性能到底对业务数据有多大的影响?

性能是个特别有意思的话题,在我之前的工作中,从入门的初级工程师到高级别的技术专家,大家都很喜欢谈性能,我以前参与晋升评审,每年总能听到很多关于性能的晋升述职

那么,今天我就来谈谈我眼中的性能。

性能总论
while 循环快还是 for 循环快?

|0 是不是比 Math.floor 性能好?

网上随处可以见到一类对性能的讨论。一些新人也非常热衷此类讨论。但是实际上,它们除了让你写代码的时候纠结之外,毫无意义。

为什么这样讲呢?我想讲一个小故事。

从前有个工程师,特别注重代码细节,有一天他发现系统中的一段代码写的性能很差,因此,他用汇编重写了整段代码,执行效率足足提升了三倍。但是最后,大家发现,用户反馈性能丝毫没有提高,因为他优化的那个进程名字叫“System Idle”。

所以你看,性能优化不能只着眼于局部的代码。这里,我要提出一个我的观点:一切没有 profiling 的性能都是耍流氓。凡是真正有价值的性能优化,必定是从端到端的业务场景建立体系来考虑的。

在我的认识中,性能体系的建立可以分成以下几部分:

现状评估和建立指标;
技术方案;
执行;
结果评估和监控。
下面,我就来为你一一讲解。

现状评估和建立指标
要想做好性能优化,正确地评估现状和建立指标是最关键的一步,它又往往是会被轻视的一步。

作为一个工程师,指标又要考虑两个因素。一方面,对用户来说,什么样的性能指标能更好地评估它的体验?另一方面,对公司来说,什么样的指标会影响业务价值呢?

在我公布答案之前,我希望你能思考一下,你所负责的业务,是否有前端性能指标?它是否能够满足我上面提到的两个要求?

在我之前的工作中,整个用了长达一年的时间来探索,才找到了合适的指标,并且回答好了两个问题。

性能问题可以分成很多方面,最重要的几个点是:

页面加载性能;
动画与操作性能;
内存、电量消耗。
注意,这里我们仅仅是对“性能”两个字的分析和解读,在对大量的用户数据分析后,我们发现,其实这三部分中,“页面加载性能”跟用户的流失率有非常强的关联性,而用户流失率,正是公司业务非常看重的指标。

因此,在开始阶段,我们决定把性能优化的重点放在页面加载性能上。

那么,用什么指标来衡量页面加载性能呢?最容易想到的方案是“用户平均加载时间”,事实上,我们在相当长的一段时间,也都是在使用用户平均加载时间作为性能指标。

但是,很快我们发现,这个指标有严重的问题:

当加载时间低于一定数字,用户体感差别不大了,我们经过一定的研究,认为这个数字大约是 1 秒;
少数超长时间加载的用户(如 2G),会极大影响整个指标,即指标不能反映大多数用户的体验。
于是,基于以上分析,我们设计了一个新的指标——秒开率,即一秒之内打开的用户占用户总量的百分比。这个指标后来逐渐推广到整个公司,甚至影响到了一些业内的其它企业,现在,谈秒开率已经是个非常自然的事情了,但是当初的设计确实走了不少弯路。

技术方案
有了指标,我们就有了优化的目标,接下来,就到了技术出场的环节了。

我们这里还是以加载过程为例,来讲解一下。

首先我们要简单分析一下,从输入 URL 后按下回车,到底发生了什么。

我们在浏览器的原理课程中,已经讲解了浏览器大致的工作过程,但是,我们必须理解几件事:

从域名到 IP 地址,需要用 DNS 协议查询;
HTTP 协议是用 TCP 传输的,所以会有 TCP 建立连接过程;
如果使用 HTTPS,还有有 HTTPS 交换证书;
每个网页还有图片等请求。
从这个分析和实际试验的结果看,网页的加载时间,不但跟体积有关系,还跟请求数有很大关系,因此,我们最终设计的技术方案大约可以这样划分:

这里仅仅列出了性能优化的一部分技术方案,是我认为比较重要的部分,可以看到,这里涉及的并不仅仅是前端技术,有服务端、客户端、设计师团队,所以要想做好性能优化,绝对不能把自己限制在局部的视角,必须是整个业务一起考虑,才能有良好的收效。

执行
技术方案设计好了,它是不会自己变成线上页面的,所以,有了技术方案,我们只完成了一半的工作,接下来我们还需要一个执行过程。

执行也不简单,如果说方案主要靠技术,那么执行就是靠工程实施了。

根据公司的实际情况,工程实施可能有不同的程度,我把工程水平从低到高分成三个阶段:

纯管理;
制度化;
自动化。
纯行政管理,是由经理用纯粹的管理手段来执行方案,比如说,作为前端团队的 Leader,我可以组织会议,要求整个团队使用我们前面谈的技术方案。

但是纯行政管理有一些问题,一方面,需要的行政资源不一定有,比如我没法强制让后端团队配合我,另一方面,纯粹的管理方式,团队本身的体验并不好,也不利于团队成长,最重要的是,纯粹管理方式容易造成执行不到位。这样的执行方式多数出现在非技术岗位。

制度化执行方式是用规则代替人的命令,指定责任人,通过培训、checklist、定期 review 等具体措施来保证实施。制度化执行可以极大地减轻管理工作量,一般现代互联网公司都会采用类似的方式。但是制度化执行方式还有很大成分是依靠人的主动性的,对程序员来说,还有更好的方式:自动化。

自动化的方式是在一些重要的操作路径上设置规则,针对我们的性能优化,有两个点适合做这件事:一个是把开发好的页面发布上线,另一个是开发好的页面 URL 投放到首页等处的链接。

在我之前的工作中,我们跟测试团队配合,开发了一套页面性能打分系统,它会自动扫面页面上的可优化点,并且跟发布平台和投放平台合作,把它加入日常机制中。现在多数公司都会采用制度化和自动化结合的执行方案。

结果评估和监控
执行完了之后,就要向老板汇报争取升职加薪了,还要有一定的结果总结,才是一个完整的工程实施,而且,凡是工程实施,肯定要有一定长效机制,不能优化完了退化,这些都要求有线上监控机制。

要想做线上监控,分两个部分:

数据采集;
数据展现。
数据采集部分,同样需要发布平台或者开发工具来配合,对性能数据来说,Performance API 非常好用,它是浏览器记录的性能数据,一般来说,我们用统一的代码把它上传到服务器端就够用了。

数据的展现部分就比较自由了,可以用不同的数据可视化方案来展现性能数据,没有一定之规。一般的数据监控平台,会提供报警机制,对性能来说,报警需求不是特别强烈,但是也可以设置一些条件,针对秒开率特别低的网页报警。

有了监控,再配合一定制度,就可以保障整个团队产出的性能了,要注意,性能不是一个静态的事情,指标需要不断优化,技术方案还需要不断随着技术发展迭代,制度、自动化工具也需要不断改进,最终的监控平台产品也不能不做新需求,所以性能应该成为一个团队的日常工作的一部分,持续进行。

摘自--极客时间《重学前端》

极客时间版权所有: https://time.geekbang.org/column/article/94156

原文地址:https://www.cnblogs.com/zhilin/p/11057783.html

时间: 2024-11-09 02:50:11

性能:前端的性能到底对业务数据有多大的影响?的相关文章

新产品为了效果,做的比较炫,用了很多的图片和JS,所以前端的性能是很大的问题,分篇记录前端性能优化的一些小经验。

第一篇:HTTP服务器 因tomcat处理静态资源的速度比较慢,所以首先想到的就是把所有静态资源(JS,CSS,image,swf) 提到单独的服务器,用更加快速的HTTP服务器,这里选择了nginx了,nginx相比apache,更加轻量级, 配置更加简单,而且nginx不仅仅是高性能的HTTP服务器,还是高性能的反向代理服务器. 目前很多大型网站都使用了nginx,新浪.网易.QQ等都使用了nginx,说明nginx的稳定性和性能还是非常不错的. 1. nginx 安装(linux) htt

SQL Server性能调优——报表数据库与业务数据库分离

前段时间把公司的主数据库切了,分成业务库和报表库,业务库向报表库进行实时的Replication.这个项目的上线提升了系统的性能和可维护性,现在把设计时的考量和所做的工作重新回顾一下,作为备忘. 项目起源 在日常的开发过程中,功能总是先于性能被考虑.只有当用户抱怨系统性能时,我们才开始头痛医头,脚痛医脚地来解决这些性能问题. 公司的CRM和ERP系统叫作Olite,完全是我们组开发的.从无到有,功能不断扩展,原先只有CRM模块,后来加入了ERP模块,Accounting功能和Report功能.近

Spark记录-Spark性能优化(开发、资源、数据、shuffle)

开发调优篇 原则一:避免创建重复的RDD 通常来说,我们在开发一个Spark作业时,首先是基于某个数据源(比如Hive表或HDFS文件)创建一个初始的RDD:接着对这个RDD执行某个算子操作,然后得到下一个RDD:以此类推,循环往复,直到计算出最终我们需要的结果.在这个过程中,多个RDD会通过不同的算子操作(比如map.reduce等)串起来,这个"RDD串",就是RDD lineage,也就是"RDD的血缘关系链". 我们在开发过程中要注意:对于同一份数据,只应该

web前端页面性能优化小结

转自blueidear:http://bbs.blueidea.com/thread-2936073-1-1.html PS:结合了精英的思想和自己的一些小小的总结~ 影响用户访问的最大部分是前端的页面.网站的划分一般为二:前端和后台.我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为文章发表评论等等.而前端呢?其实应该是属于功能的表现. 而我们建设网站的目的是什么呢?不就是为了让目标人群来访问吗?所以我们可以理解成前端才是真正和用户接触的. 除了后台需要在性能上做优化外,

web 前端页面性能优化总结

影响用户访问的最大部分是前端的页面.网站的划分一般为二:前端和后台.我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为文章发表评论等等.而前端呢?其实应该是属于功能的表现. 而我们建设网站的目的是什么呢?不就是为了让目标人群来访问吗?所以我们可以理解成前端才是真正和用户接触的. 除了后台需要在性能上做优化外,其实前端的页面更需要在性能优化上下功夫,只有这样才能给我们的用户带来更好的用户体验.不仅仅如此,如果前端优化 得好,他不仅可以为企业节约成本,他还能给用户带来更多的用户

PerfMap – 显示前端网站性能的热力图插件

PerfMap 是用来分析前端性能,基于资源定时 API 生成网页资源加载的前端性能热图.热图的颜色和第一个毫秒值指示在什么时候页面的图像加载完毕,这是用户体验的一个很好的指标.括号中的第二个值是浏览器加载特定图像的时间. Github主页     插件下载 您可能感兴趣的相关文章 Web 开发中很实用的10个效果[源码下载] 精心挑选的优秀jQuery Ajax分页插件和教程 12个让人惊叹的的创意的 404 错误页面设计 让网站动起来!12款优秀的 jQuery 动画插件 十分惊艳的8个 H

优化前端网页性能

综合来看,优化前端网页性能有以下几种方式: 网页内容.服务器.图片.cookie.css/js文件处理等方式. 1.网页内容: 通过减少http请求,减少DNS查询,延时加载不急切需要的内容,提前加载将要需要的内容,不要404页面,不用iframe等方式. 减少http请求次数:将文件捆绑打包,将图片合并. 减少DNS 查询:本地上可以清除DNS记录,但是这只能让本地浏览速度加快,服务器上怎么设置呢? 2.服务器: 通过设置服务器使得提高网页性能的方式并不是很熟练.主要有以下等方式:  CDN.

【前端进阶-性能-性能优化检查点】

前端主要性能优化点 Accept-Encoding:gzip 进行资源压缩 gzip压缩方式浏览器支持情况: Netscape 6+ (Netscape 4-5 does, but with some bugs). Internet Explorer 5.5+ (July 2000) and IE 4 if set to HTTP/1.1. Opera 5+ (June 2000) Lynx 2.6+ (some time before 1999) Firefox 0.9.5+ (October

C++应用程序性能优化(四)——C++常用数据结构性能分析

C++应用程序性能优化(四)--C++常用数据结构性能分析 本文将根据各种实用操作(遍历.插入.删除.排序.查找)并结合实例对常用数据结构进行性能分析. 一.常用数据结构简介 1.数组 数组是最常用的一种线性表,对于静态的或者预先能确定大小的数据集合,采用数组进行存储是最佳选择.数组的优点一是查找方便,利用下标即可立即定位到所需的数据节点:二是添加或删除元素时不会产生内存碎片:三是不需要考虑数据节点指针的存储.然而,数组作为一种静态数据结构,存在内存使用率低.可扩展性差的缺点.无论数组中实际有多