每个程序员都应该知道的延迟数字

一个经典“每个程序员都应该知道的延迟数字”图表的交互式重制版,因为概念和实现方式都引起了关注。评论者喜欢把从缓存命中、内存访问到 SSD I/O 和跨洲往返等操作的相对成本可视化这一想法,但认为这种横向、强动画的界面在许多设备上都很难阅读、令人困惑,而且在某些地方还存在事实不准确的问题(例如 1 Gbps 网络数值)。许多人建议采用更简单或对数坐标的图表、更清晰的标签和说明,并强调如果目标是帮助工程师思考性能权衡,那么准确性和可读性应当优先于视觉花哨效果。

总体反响

  • 许多人觉得这个可视化概念上很有趣,也很美观。
  • 很大一部分评论说这个页面很难用,甚至无法使用,尤其是在手机和平板上。
  • 也有不少人更喜欢更早、更简单的同一组延迟数据呈现方式(纯文本、表格,或者早先的交互式网站)。

UI / UX 与交互

  • 主要抱怨:
    • 竖排/横向文字读起来不舒服,而且常常会被浮动 UI 或浏览器界面遮挡。
    • 柱条在点按时会不可预测地变短或变长;重复点击不是幂等的,感觉“失控”。
    • 在很多设备上(iOS Safari、Android、Firefox mobile、iPad、4K 显示器),标签或柱条底部会被隐藏或裁切。
    • 用户常常无法同时看到标签和数值,削弱了比较的能力。
    • 使用说明很容易被忽略;“点击柱条上方/下方以重新缩放”的心智模型并不清晰。
  • 有些人喜欢在理解之后那种有点俏皮的“重新缩放柱条”交互,但也表示它更重形式而非功能。
  • 建议的改进包括:
    • 横向柱状图、对数刻度静态图,或简单表格。
    • 将文字放在柱条外部,或在点按时展开覆盖层。
    • 自动调整大小而不是手动“点按以重新缩放”,更清晰的可操作提示(箭头、图标),以及更好的对比度/留白。
    • 能够折叠/移动信息/致谢框。

数据与建模方面的担忧

  • 有几项具体数字被质疑:
    • 以约 44 ns 表示通过“1 Gbps”发送 1K 的说法被广泛指出不可能;对原始来源的分析表明,它实际上是在通过指数式带宽增长来建模一个更快的“commodity NIC”,而不是字面意义上的 1 Gbps 链路。
    • 数据中心往返时间在数十年中保持不变,被认为值得怀疑。
    • 有人认为一些磁盘和 SSD 的吞吐量/延迟数字与典型硬件相比并不准确。
  • 年份滑块(+/- 年)一开始让人困惑;后来解释为这些数值是随时间外推的,而不仅仅是历史数据。

“每个程序员都应该知道的数字”的实用性

  • 有些人认为这些延迟对于理解权衡关系至关重要(RAM 与磁盘、网络,以及人可感知的延迟)。
  • 也有人说,大多数程序员并不做性能关键型工作,且很少需要这类数字。
  • 对于用时间还是 CPU 周期来表达成本,也存在争论:
    • 嵌入式/电信开发者指出,在他们的领域里,周期是标准表达方式。
    • 其他人则认为,在现代多核系统中存在许多时钟域,用基于时间的、跨域比较更有意义。