前端晋升答辩-性能优化篇范式

本文力争为你参加晋升答辩时,提供一个论述性能优化相关工作的范式。简单点儿来说,就是按照这个范式文来准备、阐述,就可以博得晋升评委的认可与喜爱。

痴迷写页面UI的前端千篇一律,懂得量化收益的前端万里挑一。

现在已经不是刀耕火种的前端原始时代了,能够高保真实现页面UI是每一个前端的基本技能,“没有功劳还有苦劳”这句话也不再适用于前端晋升了。你辛苦的工作可能会看在直属leader的眼里,知道你为了业务天天熬夜加班,会让你年终绩效更好一些,但是在晋升答辩中,尤其是高职级同学的晋升,基本都是跨部门、或通道评委评审的,他们是不会认为这些重复性劳动、像流水线一样的工作有什么重要价值。

如何让他们在短短时间内认识到你的工作价值呢,这是你在晋升之前要思考的问题!

为啥要选性能优化这一点来做范式呢,因为这个听着高大上,每个前端同学晋升时都想提、都会提,但是经常看到很多同学答辩时因为这个反而被刷了下来。很多同学想不明白的是,明明我这个工作已经做了,页面效果也很OK,leader和用户都有正向反馈了,但为啥还在这里栽跟头呢?

核心点 - 如何量化自己的工作,量化收益,让工作看得见看的明白

以下会以五个方面来完整的描述你在性能优化方面所做的辛苦付出,体现出你的成果价值与思考。

一、需求来源

首先要想明白,有些需求是被安排的,有些需求是需要主动出击的,这牵扯到一个主观能动性和个人推动协调能力。

就性能优化而言,可能是用户反馈体验卡顿,产品或老板给安排过来。也可以是你细致观察监控数据,认识到性能有提升空间,然后将问题和解决方案摆到老板面前。

在晋升答辩时,一定要把你主动发现问题,提出解决方案,推动PM确定为需求,排期、研发上线这个过程阐述出来。 谁推动,谁就是这个需求的最大受益者。

二、指标数据与标准锚定

 

kotlin

复制代码

