技术

一篇文章要读多久

用一点算术把阅读时长算出来

几乎每篇长文顶上都有一个「约 X 分钟」。多数是拍出来的:字数除以三百,取个整。这样算不是不行,只是碰到中英混排、代码和公式,偏得厉害。这篇把这个数字重新算一遍,顺便说清楚它什么时候不该信。

一、先把单位统一

汉字和英文单词不同量纲。以汉字为基准,中文字数 直接计入;英文词数 要乘一个折算系数 。于是等效字数

时间就是 除以中文的阅读速度。问题是 取多少。

二、系数从速度来

默读、且要求读懂的速度,常见区间是:英文每分钟 200 到 250 词,中文每分钟 300 到 500 字1。取中间值,设中文阅读速度 字每分钟,英文阅读速度 词每分钟。

读一个英文词花的时间是 分钟;这段时间里,中文能读掉 个字。所以一个英文词在时间上等价于

个汉字。注意这只是时间等价,不是长度换算。翻译上常用的比例是英文一个词译成 1.6 到 1.8 个汉字,两个数字碰巧接近,但来源不同,不要混为一谈。

三、代码与公式要加价

正文可以顺读,代码不行。读一行代码要先看清缩进与结构,再判断它和上下文的关系,比读一行散文慢。经验上给一行代码算六到八个字的时间,一行独立公式算八到十个字。取偏小的值:

其中 是代码行数, 是独立公式行数,,。最后一个式子向上取整,不四舍五入:读者不会在十三点一分钟的时候准时停下,取上界更接近实际的感受2。

符号含义取值
中文字数数出来的
英文词数数出来的
英文词的时间折算
代码行数数出来的
每行代码的等价值 字
独立公式行数数出来的
每行公式的等价值 字
中文阅读速度 字每分钟

四、拿一篇真文章验算

取一篇中等的技术文章:正文 个汉字, 个英文词, 行代码, 行公式。代入:

再除以速度:,向上取整,十四分钟。

站内那个数字是另一个算法:它把代码块与公式整段剥掉,只数正文,再除以 3203。同一篇文章算出来是 ,四舍五入后十一分钟。差了三分钟,差在三处地方——不看代码与公式、除数用 320 而不 300、用四舍五入而不向上取整。这个数字是在构建期一次算好的,请求时不再重算——那条链子见 一篇文章的旅程。

哪个对?看用途。这个数字要在服务端之外的地方极快地算完,也就在构建期跑一行正则,所以站内选的是更便宜的算法。它偏短,但方向是对的:文章越长,估出来的时间越长。

同一篇,三种速度

三千九百三十六个等效字:精读的人(200 字每分钟)要二十分钟,按中间值(300)是十四分钟,扫读(500)不到八分钟。 差到两倍以上,所以它只适合用来比长短,不适合用来许诺。

五、误差在哪里

这个模型有三处靠不住:

  • 速度取的是区间中点。精读两百字一分钟,扫读能到五百。同一篇文章,两个人的时间能差一倍。
  • 密度不均。一段术语密集的论证,读起来比一段讲故事的话慢得多,模型却按同一个速度算。
  • 中断。手机上读,切出去回一条消息,回来要重读一句。时间不是连续的。

所以这个数只能用来做相对比较:这篇比那篇长多少,值不值得现在开始读。真要当承诺,就必须写成「约」,而且最好说明是中位数。

一句话总结:模型的价值不在那个整数,在把「读起来费劲」这件事拆成了可以讨论的几项。

Footnotes

  1. 阅读速度的区间在不同研究里并不统一,因为测量条件差别很大——是否要求理解、是否朗读、母语还是第二语言。正文取的是常见的中位区间。 ↩

  2. 向上取整而不是四舍五入,是一个关于心理感受的选择:读到最后一分钟,人更在意「还差几分钟」,而不是统计学上的无偏。 ↩

  3. 站内实现的细节见 src/lib/format.ts:countWords 先删掉代码块与公式,再分别统计汉字与拉丁词,readingTime 除以 320 后四舍五入。它对技术文章会低估,这是个已经知道的取舍。 ↩

关联4

知识图谱

局部图谱 · 点节点跳转