Gerry McGovern 询问我是否对能源消耗和网站有任何见解。毕竟,他有一本书 讲述了数字对地球造成的成本。他想知道网络技术的具体情况,比如……
如果你在 HTML 中这样做,它将消耗 3 倍的能量,但如果你在 JavaScript 中这样做,它将消耗 10 倍的能量。
我认为,如果你真的去研究,并且知道如何精确测量,你就能找到这样的例子。假设我想在屏幕上移动一个元素。如果我在 JavaScript 中编写了一个 setInterval
循环,它以每毫秒递增相对定位元素的 left
位置,我 99% 确定这比使用 CSS @keyframes
动画在相同时间内更改 transform: translateX()
值更耗电。在这个例子中,我们通常更关注性能而不是能耗,但这立刻就很有趣:**良好的性能是否与更低的能耗相关?** 可能是的。
我们发现性能分数与移动 Web 应用的能耗之间存在统计学意义上的负相关关系(中等至大的效应量),这意味着性能分数的提高往往会导致能耗的降低。
他们在 Android 上使用 Lighthouse 分数测试移动 Web 应用。我猜想这与其他平台和其他性能指标非常吻合。
我很高兴迄今为止的研究结果与我逻辑上预期的一致。导致性能不佳的事物往往也会消耗能量。想象一下图片。如果服务了过大或未优化的图片,你的性能分数将会受到影响。想象一下这样做的性能影响。服务器上放着两张图片,一张大,一张小。哪一张传输到某个用户的电脑需要消耗更多的电能?大图。哪一张需要更多的处理能力来解析和显示?大图。哪一张在屏幕上显示期间占用更多的内存(也消耗电能)?大图。
网络传输越少,耗电越少。
浏览器需要处理的工作越少,耗电越少。
一些每隔几秒自动刷新的广告?它不仅令人讨厌,而且浪费带宽,从而浪费电能。无论何时你不得不使用轮询(即重复发出网络请求)而不是基于事件的方法,比如 WebSockets?这都在使用你可能不需要使用的电能。
我们知道 CDN 也对性能有益。文件(比如图片)不必跨越世界传输,而是来自地理位置更接近的服务器,该服务器专为此任务而设计。这方面对我来说变得有点模糊。
以性能为目标:目标达成。以低能耗为目标,我们达成了吗?
它已经被研究过,但不幸的是,我无法仅从摘要中得知结论。在我看来,世界各地的服务器都存储着这些资源的副本,当资源发生变化时,并非只有一个服务器更新,而是世界各地的服务器都会更新,这一点使问题变得复杂。在节省请求效率带来的节省方面,必须在传播和重复存储之间找到平衡。
说到存储效率,我确信存储在磁盘上的数据比通过网络发送的文件消耗的电能少得多——但它仍然有成本。假设你每次更改文件时都保存一个副本。假设你每次部署网站时都保存一个完整副本。有用吗?当然。这会消耗电能吗?一定会的。这里面一定需要找到某种平衡。
Gerry 询问我有关特定技术的问题。我能想到 CSS 领域中另一件大事:深色模式!同样,它已经被研究过。深色模式可以节省电能。
深色模式确实可以将显示屏的功耗降低多达 58.5%,在我们测试的流行 Android 应用集中,这是在最大亮度下的效果!就整个手机电池续航时间减少而言,这意味着在最大亮度下可以节省 5.6% 到 44.7%,在 38% 亮度下可以节省 1.8% 到 23.5%。
那么比较技术呢?我怀疑这更多地取决于该技术(或语言)正在做什么,而不是语言本身。例如,我可以使用 <details>
元素在 HTML 中构建一个可以打开和关闭的小区域。这比通过在按钮上附加一个点击处理程序来创建该区域更节能吗?我有点怀疑。我敢打赌,浏览器正在执行的重新绘制/重新渲染步骤以及背后的语言与之关联不大。然而!如果我让浏览器下载一个 50 KB 的 JavaScript 库仅仅是为了实现我这个小小的打开/关闭元素,那么是的,它确实很重要,而且 JavaScript 版本效率较低。
这样,就像良好的性能通常与更低的能耗相关一样,我敢打赌遵循最小功耗原则通常也与更低的能耗相关。
厌倦了我对事物的猜测?可以理解。
Jack Lenox 在 Smashing 上发表的文章“如何通过改进网站性能来帮助拯救地球” 是一个更深入的研究。他指出了可以测试你网站的网站。网站碳排放计算器 就是一个例子,它说明
计算网站的碳排放量是一个挑战,但利用五项关键数据,我们可以做出相当准确的估计
1. 线路上的数据传输
2. 网络数据的能源强度
3. 数据中心使用的能源来源
4. 电力的碳排放强度
5. 网站流量
测试代码是开源的。
“良好的性能是否与更低的能耗相关?可能是的。”
取决于良好性能的定义
快速获得效果有时效率低下,我们经常看到这种情况,尤其是在台式机显卡上,其时钟和电压设置远远超过收益递减点
另一方面,以更长的计算时间为代价来最大限度地减少资源使用,会导致系统持续运行的部分(如屏幕)的运行时间更长,并且无法普遍地限制计算以防止处理器超过其最佳频率并考虑系统的其余部分以获得最佳效率
但在网络上你能做的事情方面,“时间越短越好”是一个足够好的估计,并且可以带来用户等待时间更短的明显好处
这在 Web 图形方面尤其如此。
例如,SVG 的大小非常高效,但渲染它比渲染光栅图像需要更长的时间和更多的计算能力。
我甚至在包含大量重复内联 SVG 的大型列表页面上发现了瓶颈,这些 SVG 只是使 DOM 更大并增加了渲染时间。
我想知道你
setInterval/left
与@keyframes/translateX
的例子。浏览器区分这两者的原因是第二个例子可能会将页面分成单独的图层。这使用了更少的计算能力(并且花费更少的时间),因为平移仅触发合成步骤,而不是重新绘制。另一方面,它需要更多的内存来存储额外的图层。因此,两种策略的能耗似乎相互抵消。是否有明确的答案哪个更节能?
(顺便说一句,我从 Martin Splitt 的演讲中了解了浏览器布局/绘制/合成过程的细节,请参阅https://www.youtube.com/watch?v=A16g16bTtjA 了解他 2017 年在 HolyJs 莫斯科发表的演讲的英文版本。)
应该注意的是,深色模式的节能效果完全取决于屏幕技术。该研究中使用的 OLED 屏幕显示深色比显示亮色需要更少的电能。但 LCD 屏幕并非如此,显示黑色比显示白色需要多消耗约 6% 的能量。未来很可能是 OLED,我认为提供深色和浅色模式都是我们都应该实现的可用性功能。但当如此多的用户仍在使用 LCD 屏幕(如大多数中低端 Android 手机和几乎所有 PC)时,我认为现在很难断言深色模式会带来净节能效果。
这是我最近一直在思考的事情。当我通过碳计算器运行我自己的个人网站时,它说切换到使用 100% 可再生能源的托管服务提供商显然会减少碳排放。但是,在 Netlify 上,我可以获得免费的 CDN,并且找不到任何 100% 可再生的 CDN 提供商。使用脏电将某些内容发送一小段距离与使用清洁电将内容发送一段较长距离之间有什么区别?我不知道,但我非常有兴趣了解。如果我们能够开发某种关于构建节能网站的指南,那就太好了。
前一段时间,我还对英国一些知名报纸的网站进行了一次非常不科学的测试:https://pinopticon.net/blog/carbon-and-pagespeed/;比较它们的各种页面速度洞察、Pingdom 和碳计算器分数。结果似乎表明,更好的性能通常会导致更少的碳排放,但这同样也仅仅基于这些工具可以告诉我们的信息。