惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
小众软件
小众软件
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
Recent Announcements
Recent Announcements
博客园 - 三生石上(FineUI控件)
博客园_首页
N
Netflix TechBlog - Medium
IT之家
IT之家
H
Help Net Security
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
罗磊的独立博客
T
Tailwind CSS Blog
F
Fortinet All Blogs
Hugging Face - Blog
Hugging Face - Blog
MongoDB | Blog
MongoDB | Blog
V
V2EX
量子位
云风的 BLOG
云风的 BLOG
爱范儿
爱范儿
博客园 - 司徒正美
The Cloudflare Blog
Engineering at Meta
Engineering at Meta

蚊子的前端博客

微说 | 有的人觉得只要不考XX,一定能考好!-蚊子的前端博客 微说 | 春天来了-蚊子的前端博客 明天和意外不知道哪个先来-蚊子的前端博客 微说 | 既然错过了路口,就及时止损,重新规划路线上路-蚊子的前端博客 微说 | 2025年的出生人口数是792万-蚊子的前端博客 微说 | 工作年终总结,让写对接的接口的数量?-蚊子的前端博客 微说 | 温家宝:没有政治体制改革的成功 经济体制改革不可能进行到底-蚊子的前端博客 微说 | 违法犯罪了该不该被禁言?-蚊子的前端博客 微说 | 不明白为什么在推荐去俄罗斯旅游-蚊子的前端博客 微说 | 易中天论骗子-蚊子的前端博客 微说 | 一场大风吹散了秋天-蚊子的前端博客 微说 | 既要、又要、还要、更要!-蚊子的前端博客 又是一年的国庆雨季-蚊子的前端博客 微说 | 预估下2025年的出生人口数据-蚊子的前端博客 微说 | 可惜了我那些小时候的书本-蚊子的前端博客 微说 | 牛马有的是,驴不够了!-蚊子的前端博客 微说 | 能否有一条非户口也能高考的路-蚊子的前端博客 微说 | 小聊中医-蚊子的前端博客 微说 | 将要制作的一款新产品-蚊子的前端博客 微说 | 做人要有信-蚊子的前端博客 微说 | 好一个正义联盟-蚊子的前端博客 微说 | 都是见过吃过的主儿-蚊子的前端博客 微说 | 追求8小时工作制有错吗?-蚊子的前端博客 微说 | 如果尖锐的批评完全消失-蚊子的前端博客 微说 | 很好!-蚊子的前端博客 微说 | 封禁用户可以,但要告知具体原因-蚊子的前端博客 微说 | 面朝大海,春暖花开-蚊子的前端博客 微说 | 程序员的悲哀是什么?-蚊子的前端博客 微说 | 2025年出生人口的预测-蚊子的前端博客 前端在 LiveKit 中如何获取所有的参与者-蚊子的前端博客
工具链极度内卷,留给开发者的性能优化手段已经不多了-蚊子的...
author · 2024-10-13 · via 蚊子的前端博客

随着各种工具链的完善,用户硬件设备和带宽的提升,之前的一些性能问题也不再是问题,而且很多优化工作,脚手架工具链等都已经帮我们做好了,开发者只需聚焦在业务层面即可。

每当答辩或者面试时,聊到性能优化时,很多人包括我在内,都不知道该说些什么,这些优化工作都让脚手架底层和框架本身做完了。除非一些特定的业务场景,可能会用到特殊的优化手段。

我很满意

大概在 10 几年前,IE6、IE7 等还大行其道,各个浏览器的标准还不统一,工具链和脚手架也不像现在这么丰富。为了给用户提供更好体验,前端开发者在性能优化上做了很多工作,包括但不限于:

  1. 雪碧图:将各种小图拼成一个大图,减少 HTTP 请求次数,提升加载速度;
  2. 图片懒加载:监听页面滚动事件,判断图片是否可见再进行加载;
  3. 压缩静态资源:通过压缩和合并静态资源,减少请求体积;
  4. 减少重绘和重排:重排和重绘是浏览器中相对比较耗时的动作,应尽可能减少这些操作,不过现在似乎很少关注这个了;
  5. 事件委托:将多个子元素的事件,统一挂载到父级元素上;
  6. CSS 放前面,JavaScript 放后面;

看到这些优化措施,是不是感到很亲切。不过很多工作脚手架都帮我们做好了。比如小图会自动编译为 Base64;想要首屏速度,可以使用 Next.js 或 Nuxt.js 等服务端渲染框架;脚手架配置麻烦?从 grunt 到 gulp,然后再到 rollup 和 webpack,现在又有了 vite 和 Turbopack。有些工具编译起来太慢,再用 Rust 重写一次。

想要拆分代码?React 和 webpack 已经帮忙做了;想图片懒加载,但监听滚动事件不好判断?好,给到getBoundingClientRect()IntersectionObserver();事件挂载太多?React 框架中的事件本身就挂载在根节点上。等等。

这辈子算完了

同时,服务端领域也不甘寂寞,相继出现了 Node.js、Deno 和 Bun。有的号称天然支持 typescript,有的声明自己是一体式解决方案、编译快;有的是起步早、生态好。

各个工具和类库,也都在互相吸引对方的优点,尽可能地提升自己的优势,帮助开发者更好、更快地完成工作。

可是自己作为开发者,总是想做出点啥性能优化的措施呀,要不然答辩和面试不好回答呀。说前面的那些?工具链和框架已经帮忙做好了,而且也有比较成熟的解决方案了,即便用上解决了问题,总感觉还是差点意思,不像是自己的功劳。那还能说点啥呢?

大致是从两个方面开始思考:

  1. 虽然现在市面上也有不少类似的框架,但我实现的某一点上,他们就没有,或者即便他们这些框架有,性能和可用性上也比不过我的;
  2. 特定场景里的需求:大部分框架都是普遍性的,那我特定场景里的需求,他们肯定没有实现;我就基于我这个独有的场景实现一些措施;

第 2 种情形通常都有场景壁垒,只有在指定的运行环境或者指定的业务中,才可能会出现一些优化措施。正因为没有普适性,才能做出一些意想不到的性能优化措施。

今天最帅的就是你

工具链做得更好、更多,运行起来更快,本身是为了给开发者更好地使用体验。但相对地,留给开发者的性能优化手段已经不多了。而单纯地讲业务,又体现不出自身技术的深度。开发者就得需要寻找其他方面来体现自己了。