การสร้างโพรไฟล์ด้วย LuaProfiler
ตรวจวัดโค้ดด้วย LuaProfiler เพื่อค้นหาจุดที่ใช้ CPU สูงและนับจำนวนการเรียก
การสร้างโพรไฟล์ด้วย LuaProfiler เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
LuaProfiler คืออะไร
LuaProfiler คือตัววิเคราะห์ประสิทธิภาพสำหรับ Lua ที่ทำงานโดยใช้ฮุก โดยบันทึกจำนวนครั้งที่เรียกใช้ฟังก์ชันและเวลาสะสมที่ใช้ในแต่ละฟังก์ชัน แล้วสร้าง report สำหรับวิเคราะห์การปรับประสิทธิภาพ
การติดตั้ง LuaProfiler
ติดตั้งได้ผ่าน LuaRocks ด้วยคำสั่ง luarocks install luaprofiler หรือรวมซอร์สโค้ดไว้โดยตรงในโปรเจกต์ของคุณ
การเริ่มตัววิเคราะห์ประสิทธิภาพ
ห่อหุ้มโค้ดของคุณด้วยการเรียก start/stop ของตัววิเคราะห์ประสิทธิภาพ
local profiler = require("profiler")
profiler.start("profile.txt") -- output to file
-- ... your code ...
profiler.stop()การอ่าน report
report จะแสดงชื่อฟังก์ชัน จำนวนครั้งที่เรียกใช้ เวลาเฉลี่ยต่อการเรียกใช้ และเวลารวม ให้มุ่งความสนใจไปที่ฟังก์ชันซึ่งมีเวลารวมสูง
-- Example report:
-- function calls total_time avg_time
-- hotLoop 1000 0.850 s 0.850 ms
-- table.sort 200 0.120 s 0.600 ms
-- string.format 5000 0.090 s 0.018 msการวิเคราะห์เส้นทางโค้ดเฉพาะ
วิเคราะห์ประสิทธิภาพเฉพาะบางส่วนของโค้ด เพื่อลดค่าใช้จ่ายในการทำงานและมุ่งความสนใจไปที่ report
profiler.start()
doExpensiveOperation()
profiler.stop()
profiler.report("expensive_op.txt")ทางเลือก: ตัววิเคราะห์ประสิทธิภาพแบบกำหนดเองด้วย debug.sethook
สร้างตัววิเคราะห์ประสิทธิภาพขนาดเล็กโดยใช้ debug.sethook เพื่อรวบรวมจำนวนครั้งที่เรียกใช้ฟังก์ชันโดยไม่ต้องใช้ไลบรารีภายนอก
local counts = {}
debug.sethook(function(event)
if event == "call" then
local info = debug.getinfo(2, "n")
local name = info.name or "?"
counts[name] = (counts[name] or 0) + 1
end
end, "c")
-- ... run code ...
debug.sethook()
for name, count in pairs(counts) do
print(count, name)
endos.clock สำหรับจับเวลาฟังก์ชัน
จับเวลาฟังก์ชันแต่ละตัวด้วยตนเอง เพื่อวัดประสิทธิภาพแบบเจาะจงอย่างรวดเร็ว
local function time(fn, ...)
local t = os.clock()
fn(...)
return os.clock() - t
end
print("myFunc took:", time(myFunc, arg1, arg2))jit.p สำหรับการวิเคราะห์ LuaJIT
บน LuaJIT, jit.p เหมาะสำหรับใช้ในระบบจริงมากกว่าตัววิเคราะห์ประสิทธิภาพที่ใช้ฮุก เพราะมีค่าใช้จ่ายต่ำกว่าและการสุ่มตัวอย่างสอดคล้องกับ JIT
กราฟเปลวไฟ
สร้างกราฟเปลวไฟโดยรวบรวมตัวอย่างสแตก เครื่องมือที่ใช้ได้ ได้แก่ lua-flameprof สำหรับ PUC Lua และ jit.p + FlameGraph สำหรับ LuaJIT กราฟเปลวไฟจะแสดงลำดับชั้นการเรียกใช้ CPU ทั้งหมด
การวิเคราะห์ประสิทธิภาพในชุดการทดสอบ
เรียกใช้ตัววิเคราะห์ประสิทธิภาพภายในการทดสอบหน่วย เพื่อจับการถดถอยด้านประสิทธิภาพโดยอัตโนมัติ ยืนยันว่าฟังก์ชันจุดร้อนไม่ใช้เวลาเกินขีดจำกัดที่กำหนด
จุดร้อนที่พบบ่อย
- การต่อสตริงด้วย
..ในลูป (ใช้ table.concat) - การใช้ table.sort กับตารางขนาดใหญ่ (พิจารณาอัลกอริทึมที่เร็วกว่า)
- การสร้างคลอเชอร์บ่อยครั้ง
- สายโซ่ __index ของเมทาเทเบิลที่ซ้อนลึก
คำถามเกี่ยวกับการวิเคราะห์ประสิทธิภาพ
รายงานของ LuaProfiler แสดงอะไร
สรุป: การวิเคราะห์ประสิทธิภาพด้วย LuaProfiler
ใช้ LuaProfiler หรือตัววิเคราะห์ประสิทธิภาพแบบกำหนดเองที่ใช้ debug.sethook เพื่อรวบรวมจำนวนครั้งที่เรียกใช้ฟังก์ชันและเวลา ให้มุ่งความสนใจไปที่ฟังก์ชันซึ่งมีเวลารวมสูง บน LuaJIT ให้เลือกใช้ jit.p และใช้กราฟเปลวไฟเพื่อแสดงลำดับชั้นการเรียกใช้
คำถามที่พบบ่อย
บทเรียน “การสร้างโพรไฟล์ด้วย LuaProfiler” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสร้างโพรไฟล์ด้วย LuaProfiler” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสร้างโพรไฟล์ด้วย LuaProfiler”
ตรวจวัดโค้ดด้วย LuaProfiler เพื่อค้นหาจุดที่ใช้ CPU สูงและนับจำนวนการเรียก คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การสร้างโพรไฟล์ด้วย LuaProfiler” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ไลบรารี debug เชิงลึก
- การดีบักระยะไกลด้วย MobDebug
- การสร้างโพรไฟล์ด้วย LuaProfiler
- ความครอบคลุมโค้ดและการตรวจวัดการทดสอบ