起因很无聊:有人说「你每天刷手机看文章,一年耗的电比冰箱还多」。我不信,就去查了。
先把问题拆开
一次网页请求的耗电分成三段,每一段都对应不同的物理过程:
- 终端——你的手机或电脑把页面渲染出来的耗电
- 传输——数据从服务器经骨干网到你手机的网络耗电
- 服务器——网站后端处理这次请求的耗电
大多数人只看到第三段,其实它往往是三段里最不重要的一段。
第一段:终端渲染
这一段有比较可靠的公开数据。一台普通智能手机屏幕全亮时的功耗大约 1.5 到 2 瓦,其中屏幕本身占六成以上。浏览一个静态页面时,CPU 处于低频运行,处理器功耗大约 0.3 到 0.8 瓦。
如果把这篇文章从头滑到尾大约需要 90 秒,那么这段时间的总耗电大致是:
屏幕 1.6W × 90s ≈ 144 焦耳
处理器 0.5W × 90s ≈ 45 焦耳
合计 ≈ 190 焦耳 ≈ 0.053 瓦时
0.053 瓦时是什么概念?一颗普通 5 号干电池大约有 7.5 瓦时。也就是说,读完这篇东西,耗掉的电还不到干电池的百分之一。
第二段:网络传输
这一段最难估,因为变量太多。但有一个常用的参考值:移动蜂窝网络传输每 GB 数据的能耗,在 4G 网络下大约是 2 到 5 千瓦时这个量级——注意单位,这是整条链路(基站、回传、核心网)的合计能耗,不是单台设备。
换算一下:一篇文章正文加图片算 300 KB,那就是 0.0003 GB。按中间值 3.5 千瓦时每 GB 算:
0.0003 × 3.5 kWh ≈ 0.001 瓦时
比终端耗电小了五十倍。所以「传输一张图很费电」这个说法,除非图片是几兆的高清大图,否则基本站不住脚。
第三段:服务器
一台典型机架服务器整机功耗按 400 瓦算,它一天能处理几十万到上百万次请求。就算保守按每天十万次算:
400W × 86400s ÷ 100000 ≈ 345 焦耳/次 ≈ 0.096 瓦时
看上去和终端差不多,但这里有个关键点:真正的数据中心有 PUE 损耗。PUE(电源使用效率)是「总耗电 ÷ IT 设备耗电」,好的机房 PUE 是 1.1 到 1.2,差的能到 2.0 以上。也就是说服务器每用 1 度电,机房可能要多花 0.1 到 1 度。
三段合起来
终端 0.053 Wh (约 92%)
服务器 0.096 Wh (含 PUE,约 165% 的终端值)
传输 0.001 Wh (约 2%)
注意服务器那一项比终端还大。但这里我做了个不公平的比较——服务器那 0.096 瓦时是按「一天十万次请求」摊的,如果这台服务器一天只处理一千次请求,摊到每次就是 9.6 瓦时,差一百倍。
所以对一个小站来说,真正的耗电瓶颈不是页面大小,而是服务器空转。
结论和我觉得最值得做的事
算完之后,我对「优化网页」这件事的优先级彻底改了:
第一位是让服务器少空转。一台常年开机、每天只服务几百个请求的机器,它的固定功耗分摊到每次请求上高得离谱。把几十个小站合并到一台机器上,或者在低峰期真的让机器休眠,省下的电远超把图片从 300KB 压到 100KB。
第二位才是压页面体积。它确实有用,但对小型站点来说排序在后面。
最后回到那个「刷手机比冰箱耗电多」的说法。冰箱一天大约 1 度电,也就是 1000 瓦时。照着上面的算法,一篇文章 0.15 瓦时,要读 6600 篇才能顶一台冰箱一天。
一天读 6600 篇文章不现实。所以这个说法是错的。
不过我也得说清楚:我这个估算里的每一段都是数量级估算,不是精确测量。如果你的结论要用来做决策,正确做法是用功率计实测,而不是套用网上的平均值。