使用方法
- 先在「测试文本」下拉框里挑一段,默认是第 1 段,共 82 个字符;下拉框的标签里已经标好了每段的字符数。
- 「测试时长」默认 60 秒,允许 15~300 之间的整数,步长 15 秒。想测爆发力就用 15 秒,想测耐力就用 300 秒。
- 点「开始测试」,然后在上面的输入框里照着那行文本打字。计时从你敲下的第一个字符开始,不是从点按钮开始,所以不会白扣时间。
- 打字过程中上方实时显示已用时间、实时 WPM、正确率和错误数;打错的字符会在原文里标红,打对的标绿。
- 时长用完或者你把整段打完,测试自动结束,下方出现毛速、净速、每分钟字符数、准确率和总击键数。
- 想中途停就点「结束并看结果」,结果按当前已经用掉的时间结算,不会按整个时长折算。
这个打字速度测试能解决什么问题
一是把「我打字快不快」变成一个可比的数字。主观感觉没有参照,而 WPM 是全世界打字练习软件通用的口径,得到一个数就能和自己上一次比、和别人比。
二是区分「快」和「准」两件事。很多人盲打很快但错字多,毛速很高、净速一般。本页同时给出毛速与净速,两者的差额就是错误率带来的惩罚,一眼能看出该练速度还是该练准确。
三是验证换键盘、换键位是否真的有用。同一段文本、同一时长,换设备前后各跑一次,用数字说话比感觉靠谱。
四是给中文输入一个独立的参考值。中文用输入法,节奏和英文完全不同,套用 WPM 会失真。本页对中文片段主要看每分钟字符数,把它和英文的 CPM 分开比较才合理。
本页的打字速度测试不做这些事:不纠正指法、不教键位、不记录历史成绩、不联网排名。它只负责在你本地把时间和字符数如实换算成速度,关掉页面数据就没有了。
计速原理:5 个字符算 1 个词、净速与单调时钟
核心公式是一个约定,不是语言学的定义。速度按 WPM = 字符数 ÷ 5 ÷ 分钟数 计算。这里的「5」是打字教学界沿用至今的惯例:英文里一个单词加上后面的空格平均约 5 个字符,于是大家干脆把「5 个字符」当作「1 个词」。它和文本里真实有多少个单词无关——写 82 个字符,无论里面是 16 个单词还是 5 个长单词,都按 82 ÷ 5 = 16.4 个「词」来算。这样做的价值在于跨文本可比:换一段完全不同的文章,速度指标仍然对得上。
毛速与净速只差一个错误数。毛速 Gross WPM 只看你打了多少字符:(总字符数 ÷ 5) ÷ 分钟数。净速 Net WPM 会把错误扣掉:((总字符数 ÷ 5) − 错误数) ÷ 分钟数。举例:60 秒打 300 个字符、其中错 6 个,毛速是 (300 ÷ 5) ÷ 1 = 60.0,净速是 (60 − 6) = 54.0,准确率 (300 − 6) ÷ 300 = 98%。同样条件下如果错 12 个,净速掉到 48.0;错到 60 个,净速正好是 0。这就是为什么只看毛速会高估水平——错误越多,毛速和净速的差距越大。
CPM 是同一件事的另一把尺子。每分钟字符数 CPM 不做 ÷5 的换算,直接是 字符数 ÷ 分钟数。因为 1 个「词」固定等于 5 个字符,所以 1 WPM = 5 CPM,60 WPM 就是 300 CPM。中文必须看 CPM:用输入法打中文时,敲一个汉字往往要按好几个键、还要选词,如果还按「5 个字符算 1 个词」,同一份手感算出来的 WPM 会比英文低一大截,两者没有可比性。中文的常见参考口径是每分钟多少字,例如 120 字/分,换算成 WPM 是 24.0,但这个数字只适合和中文成绩比。
计时必须用单调时钟。本页取时间用 performance.now(),它返回的是从页面加载开始经过的毫秒数,且单调不减——按 W3C High Resolution Time 规范,它不受系统时间被网络校时、用户手动改表、时区与夏令时调整的影响。相对地,Date.now() 返回的是墙上时钟的毫秒时间戳,分辨率只有 1 毫秒,而且会在系统对时的瞬间向前或向后跳。如果拿它来测速,用户在测试途中被校时拨快 2 秒,速度就会凭空虚高;拨慢则凭空变慢。performance.now() 的规范建议时钟分辨率不低于 5 微秒(0.005 毫秒),比 1 毫秒细两百倍。
刷新界面用的是时间戳差,不是 tick 计数。定时器回调只是「最早何时触发」的承诺,实际还要排进任务队列,setInterval(fn, 200) 不会严格每 200 毫秒执行一次。把每次 tick 都当作 0.2 秒来累加,误差会一路上滚;本页反过来做——每个 tick 里都重新读一次 performance.now(),用当前时间减去起始时间算用时,所以哪怕某次回调晚了 100 毫秒,显示的用时依然准确,只是刷新频率变低。后台标签页的节流更明显:HTML 规范规定后台页面的定时器最小间隔被抬到 1000 毫秒,按 tick 累积的做法一分钟就能差出好几秒;而按时间戳差算,回来时数字仍然是准的。
为什么还要设 15~300 秒的上下限。下限 15 秒是因为计时太短时,一次 0.5 秒的起始延迟就能让结果偏差百分之几;上限 300 秒是因为超过五分钟,疲劳开始主导成绩。这个打字速度测试在你中途走神时按「结束并看结果」按当前时间结算,比硬撑到底更真实。
完整示例(数值仅作演示)
页面打开时的默认条件是:文本选第 1 段(82 个字符)、时长 60 秒。这几个数字同时出现在下拉框标签、正文和下面的对照表里,三处一致。
- 把第 1 段完整打完、用时正好 60 秒,毛速 =
(82 ÷ 5) ÷ 1 = 16.4WPM; - 同样这 82 个字符如果在 30 秒内打完,毛速翻倍到 32.8 WPM,说明时长本身会显著改变结果;
- 60 秒打 250 个字符是 50.0 WPM,打 300 个字符是 60.0 WPM;
- 30 秒打 100 个字符、15 秒打 50 个字符,两者的毛速都是 40.0 WPM;
- 60 秒打 300 个字符但错了 6 个:毛速 60.0、净速 54.0、准确率 98%;
- 同样 300 个字符错 12 个,净速只剩 48.0;错到 60 个,净速为 0。
下面这段就是默认文本,共 82 个字符、折合 16.4 个「词」:
The quick brown fox jumps over the lazy dog while the early bird catches the worm.
它并不长,按对照表里 40 WPM 的节奏打完只要 24.6 秒,按 60 WPM 的节奏只要 16.4 秒——所以 60 秒的默认时长足够你打三遍还剩时间。
片段、字符数与用时对照表
下表列出全部预设片段:字符数按包含空格在内逐个字符统计,「折合词数」= 字符数 ÷ 5,「40 WPM 用时」按 200 CPM 反推,「60 WPM 用时」按 300 CPM 反推。想找一段正好填满你设定时长的文本,看这两列最直观。
| 编号 | 片段开头 | 字符数 | 折合词数 | 40 WPM 用时 | 60 WPM 用时 |
|---|---|---|---|---|---|
| 1 | The quick brown fox jumps… | 82 | 16.4 | 24.6 秒 | 16.4 秒 |
| 2 | Practice makes perfect, but… | 95 | 19.0 | 28.5 秒 | 19.0 秒 |
| 3 | A journey of a thousand… | 93 | 18.6 | 27.9 秒 | 18.6 秒 |
| 4 | Pack my box with five… | 90 | 18.0 | 27.0 秒 | 18.0 秒 |
| 5 | How vexingly quick daft… | 89 | 17.8 | 26.7 秒 | 17.8 秒 |
| 6 | Sphinx of black quartz… | 89 | 17.8 | 26.7 秒 | 17.8 秒 |
| 7 | Bright vixens jump; dozy… | 87 | 17.4 | 26.1 秒 | 17.4 秒 |
| 8 | Every good keyboard rewards… | 93 | 18.6 | 27.9 秒 | 18.6 秒 |
| 9 | Type the word you see… | 96 | 19.2 | 28.8 秒 | 19.2 秒 |
| 10 | Six big devils from Japan… | 91 | 18.2 | 27.3 秒 | 18.2 秒 |
| 11 | Accuracy first, then speed… | 94 | 18.8 | 28.2 秒 | 18.8 秒 |
| 12 | The five boxing wizards… | 89 | 17.8 | 26.7 秒 | 17.8 秒 |
点「加载更多片段」会补上两段中文文本,点「导出 CSV」把当前整张表存成带 BOM 的 CSV(Excel 打开不乱码),点「复制对照表」复制成制表符分隔的文本。
边界与精度说明
- 时长 15~300 秒的整数。小于 15 秒时,人从看到第一个字符到手指落键的几十毫秒反应时间会占到结果的百分之几;超过 300 秒则手部疲劳开始主导,测出来的更多是耐力而不是速度。
- 计时为 0 会被拦下。如果还没敲下任何字符就点了「结束并看结果」,分母是 0,除法没有意义,本页会直接提示而不是给出 NaN 或 Infinity。
- 空输入也会被拦下。打了 0 个字符同样无法计算速度,提示会明确告诉你是「还没有输入」还是「用时太短」。
- 错误数按逐字符比对统计,退格改正后错误数会同步减少,所以它反映的是提交时的最终状态,不是历史击键总数。想看原始击键数请用页面底部的「键盘测试」。
- 净速可能为负。如果错误数超过了「总字符数 ÷ 5」,净速公式会得到负数,这在数学上成立,说明错误惩罚已经吃掉全部速度。
- 中文片段的 WPM 仅供参考。用输入法打中文时会经历拼音、候选、选词三个阶段,段落里的「字符」是汉字而不是按键,所以中文成绩请横向和中文比,别拿去和英文 WPM 排座次。
- 切后台不会改变成绩。浏览器在后台把定时器降到至少 1000 毫秒一次,但因为用时是按
performance.now()的时间戳差算的,回到前台后数字依然准确,只是中间那几秒界面不刷新。 - 不保存任何记录。这个打字速度测试的速度、准确率、文本选择都只存在于当前页面内存里,刷新就没了,也没有任何网络请求。
常见问题
WPM 里的「词」到底怎么算?
按 5 个字符算 1 个词 的通行约定,而不是数真实单词。公式是 字符数 ÷ 5 ÷ 分钟数。所以第 1 段的 82 个字符不管拆成几个单词,都按 82 ÷ 5 = 16.4 个词来折算。这个约定来自打字教学界对英文平均词长的经验值,好处是换成任何一段文本都能直接比较。
毛速和净速我该看哪个?
看净速。毛速只数你打了多少字符,打错了也算进去;净速会把错误按每分钟错误次数扣掉。两者差额越大说明错误越多。日常练习建议以净速为准,同时盯住准确率——准确率低于 95% 时,先把速度降下来练准,比硬冲毛速更有用。
为什么同样一段文字,两次测出来差很多?
常见三个原因:一是时长不同,15 秒测爆发、300 秒测耐力,同一段文本在两种时长下本来就该不同;二是第一次测要花一两秒进入节奏;三是打第二遍会比第一遍快,想公平比较就换一段没打过的。
用按键数算不是更准吗?
按键数不等于字符数:中文输入一个汉字要按多次键,英文里 Shift 也算一次击键。本页按字符比对,好处是同一段文本的分子是固定的。想统计真实按键次数、看每个键的按下次数,用页面底部的「键盘测试」,那是另一套口径。
中途切到别的标签页会怎样?
不会作弊也不会吃亏。浏览器会把后台页面的定时器降到至少每秒一次,实时数字更新会变慢,但计时本身用的是 performance.now(),回来时用时依然准确。不过既然测的是打字,测试期间还是建议别切走。
为什么中文的 WPM 这么低?
因为公式把 1 个汉字也当成 1 个字符,而打一个汉字要经历拼音、候选、选词好几步。中文的合理参考是每分钟字符数,也就是 CPM,不要用 WPM。同一个手速,中文的 WPM 会比英文低一大截,这是输入方式决定的,不是水平差。
准确率是怎么算的?
准确率 = 正确字符数 ÷ 已输入字符数。逐字符和原文比对,位置对了才算对,插入、漏字、错字都会拉低它。它统计的是提交时的状态,中途用退格改过的字算对。
这段速度算快还是慢?
英文键盘的常见分档大致是:20~30 WPM 属于入门,40 WPM 约为办公室平均水平,60~70 WPM 属于熟练,80 WPM 以上接近专业录入。这些都建立在准确率不低于 95% 的前提上;如果错误率高,毛速再高也不代表实用速度。