我们如何通过 3 项不同寻常的改变将网站性能提高 24%

2025-05-27

我们如何通过 3 项不同寻常的改变将网站性能提高 24%

上周末,我们有机会对一年前建立的网站的性能进行微调。

SwissDevJobs.ch是一个面向在瑞士寻找工作机会的软件开发人员的招聘平台。其表现之所以如此重要,有两个原因

  1. 良好的用户体验——意味着加载时间(变得可交互)和使用网站时的流畅感。

  2. SEO——我们的流量很大程度上依赖于谷歌搜索,而且您可能知道,谷歌青睐性能良好的网站(他们甚至在搜索控制台中引入了速度报告)。

如果您搜索“网站性能基础知识”,您将获得许多可操作的要点,例如:

  • 使用 CDN(内容分发网络)来缓存静态资产,并设置合理的缓存时间
  • 优化图像尺寸和格式
  • 使用 GZIP 或 Brotli 压缩
  • 减少非关键 JS 和 CSS 代码的大小

我们实现了大部分唾手可得的功能。
此外,由于我们的主页本质上是一个可过滤列表(用 React 编写),我们引入了react-window,这样每次只渲染 10 个列表项,而不是 250 个。

所有这些都帮助我们大大提高了性能,但从速度报告来看,我们感觉可以做得更好。

于是,我们开始探索一些更不寻常的方法来提高速度……结果相当成功!以下是本周的报告:

SwissDev Jobs 十一月速度报告

这份报告显示,满载时间减少了24%!

我们做了什么来实现它?

  1. 对 JSON 数据使用 rel="preload"
    JSON rel 预加载

    index.html 文件中的这一行简单代码向浏览器表明,它应该在 JavaScript 的 AJAX/fetch 调用实际请求它之前获取它。

    当需要数据时,它会从浏览器缓存中读取,而不是重新加载。这帮助我们节省了约 0.5 秒的加载时间。

    我们之前就想实现这个功能,但之前 Chrome 浏览器出现了一些问题,导致重复下载。现在看来可以了。

  2. 在服务器端实现超级简单的缓存

    实施 JSON 预加载后,我们发现下载作业列表仍然是瓶颈(从服务器获取响应大约需要 0.8 秒)。因此,我们决定研究服务器端缓存。首先,我们尝试了node-cache,但令人惊讶的是,它并没有改善获取时间。

    值得一提的是,/api/jobs 端点是一个简单的 getAll 端点,因此改进的空间很小。

    然而,我们决定更深入地研究,用一个 JS 变量构建了我们自己的简单缓存。它如下所示:

    JSON rel 预加载

    这里唯一不可见的是删除缓存的 POST /jobs 端点(cachedJobs = undefined)

    就这么简单!又节省了0.4秒的加载时间

  3. 最后,我们查看了加载的 CSS 和 JS 包的大小。我们注意到“font-awesome”包的大小超过了 70kb。

    同时,我们仅使用了大约 20% 的图标。

    我们是怎么做到的?我们使用了 icomoon.io 来选择图标,并创建了我们自己的自托管精简图标包。

    节省了 50kb!

这三项不同寻常的改进帮助我们将网站的加载时间提高了 24%。或者,正如其他一些报告显示的那样,提高了 43%(至 1.2 秒)。

我们对这些变化非常满意。不过,我们相信我们可以做得更好!

如果您有自己的、不寻常的技巧可以提供帮助 - 我们将非常感激您在评论中分享它们!

文章来源:https://dev.to/swissdevjobs/how-we-improved-website-performance-by-24-with-3-unusual-changes-9ei
PREV
30 个 Dev.to 徽章🏅的完整列表以及如何(几乎)全部获得它们 [WIP] 为 DEV 贡献者徽章添加两个里程碑。#4007 DevCommunity
NEXT
[Python🐍精通] Python 中的链表概述和基本链表操作🛠️