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

รูปแบบการวัดประสิทธิภาพ

เขียนการวัดประสิทธิภาพย่อยที่เชื่อถือได้ด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. ภาพรวมสถาปัตยกรรม LuaJIT
  2. การเขียน Lua ที่เหมาะกับ JIT
  3. การสร้างโพรไฟล์ด้วย jit.p และ perf
  4. รูปแบบการวัดประสิทธิภาพ
← กลับไปที่ Lua Academy