使用服务器时序测量网站性能
Server Timing标头提供了一种离散且方便的方式,可以将后端服务器性能计时与浏览器中的开发人员工具进行通信。通过向应用程序添加计时信息,可以在一个位置监控后端和前端性能。
在进行任何类型的性能优化工作时,我们学到的第一件事就是在提高性能之前必须先测量它。如果不能测量某些东西工作的速度,我们无法判断所做的改变是改善性能,没有效果,甚至是使事情变得更糟。
我们中的许多人都熟悉在某种程度上处理性能问题,这可能就像试图弄清楚为什么页面上的JavaScript没有优先开始运行,测试这些方法其实我们已经很常见:浏览器的开发者工具。
多年来,开发人员工具已得到改进,可帮助我们解决应用程序前端的各种性能问题。浏览器现在甚至内置了性能审计。这可以帮助追踪前端问题,但这些审计可能会显示我们无法在浏览器中修复的另一个缓慢的来源,该问题是服务器响应时间较慢。
很少有浏览器优化可以改善在服务器上构建缓慢的页面,该成本是在发出文件请求的浏览器和接收响应之间产生的,在开发人员工具中研究你的网络瀑布图将在“等待(TTFB)”类别下显示此延迟,这是浏览器在发出请求和接收响应之间等待的时间。
在性能方面,服务器开始发送浏览器可以开始使用的内容之前所花费的时间,在等待时间中包含服务器构建页面所需的一切。对于典型站点,可能涉及将请求路由到应用程序的正确部分,对请求进行身份验证,对数据库等后端系统进行多次调用,它可能涉及通过模板系统运行内容,使API调用第三方服务,甚至可能发送电子邮件或调整图像大小,服务器完成请求所做的任何工作都会被压缩到用户在浏览器中遇到的TTFB等待状态。
那么我们如何缩短时间并开始更快地向用户提供页面?在开发中个大问题,答案取决于你的申请,这是性能优化本身的工作。我们首先需要做的是衡量绩效,以便判断任何变化的好处。
服务器计时标头
Server Timing的工作不是帮助你实际在服务器上进行活动,而是需要使用后端平台提供给你的任何工具集来自行完成计时。相反,服务器计时的目的是指定如何将这些测量结果传达给浏览器。
这样做的方式非常简单,对用户透明,对页面重量的影响最小。信息作为一组简单的HTTP响应头发送。
实现服务器时序
你自己的应用程序中的确切实现将取决于你的具体情况,但原则是相同的,步骤始终是:
- 一些操作时间
- 收集时间结果
- 输出HTTP标头
现有实施
考虑到Server Timing的方便性,我们找到的实现相对的较少,但是该服务器定时 NPM包提供了使用服务器定时从节点项目的便捷方式。
如果你使用基于中间件的PHP框架tuupola / server-timing-middleware也提供了一个方便的选项。
对于浏览器支持,我见过的最好的是Chrome DevTools,插件如图中的截图。
注意事项
服务器定时本身为通过线路发回的HTTP响应增加了非常小的开销,标头非常小,通常可以安全发送而不必担心只针对内部用户,即便如此,保持名称和描述的简短也是值得的,这样就不会增加不必要的开销。
更令人担忧的是你可能在服务器上为页面或应用程序计时的额外工作,添加额外的时间和日志记录本身可以对性能产生影响,因此值得实现的可以提供在需要时打开和关闭它的方法。
使用服务器计时标头是确保应用程序的前端和后端的所有计时信息都可在一个位置访问的好方法,如果你的应用程序不是太复杂,它可以很容易实现,你可以在很短的时间内启动并运行。