0Pricing
Lua Academy · บทเรียน

วัดระยะเวลา

จับเวลาว่าโค้ดทำงานนานเท่าใด

วัดระยะเวลา เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. os.time และ os.date
  2. จัดรูปแบบวันที่
  3. การคำนวณเวลา
  4. วัดระยะเวลา
← กลับไปที่ Lua Academy