测量持续时间
计算代码运行了多长时间。
测量持续时间 是 CoddyKit 上的免费 Lua Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Lua Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Lua Academy 课程共包含 4 节课。
测量代码耗时
有时您会想知道某项任务花了多长时间:加载 file、运行循环或构建关卡。测量持续时间有助于找出缓慢环节并加以改进。
Lua 提供了两个工具:os.time 用于粗略计时,os.clock 用于精确计时。
秒表模式
基本思路很简单:记录工作开始前的 time,执行工作,记录工作结束后的 time,然后相减。
差值就是经过的时长。这种开始—停止模式是每个计时器的核心。
local start = os.time()
-- work happens here
local stop = os.time()
print("Elapsed:", stop - start)os.time 的精度较粗
os.time 按整秒计数,因此无法感知任何快于一秒的变化。连续快速调用两次时,差值通常会显示为零。
对于短任务,您需要更精细的 clock,这正是 os.clock 的用途。
local a = os.time()
local b = os.time()
print(b - a)认识 os.clock
os.clock() 返回以秒为单位的数值,但会以带小数的形式表示。它能够以高分辨率测量程序使用的 CPU time。
因此,它非常适合将快速操作的耗时精确到不到一秒的范围。
print(os.clock())测量循环耗时
在两次读取 os.clock 的操作之间运行循环,就能看到循环运行了多久。差值就是以秒为单位的经过时间。
循环规模越大,耗时越长,因此这是一种快速比较不同方案的方法。
local t1 = os.clock()
local sum = 0
for i = 1, 1000000 do sum = sum + i end
local t2 = os.clock()
print("Took", t2 - t1, "seconds")格式化结果
很长的小数难以阅读,因此请使用 string.format 显示整齐的小数位数。
这里的 %.3f 会在小数点后显示三位数字,从而提供毫秒级的细节。
local t1 = os.clock()
for i = 1, 500000 do end
local elapsed = os.clock() - t1
print(string.format("%.3f seconds", elapsed))os.time 与 os.clock
请选择合适的工具。对于“用户登录后经过了多少秒”这类现实中的时间跨度,请使用 os.time。
测量代码性能时,请使用 os.clock,因为它更精确,并且跟踪的是 CPU time,而不是墙上时钟的时间。
可复用的计时器函数
您可以将这种模式封装到一个函数中。它会运行给定的函数、测量其耗时,然后打印结果。
这样可以将计时逻辑集中在一个地方,方便重复使用。
local function timeIt(fn)
local s = os.clock()
fn()
print(string.format("%.4f s", os.clock() - s))
end
timeIt(function() for i=1,100000 do end end)跨越数小时的时间差
对于较长的现实时间跨度,使用两个 os.time 值调用 os.difftime 最为清晰。它会返回以秒为单位的时间跨度。
除以 60 可得到分钟数,除以 3600 可得到小时数,从而以更易读的方式报告结果。
local started = os.time({year=2025, month=1, day=1, hour=9})
local ended = os.time({year=2025, month=1, day=1, hour=17})
local hours = os.difftime(ended, started) / 3600
print(hours, "hours")显示分钟和秒数
要将持续时间显示为分钟和秒数,请使用整数除法和取模运算符。
// 会得到完整的分钟数,% 会得到剩余的秒数。
local total = 145
local mins = total // 60
local secs = total % 60
print(string.format("%d:%02d", mins, secs))简单的倒计时计算
把这些思路结合起来,报告剩余的 time。用目标时间减去当前时间,然后将秒数转换为分钟和秒数。
这样就能得到简洁的倒计时显示。
local target = os.time() + 90
local left = os.difftime(target, os.time())
print(string.format("%d:%02d left", left // 60, left % 60))快速检查
选择用于精确计时的最佳工具。
回顾
要测量一段持续时间,请在开始和结束时读取 clock,然后相减。对于以整秒计数的现实时间跨度,请使用 os.time;对于需要精确到小数秒的代码计时,请使用 os.clock。
请使用 string.format 格式化结果,并使用 // 和 % 将原始秒数转换为分钟和秒数。这些工具可以测量从循环到工作日的各种耗时。
常见问题解答
「测量持续时间」课时是免费的吗?
是的 — 「测量持续时间」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Lua Academy 课程的其余内容,请升级到 CoddyKit PRO。 Lua Academy 课程共包含 4 节课。
「测量持续时间」这节课中我会学到什么?
计算代码运行了多长时间。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Lua Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Lua Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「测量持续时间」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Lua Academy 课中编写并运行代码吗?
能。每节 Lua Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。