รูปแบบการวัดประสิทธิภาพ
เขียนการวัดประสิทธิภาพย่อยที่เชื่อถือได้ด้วย os.clock และหลีกเลี่ยงข้อผิดพลาดที่พบบ่อย
รูปแบบการวัดประสิทธิภาพ เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องวัดประสิทธิภาพ
การวัดประสิทธิภาพขนาดเล็กใช้วัดประสิทธิภาพของส่วนโค้ดเฉพาะในสภาพแยกเดี่ยว วิธีนี้ช่วยยืนยันว่าการปรับปรุงประสิทธิภาพทำให้เร็วขึ้นจริง โดยไม่ต้องอาศัยการคาดเดา
โครงแบบการวัดประสิทธิภาพพื้นฐาน
ห่อโค้ดไว้ในลูป วัดเวลาที่ผ่านไปจริงด้วย os.clock() แล้วหารด้วยจำนวนรอบการทำงาน
local N = 1e6
local t0 = os.clock()
for i = 1, N do
-- code to benchmark
end
local elapsed = os.clock() - t0
print(("%.2f ns/op"):format(elapsed / N * 1e9))รอบอุ่นเครื่อง
ทำรอบอุ่นเครื่องก่อนจับเวลา เพื่อให้ LuaJIT มีเวลาคอมไพล์เทรซ หากไม่อุ่นเครื่อง การทำงานรอบแรกที่จับเวลาจะรวมค่าใช้จ่ายของการคอมไพล์ JIT ไว้ด้วย
for i = 1, 1000 do hotFunction(i) end -- warm up
local t0 = os.clock()
for i = 1, N do hotFunction(i) end
local elapsed = os.clock() - t0การป้องกันการตัดโค้ดที่ไม่มีผลลัพธ์
JIT อาจปรับแต่งการคำนวณที่ไม่ได้ใช้งานผลลัพธ์ออกไป ให้สะสมผลลัพธ์ไว้ในตัวแปรเพื่อให้การวัดประสิทธิภาพสะท้อนการทำงานจริง
local sum = 0
for i = 1, N do sum = sum + math.sin(i) end
print(sum) -- prevent eliminationการเปรียบเทียบแนวทางสองแบบ
วัดประสิทธิภาพการนำไปใช้งานทางเลือกต่าง ๆ ภายใต้เงื่อนไขเดียวกัน ให้สลับลำดับการทำงานหรือทำซ้ำหลายครั้งเพื่อลดความคลาดเคลื่อนจากการจัดตารางของ OS
local function approach1() -- ...
end
local function approach2() -- ...
end
local function bench(fn, n)
local t = os.clock()
for _ = 1, n do fn() end
return os.clock() - t
end
print("A:", bench(approach1, 1e5))
print("B:", bench(approach2, 1e5))การวิเคราะห์ทางสถิติ
ทำการวัดประสิทธิภาพหลายครั้ง แล้วคำนวณค่าต่ำสุด ค่าสูงสุด และค่ามัธยฐาน ควรตัดค่าผิดปกติที่เกิดจากการหยุดของ GC หรือการจัดตารางของ OS ออก
การวัดการใช้หน่วยความจำ
วัดการจัดสรรหน่วยความจำควบคู่ไปกับเวลา
collectgarbage("collect")
local mem0 = collectgarbage("count")
-- ... run operation ...
collectgarbage("collect")
local mem1 = collectgarbage("count")
print(("Memory delta: %.1f KB"):format(mem1 - mem0))การหลีกเลี่ยงการรบกวนจาก GC
หยุด GC ก่อนจับเวลาเพื่อวัดเวลาการคำนวณล้วน ๆ แล้วเปิดใช้งานอีกครั้งภายหลัง
collectgarbage("stop")
local t0 = os.clock()
for i = 1, N do -- ... end
print(os.clock() - t0)
collectgarbage("restart")การวัดประสิทธิภาพแบบสมจริงเทียบกับแบบขนาดเล็ก
การวัดประสิทธิภาพขนาดเล็กช่วยปรับปรุงส่วนโค้ดเล็ก ๆ แต่อาจไม่สะท้อนประสิทธิภาพในการใช้งานจริง ควรตรวจสอบการปรับปรุงกับโปรไฟล์ของแอปพลิเคชันทั้งระบบเสมอ
เครื่องมือวัดประสิทธิภาพ
สร้างเครื่องมือ benchmark(name, fn, iters) ที่นำกลับมาใช้ซ้ำได้ เพื่อพิมพ์ผลลัพธ์ที่มีรูปแบบสม่ำเสมอในทุกการวัดประสิทธิภาพ
local function benchmark(name, fn, iters)
iters = iters or 1e5
for _ = 1, iters // 10 do fn() end -- warm up
local t = os.clock()
for _ = 1, iters do fn() end
local ns = (os.clock() - t) / iters * 1e9
print(("%-30s %8.1f ns/op"):format(name, ns))
endการวัดประสิทธิภาพใน CI
เรียกใช้การวัดประสิทธิภาพใน CI เพื่อตรวจจับประสิทธิภาพที่ถดถอย แจ้งเตือนหากการวัดรายการใดแย่ลงเกินเกณฑ์ที่กำหนด เช่น 10%
คำถามเกี่ยวกับการวัดประสิทธิภาพ
เหตุใดรอบอุ่นเครื่องจึงสำคัญเมื่อวัดประสิทธิภาพโค้ด LuaJIT
สรุป: รูปแบบการวัดประสิทธิภาพ
ใช้รอบอุ่นเครื่อง ป้องกันการตัดโค้ดที่ไม่มีผลลัพธ์ด้วยการนำผลลัพธ์ไปใช้งาน วัดผลด้วย os.clock() ควบคุม GC และทดลองหลายครั้งเพื่อให้การวัดมีเสถียรภาพ สร้างเครื่องมือวัดประสิทธิภาพที่นำกลับมาใช้ซ้ำได้เพื่อความสม่ำเสมอ
คำถามที่พบบ่อย
บทเรียน “รูปแบบการวัดประสิทธิภาพ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “รูปแบบการวัดประสิทธิภาพ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบการวัดประสิทธิภาพ”
เขียนการวัดประสิทธิภาพย่อยที่เชื่อถือได้ด้วย os.clock และหลีกเลี่ยงข้อผิดพลาดที่พบบ่อย คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “รูปแบบการวัดประสิทธิภาพ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ภาพรวมสถาปัตยกรรม LuaJIT
- การเขียน Lua ที่เหมาะกับ JIT
- การสร้างโพรไฟล์ด้วย jit.p และ perf
- รูปแบบการวัดประสิทธิภาพ