if (没有历史指标数据) { return false; // 后面的工作将无任何意义! }

如果你在做性能优化之前,没有历史指标数据,那么请你立刻停止性能优化工作。调转头来,现将现有相关性能指标数据收集起来。

当一个实验组没有对照组,这个实验也没有了存在的意义。如果你的性能优化工作没有明确的可参考数据,可确定的标准,请你不要做!做了也没有任何收益!因为没有办法体现出来!

选定业务场景

在做页面性能优化时,不要把目光窄窄的聚焦于首页加载性能优化,更多的可以是根据实际业务场景,选择一个核心业务页面,影响用户的关键性节点,比如在可视化系统中看板页面(展示各种数据图表)、电商系统中的商品搜索、支付环节、信息推送中的feed流等等。

有业务场景,做优化才有意义。

历史指标数据收集:

选择收集历史指标数据是为了与进行性能优化后的的数据进行对比的,所以我们一定要选择一种权威性的方式来收集这些数据。

  1. 首推公司内部性能监控平台

    公司内部统一的,所有数据指标的定义、收集、口径都是统一的,当一项数据耗时3s,降低到2s,所有公司内部的人都是必需得承认,这个优化是有效的。

  2. 自行从Lighthouse和Performance检测到的性能数据

    当我们从Lighthouse或者Performance中去收集数据时,可能会因为本身电脑原因,或是样本数据量比较小,不能形成有效的数据支撑。

  3. 第三方性能测试网站如Pingdom、SpeedTracker等。

    因为“墙”的原因,一些国外的网站,我们在进行测试时,数据不准确,而且自行测试时,样本量数据小。

    某些业务数据因敏感性,不能传递到公司外部,这些都是要进行考量的。

所以说,有条件的一定要使用性能监控平台,次之选择Lighthouse/Performance,再次之选择一些第三方性能测试网站。

性能优化指标:

性能优化指标分为两种:一种是前端常见核心性能指标,一种是业务自定义指标

前端常见核心性能指标:

指标名称全称描述
FPFirst Paint浏览器第一次绘制时间,第一个像素时间
TTITime To Interactive页面渲染完毕,可以响应用户输入的时间
FIDFirst Input Delay用户与页面输入框等控件第一次可交互的时间
LCPLargest Contentful Paint最大内容绘制时间
FMPFirst Meaningful Paint首次有意义的绘制,页面主要内容出现在屏幕的时间
FCPFirst Contentful Paint浏览器第一次屏幕绘制内容时间
CLSCumulative Layout Shift累计布局版式位移,页面抖动,屏闪

自定义指标:根据实际业务需要,自定上报统计的关键业务节点时间,比如一个图表从数据请求到绘制绘制完成的时间。

标准锚定:

在现有历史性能指标数据的基础上,遵循行业内优秀性能数据表现,或从实际业务出发,确定什么样的耗时是符合标准的,什么是优秀的。

这个标准必需要提前确定下来,达成一致。这样在做性能优化时就有了参考点,知道往哪个目标方向走是正确的。

三、收益预期

性能优化是一件非常讲究ROI(投资回报率)的事情,在这里你一定要向你的老板画饼,表达出做这样工作耗时短,收益高,在用户体验这块儿有很大的飞跃。

没有ROI的,可做可不做的事情,就一定不要做。

你不能说给我2个月的时间,我可以把现在页面加载耗时10s降低到1s,先不说你1s能不能做到,就单2个月这个时间老板基本就不会同意了。

在这里一定要产出一个明确的目标数值,比如我们要把这个指标从10s降到5s,性能提升一倍。这个也是为了将来做收益对比的。

这里还有一个套路就是,给出一个保守的目标值,然后做成之后会突破这个值,对于老板来说也是个惊喜。

温馨提示:吹牛有风险,装B需谨慎!自己心里一定要有谱,把性能耗时从2s降低到1s,远远要比从10s降低到5s困难的多得多。

四、性能优化策略

性能优化的策略有很多种,要根据自己的实际业务需求对症下药。常规的一些如懒加载、分包策略、滚动加载、上Http2、Gzip压缩等等,这里不是文章的重点,不做过多描述。

在答辩时,这块儿据实而说即可。

五、量化收益

重点来了!!!在进行性能优化后,一定要再次进行指标数据观测、统计,做好收尾工作。没有这一步,前面的工作也是白做了。

辛苦付出,一顿操作,究竟数据是不是达到了预期呢?

如果有性能监控平台,这事儿就特别好办,查看下对应的日、周、月维度的数据,观察相应的耗时曲线是否降低。

在答辩时,一定要提供一些图表,至少是表格的数据,将前后收集的关键性指标数据进行对比,凸显所做出的的效果,让评委直观的看到数据的变化,一眼就感受到你所做的性能优化是非常好的。

如果某个重量级领导也肯定了你的该项成绩,记得一定要在答辩时以或直白或委婉的形式想评委们透露出来,哪加分,不要不要的~

综述

本文的重点在于为你提供一个晋升答辩时,向评委论述性能优化的范式,不是具体的性能优化策略实施。

通过五个环节的梳理,展示,评委会在短时间内非常系统、非常具象的看到你在性能优化方面做出的成果与价值,也会看到你的技术视野与思考。

如果你是打算在今年年底晋升答辩,现在已经可以着手做了,统计历史指标数据,确定优化目标、预期收益,性能优化策略研发上线,量化收益结果。

同时非常欢迎大家评论、分享自己的晋升经历和经验,为前端小伙伴谋福利。

量化自己的工作,量化收益,让工作看得见看的明白

作者:胡哥有话说
链接:https://juejin.cn/post/7126986286367244324
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。+

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++--list简单实现

1.什么是list list是CSTL容器中的一部分,list是带头双向链表,list的作用是它可以存储数据,头删尾删的时间复杂度为O(1),但不支持随机访问。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前…

vue2与vue3—引入echarts以及使用

安装echarts npm install echarts --save vue2中的引入与使用 main.js中 import { createApp } from vue import * as echarts from echarts //主要代码 import App from ./App.vue const app createApp(App) app.mount(#app) vue组件中 <div id"myChart"…

微信小程序音乐播放功能代码

咱就是话不多说直接上代码&#xff0c;不让亲戚老爷们苦等。 首先&#xff0c;在你的小程序页面的js文件中&#xff0c;定义音乐播放相关的数据和方法&#xff1a; Page({data: {isPlaying: false,audioContext: null},onLoad: function () {// 创建音频上下文this.setData({au…

Hadoop——大数据生态体系详解

一.大数据概论 1.1 大数据概念 大数据&#xff08;big data&#xff09;&#xff1a;指无法在一定时间范围内用常规软件工具进行捕捉、管理 和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程 优化能力的海量、高增长率和多样化的信息资产…

【无标题】使用html2canvas和jspdf生成的pdf在不同大小的屏幕下文字大小不一样

问题&#xff1a;使用html2canvas和jspdf生成的pdf在不同大小的屏幕下文字大小不一样&#xff0c;在mac下&#xff0c;一切正常&#xff0c;看起来很舒服&#xff0c;但是当我把页面放在扩展屏幕下&#xff08;27寸&#xff09;&#xff0c;再生成一个pdf&#xff0c;虽然排版一…

ARM Coresight 系列文章 8 - ARM Coresight 通过 APBIC 级联使用

文章目录 APBIC 回顾APBIC 级联 上篇文章&#xff1a;ARM Coresight 系列文章 7 - ARM Coresight 通过 AHB-AP 访问 异构 cpu 内部 coresight 组件 APBIC 回顾 APBIC 可以连接一个或者多个APB BUS masters&#xff0c; 例如连接一个 APB-AP 组件和带有 APB 接口的 Processor&…

js几种打印方法的几种方法

方法一&#xff1a;使用printJs库实现打印功能 1. 引入插件&#xff1a; 首先&#xff0c;在您的 HTML 文件中引入printJs库。可以通过在<head>标签中添加以下代码来引入库文件&#xff1a; <script src"https://printjs-4de6.kxcdn.com/print.min.js"&g…

【C++】STL——vector的使用、 vector增删查改函数的介绍和使用、push_back和pop_back、operator[]

文章目录 1.vector的使用2.vector的增删查改&#xff08;1&#xff09;push_back 尾插&#xff08;2&#xff09;pop_back 尾删&#xff08;3&#xff09;find 查找&#xff08;4&#xff09;insert 在position之前插入val &#xff08;5&#xff09;erase 删除指定位置的数据&…

【云原生】Kubernetes工作负载-Deployment

Deployments 一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力 你负责描述 Deployment 中的目标状态&#xff0c;而 Deployment 控制器&#xff08;Controller&#xff09; 以受控速率更改实际状态&#xff0c; 使其变为期望状态。你可以定义 Deployment 以创建新…

李飞飞计算机视觉k-Nearest Neighbor

1.思路 给计算机很多数据&#xff0c;然后实现学习算法&#xff0c;让计算机学习到每个类的外形 输入&#xff1a;输入是包含N个图像的集合&#xff0c;每个图像的标签是K种分类标签中的一种。这个集合称为训练集。 学习&#xff1a;这一步的任务是使用训练集来学习每个类到底…

手搓GPT系列之 - 通过理解LSTM的反向传播过程,理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式,配超多图帮助理解(中篇)

近期因俗事缠身&#xff0c;《通过理解LSTM的反向传播过程&#xff0c;理解LSTM解决梯度消失的原理 - 逐条解释LSTM创始论文全部推导公式&#xff0c;配超多图帮助理解》的中下篇鸽了实在太久有些不好意思了。为了避免烂尾&#xff0c;还是抽时间补上&#xff08;上篇在此&…

带你用Python制作7个程序,让你感受到端午节的快乐

名字:阿玥的小东东 学习:Python、C/C++ 主页链接:阿玥的小东东的博客_CSDN博客-python&&c++高级知识,过年必备,C/C++知识讲解领域博主 目录 前言 程序1:制作粽子

Redis与其他数据库和缓存服务器的区别

名称类型数据类型查询类型附加功能Redis使用内存存储的非关系型数据库字符串、列表、集合、散列表、有序集合每种数据类型都有自己的专属命令&#xff0c;另外还有批量操作&#xff08;bulk operation&#xff09;和不完全&#xff08;partial&#xff09;的事务支持发布与订阅…

dede会员中心投稿编辑器修改成纯文字投稿方式

在我们后台发布文章的时候往往需要加入HTML或css以及php等语言的代码&#xff0c;若是单独发的话&#xff0c;没有颜色的区分&#xff0c;并且人看观看的效果也不是很好&#xff0c;所以需要实现后台能编辑语言代码的&#xff0c;之前我们处理了织梦后台的编辑器&#xff0c;现…

Spring Boot进阶(57):Spring中什么时候不要用@Autowired注入 | 超级详细,建议收藏

1. 前言&#x1f525; 注解Autowired&#xff0c;相信对于我们Java开发者而言并不陌生吧&#xff0c;在SpringBoot或SpringCloud框架中使用那是非常的广泛。但是当我们使用IDEA编辑器开发代码的时候&#xff0c;经常会发现Autowired 注解下面提示小黄线警告&#xff0c;我们把小…

【多线程】(五)工厂模式和线程池

文章目录 一、工厂模式二、线程池2.1 什么是线程池2.2 Executor 工厂类创建线程池2.3 ThreadPoolExecutor类创建线程池 三、线程池的实现 一、工厂模式 在Java中&#xff0c;工厂模式是一种创建对象的设计模式&#xff0c;它通过提供一个共同的接口来实例化对象&#xff0c;而…

Redis【实战篇】---- 分布式锁

Redis【实战篇】---- 分布式锁 1. 基本原理和实现方式对比2. Redis分布式锁的实现核心思路3. 实现分布式锁版本一4. Redis分布式锁误删情况说明5. 解决Redis分布式锁误删问题6. 分布式锁的原子性问题7. Lua脚本解决多条命令原子性问题8. 利用Java代码调试Lua脚本改造分布式锁 1…

css背景毛玻璃效果

一、结论&#xff1a;通过 css 的 backdrop-filter 属性设置滤镜函数 blur 一般会是有 背景色、透明度 的容器&#xff0c;如&#xff1a; /* 宽高等其他设置这里省略没写 */ background:rgba(3, 87, 255, 0.3); backdrop-filter: blur(10px);二、backdrop-filter 的其他用法…

Mysql教程(四):DML学习

Mysql教程&#xff08;四&#xff09;&#xff1a;DML学习 前言 DML-介绍 DML英文全称是Data Manipulation Language数据库操作语言&#xff0c;用来对数据库中表的数据记录进行增删改查。 添加数据&#xff08;INSERT&#xff09;修改数据&#xff08;UPDATE&#xff09;删除…

走访慰问空巢老人,连接传递浓浓温情

为了弘扬中华民族尊老、敬老、爱老的优良传统&#xff0c;让老人们感受到政府和社会的温暖&#xff0c;在“端午”来临之际&#xff0c;思南县青年志愿者协会联合思南县民慈社会工作服务中心、思南县小荧星幼儿园、思南县小英豪幼儿园到大河坝镇天坝村开展“走访慰问空巢老人&a…