ใช้หลักวัดก่อนปรับเป็นลูปเรียบง่าย: ตั้ง baseline, โปรไฟล์, เปลี่ยนทีละอย่าง, ยืนยันผล แล้วสร้างนิสัยทำงานด้านประสิทธิภาพที่สงบขึ้น

เพราะคุณอาจเสียเวลาเป็นชั่วโมงกับสิ่งที่ไม่ใช่สาเหตุของความช้า เริ่มจากพิสูจน์ว่าช่วงเวลาหายไปที่ไหน (เครือข่าย, เซิร์ฟเวอร์, เธรดหลัก, การเรนเดอร์) แล้วค่อยแก้ที่คอขวดที่ใหญ่ที่สุด
เขียนการกระทำเดียวและเงื่อนไขที่แน่นอน แล้วทำซ้ำ:\n\n- อุปกรณ์ + เวอร์ชันเบราว์เซอร์เดียวกัน\n- โปรไฟล์เครือข่ายเดียวกัน (หรือการจำกัดแบนด์วิธ)\n- สถานะแคชเดียวกัน (cold หรือ warm)\n- ข้อมูลทดสอบเดียวกัน (บัญชี, ขนาดตะกร้า, ภูมิภาค)\n- หลายครั้ง (ใช้ค่า median)\n\nถ้าทำซ้ำไม่ได้ ก็เชื่อผลไม่ได้
เลือก 1–3 เมตริกที่ตรงกับสิ่งที่ผู้ใช้สังเกต:\n\n- การโหลดหน้า: LCP (คอนเทนต์หลักปรากฏ), TTFB (เซิร์ฟเวอร์ตอบสนอง)\n- ปฏิสัมพันธ์: INP (ความรู้สึกตอบสนอง)\n- ความเสถียร: CLS (การกระโดดของเลย์เอาต์)\n- แบ็กเอนด์: p95 เวลา endpoint สำหรับ API สำคัญที่คุณรอ\n\nอย่าเฝ้าดูตัวเลขมากเกินไปจนเลือกผลที่สะดวก
Lab data คือข้อมูลจากการตั้งค่าควบคุมและทำซ้ำได้ (ดีสำหรับดีบัก). Real user data คือประสบการณ์จริงของผู้ใช้ (ดีสำหรับลำดับความสำคัญ).\n\nวิธีที่ดีคือใช้ real user data หาเส้นทางที่แย่ที่สุด แล้วใช้ lab profiling อธิบาย ทำไม มันช้าและทดสอบการแก้ไขอย่างปลอดภัย
ปฏิบัติเหมือนรายงานบั๊ก:\n\n- ขั้นตอนที่ทำซ้ำได้ชัดเจน\n- ช่วงเวลาที่รู้สึกช้า (moment)\n- เมตริกที่วัดได้ (เมตริก + ค่า)\n- บันทึกเดียว (โปรไฟล์หรือเทรซ) ที่แสดงเวลาหายไป\n\nสิ่งนี้เปลี่ยนการถกเถียงจากความเห็น ("ต้องเป็นรูป") เป็นหลักฐาน
บันทึกการกระทำที่ช้าใน profiler แล้วมองหาก้อนเวลาที่ใหญ่ที่สุด:\n\n- ช่องว่างยาวขณะรอคำขอ → น่าจะเป็นเครือข่าย/แบ็กเอนด์\n- งานยาวบน main-thread → JavaScript หรืองาน UI หนัก\n- การวาด/เลย์เอาต์เยอะ → ปัญหาการเรนเดอร์\n- งานแพงซ้ำซ้อน → การเรนเดอร์ซ้ำหรือ loop ที่ไม่จำเป็น\n\nแล้วเขียนสมมติฐานเป็นประโยคสั้น ๆ ที่ทดสอบได้
เพราะจะทำให้ความสัมพันธ์เหตุและผลชัดเจน ถ้าคุณเปลี่ยนหลายอย่างพร้อมกันแล้วเร็วขึ้น คุณจะไม่รู้ว่าสิ่งไหนได้ผล ถ้ามันช้าลง การย้อนกลับก็ยุ่งยาก\n\nกฎปฏิบัติ: เปลี่ยนทีละหนึ่งอย่างที่อธิบายได้, ระบุเมตริกที่คาดว่าจะขยับ, แล้ววัดซ้ำ
ทำการทดสอบชุดเดิมแล้วเปรียบเทียบก่อน/หลังโดยใช้เมตริกเดิมเท่านั้น\n\nลดสัญญาณรบกวนด้วย:\n\n- รันหลายครั้งแล้วใช้ median\n- รักษาสถานะแคชให้คงที่\n- ปิดส่วนขยายหรือกระบวนการพื้นหลังถ้าเป็นไปได้\n- ทดสอบภาระเซิร์ฟเวอร์ใกล้เคียงกัน\n\nเก็บการเปลี่ยนแปลงไว้เฉพาะเมื่อเลขดีขึ้นภายใต้เงื่อนไขเดียวกัน
ข้อผิดพลาดทั่วไป:\n\n- ปรับในสิ่งที่ง่ายที่สุด ไม่ใช่สิ่งที่กินเวลามากที่สุด\n- ทดสอบแค่บนโน้ตบุ๊กแรง ๆ\n- เปลี่ยนเส้นทางผู้ใช้ทุกครั้งที่ทดสอบ\n- เฉลิมฉลองคะแนนแทนผลที่ผู้ใช้เห็นจริง\n- ข้ามการทดสอบซ้ำเพราะมัน "รู้สึกเร็วกว่"\n\nยึดเส้นทางเดียว, การตั้งค่าเดียว, และผลลัพธ์ที่ยืนยันได้
ใช้เพื่อทำให้การทดลองปลอดภัยและเปรียบเทียบได้:\n\n- ถ่าย snapshot ก่อนการเปลี่ยนแปลงเพื่อย้อนกลับอย่างรวดเร็ว\n- ใช้ Planning Mode เขียนเส้นทาง, baseline, และเมตริกความสำเร็จก่อนแก้\n- ส่งออกโค้ดหรือดีพลอยได้ แต่รักษาสคริปต์ทดสอบเดียวกันเพื่อให้ผลเทียบเคียงได้\n\nเครื่องมือช่วยได้ แต่ชัยชนะจริงมาจากวงจรที่ทำซ้ำได้: baseline → profile → change → verify.