วัดระยะเวลา
จับเวลาว่าโค้ดทำงานนานเท่าใด
วัดระยะเวลา เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
จับเวลาโค้ดของคุณ
บางครั้งคุณอาจต้องการทราบว่างานหนึ่งใช้เวลานานเท่าใด เช่น การโหลดไฟล์ การวนซ้ำ หรือการสร้างด่าน การวัดระยะเวลาช่วยให้คุณค้นหาจุดที่ทำงานช้าและปรับปรุงจุดเหล่านั้นได้
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 ที่โปรแกรมของคุณใช้ด้วยความละเอียดสูง
จึงเหมาะอย่างยิ่งสำหรับจับเวลาการทำงานที่รวดเร็วได้ถึงระดับเศษเสี้ยวของวินาที
print(os.clock())วัดเวลาการวนซ้ำ
วางการวนซ้ำไว้ระหว่างการอ่านค่าจาก os.clock สองครั้ง เพื่อดูว่าการวนซ้ำทำงานนานเท่าใด ผลต่างคือ time ที่ผ่านไปในหน่วยวินาที
การวนซ้ำที่มีขนาดใหญ่กว่าจะใช้เวลานานกว่า ดังนั้นนี่จึงเป็นวิธีรวดเร็วในการเปรียบเทียบแนวทางต่าง ๆ
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.difftime กับค่า os.time สองค่าจะเข้าใจได้ชัดเจนที่สุด โดยจะคืนค่าช่วงห่างเป็นวินาที
หารด้วย 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")แสดงนาทีและวินาที
หากต้องการแสดงระยะเวลาเป็นนาทีและวินาที ให้ใช้การหารจำนวนเต็มและตัวดำเนินการ modulo
// ให้ค่านาทีเต็ม และ % ให้ค่าวินาทีที่เหลือ
local total = 145
local mins = total // 60
local secs = total % 60
print(string.format("%d:%02d", mins, secs))คำนวณการนับถอยหลังอย่างง่าย
นำแนวคิดต่าง ๆ มารวมกันเพื่อรายงานเวลาที่เหลืออยู่ ลบ time ปัจจุบันออกจากค่าเป้าหมาย แล้วจัด format วินาทีให้อยู่ในรูปนาทีและวินาที
วิธีนี้จะแสดงผลการนับถอยหลังได้อย่างเรียบร้อย
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 สำหรับการจับเวลาโค้ดที่แม่นยำและมีเศษวินาที
จัด format ผลลัพธ์ด้วย string.format และแปลงวินาทีดิบเป็นนาทีและวินาทีโดยใช้ // กับ % เครื่องมือเหล่านี้ช่วยให้คุณจับเวลาได้ตั้งแต่การวนซ้ำไปจนถึงหนึ่งวันทำงาน
คำถามที่พบบ่อย
บทเรียน “วัดระยะเวลา” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “วัดระยะเวลา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “วัดระยะเวลา”
จับเวลาว่าโค้ดทำงานนานเท่าใด คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “วัดระยะเวลา” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