在现代 Web 开发中,网站性能优化扮演着至关重要的角色。因为高性能的网站可以提高用户的体验并达到更好的转化率。而如何保证性能,测试性能,以及优化网站的性能是每个前端工程师必须掌握的技能。本文将为大家分享一些有关 Benchmark 性能测试与优化实践的经验和技巧。
什么是 Benchmark?
Benchmark 是指对计算机或系统的性能进行评测的过程。在 Web 前端开发中,Benchmark 技术通常应用于浏览器及 JavaScript 引擎的性能测试。
性能测试的分类
在开始性能测试前首先需要了解性能测试的分类:
延迟测试(Latency Testing):是指测试请求到达服务器的时间(通常使用 Ping 或 Traceroute 测试),以及在客户端发送请求后接收到服务器返回的数据所需的时间。
负载测试(Load Testing):是指在为一定数量的同时在线用户提供服务时,测试服务器能够承载的负荷。
压力测试(Stress Testing):在测试负载对其极限时服务器的表现。
性能测试(Performance Testing):是指对服务器的响应时间、吞吐量、并发数等性能指标进行测试。
在本文我们主要关注性能测试和优化。
性能测试的意义
为了使网站达到更好的性能,性能测试是必不可少的一个过程。最简单的方法是使用浏览器的开发者工具,监控页面的资源加载、渲染和 JavaScript 执行的时间,并通过这些数据进行分析。
但是,如果你需要向管理层或客户展示网站的性能指标,那么就需要进行更具体、更深入的性能测试,以便更好地了解网站的性能瓶颈,进而采取最佳的优化方法。
性能测试的工具
Google PageSpeed Insights: 这是一个由 Google 推出的免费在线工具,它可以分析你的页面,并提供一份详尽的报告,展示你网站的性能瓶颈。
WebPageTest: 这个工具可以进行跨浏览器的测试,并提供时间线的展示和一些有关脚本的统计数据。
YSlow: 这是一个浏览器插件,它可以提供有关响应时间、缓存控制、涉及 DOM 的操作等方面的建议。
Google Chrome 浏览器开发者工具:这个工具随着 Chrome 浏览器一起发布,它的网络面板可以很方便地提供一些性能测试工具,如页面 加载时间、页面大小、资源加载时间、渲染时间等。
性能测试的指标
在性能测试时,通过测试以下指标来评估网站的性能:
网页加载时间: 它是指页面加载所需的时间,它是浏览器从开始发出请求到页面完全加载完成的时间之和。
首页加载时间: 是指浏览器从开始发出请求到显示主页的时间。
DNS 延迟: 是指请求服务器时,要花费多长时间才能查找对应的 IP 地址。
TTFB(Time to First Byte): 它是指从请求开始到服务器响应首字节的时间。
Render Start: 是指浏览器开始处理 DOM 时必须等待的时间。
Time to Interactive: 是指页面可交互的时间。
Load Time: 是指基准测试结束时,浏览器加载所有内容的时间。
性能优化
性能优化是一个持续改进的过程,下面列出一些优化技巧:
1. 压缩你的代码及静态资源
将你的代码压缩,可以减少页面大小的同时可以加快资源加载。 可以使用诸如 gzip 这样的工具对 JavaScript、CSS 和 HTML 文件进行压缩,以便在客户端传输时更快速地传输。
2. 在必要时延迟加载 JavaScript 文件
在某些情况下,将所有 JavaScript 文件放在页面的头部可能会影响页面加载性能,因为这些文件需要在加载页面时同时加载。一个更好的解决方案是将脚本分为两组,一组在页面加载时立即需要,另一组可以延迟加载。这可以避免加载无用的 JavaScript,并提高页面的加载速度。
--------- ----- ------ ------ ------- ----------------------- ------- ----- ----------------------- ---- ------- -- -- ------- ----- --------- --- ------- --- -------
3. 减少 HTTP 请求
每个 Web 页的页面复杂性和资源数量随着时间的推移而增加。仅仅通过减少 HTTP 请求来优化单个页面,你就可以获得巨大的性能提升。可以使用工具合并所有 JavaScript 和 CSS 文件,或在 HTML 代码中使用 Base64 编码的字体、图片等静态资源。
4. 使用缓存技术
对于浏览器中的静态资源,可以使用缓存技术来避免从服务器上多次重复加载。通过设置响应头中的 Expires 或 Cache-Control 属性,可以让浏览器缓存静态资源,使得静态资源的请求可以从浏览器缓存中拿取而不是请求服务器。
5. 使用 CSS 精灵
CSS 精灵是将所有网页中的图像合并到一个图像文件中的技术,从而减少请求。它可以极大地优化网页的加载时间和性能,因为它可以减少图片的 HTTP 请求和减少带宽占用。
6. 最小化所使用的 JavaScript 插件和框架
如果你的网站使用了太多的 JavaScript 插件和框架,可能会影响网站的性能。因此,需要避免使用不常用的插件、库和框架,以免浪费带宽、资源时间和内存。
7. 使用浏览器缓存转移
可以使用 Service Worker API 来缓存页面和资源。该 API 允许页面脱离浏览器,通过 JavaScript 控制作为独立的容器运行。因此,即使不再有网络连接,该页面也可以提供在线服务。
性能测试案例
以下是一个简单的性能测试示例供参考,其中使用了 Benchmark.js 和 Numbers.js。
----- --------- - --------------------- ----- ------- - ------------------- ----- --- - ---------------------------------- - ---- -- ---- ---- --- ----- ---------- - -- -- - ----------- -- ----- --------- - -- -- - ----------------------- -- ----- ----- - - - ----- ----------- -------- ----- ---------- -- - ----- ------- ----- --------- -- -- ----- ------------ - -- -- - ----- ----- - --- ------------------ ------------------ -- - -------------------- ----------- --- ----- ------------ -- -- -------------------- ------------ ----- -- ---------------------------------- --------------- -- -- -------------------- ------- -- ---------------
这个例子将使用随机数填充长度为 1000
的数组,然后测试原生排序算法和归并排序算法之间的性能差异。
性能测试结论
在性能测试过程中,应该遵守下面的最佳实践:
- 拥有足够的代表性的样本;
- 确定指标和标准;
- 确定发现的问题所在,并解决它们。
慢网站会使用户体验降低,并且会对业界声誉产生负面影响。通过正确代码编写、底层架构选择和性能测试,即可优化性能。要注意的是,性能优化是类似于打错单词一样容易出错的过程。因此,在优化前请仔细考虑预算、需求和目标,并始终遵循最佳实践。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670f5f1c5f5512810263f149