บทนำ
ไม่ว่าคุณจะใช้บริบท 2D หรือ WebGL ก็ตาม ทุกคนที่เคยทำงานกับองค์ประกอบ <canvas>
ต่างก็รู้ว่าการแก้ไขข้อบกพร่องนั้นทำได้ยากมาก การทำงานกับ Canvas มักจะเกี่ยวข้องกับรายการการเรียกใช้ที่ยาวและติดตามได้ยาก
function draw() {
context.clearRect(0, 0, 258, 258);
context.fillStyle = "#EEEEEE";
context.beginPath();
context.arc(129, 129, 127, 0, 6.28, true);
context.closePath();
context.fill();
// … and on and on
}
บางครั้งคุณต้องการบันทึกวิธีการที่ส่งไปยังบริบทของ Canvas แล้วทำตามทีละขั้นตอน แต่โชคดีที่เรามีฟีเจอร์ใหม่ในเครื่องมือสำหรับนักพัฒนาเว็บของ Chrome ที่ช่วยให้เราสามารถดำเนินการดังกล่าวได้
บทความนี้จะแสดงวิธีใช้ฟีเจอร์นี้เพื่อเริ่มแก้ไขข้อบกพร่องของงานแคนวาส เครื่องมือตรวจสอบรองรับทั้งบริบท 2 มิติและ WebGL คุณจึงดูข้อมูลการแก้ไขข้อบกพร่องที่เป็นประโยชน์ได้ทันทีไม่ว่าจะใช้บริบทใด
เริ่มต้นใช้งาน
หากต้องการเริ่มต้นใช้งาน ให้ไปที่ about:flags
ใน Chrome แล้วเปิด"เปิดใช้การทดสอบเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์"
![การเปิดใช้การทดสอบเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ใน about:flags](https://web.dev/static/articles/canvas-inspection/image/enabling-developer-tools-9184814f9cf8e.png?hl=th)
จากนั้นไปที่เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ แล้วคลิกไอคอนรูปเฟือง ที่มุมขวาล่าง จากตรงนั้น คุณสามารถไปที่การทดสอบและเปิดใช้การตรวจสอบ Canvas ดังนี้
![การเปิดใช้การตรวจสอบ Canvas ในการทดสอบของเครื่องมือสำหรับนักพัฒนาเว็บ](https://web.dev/static/articles/canvas-inspection/image/enabling-canvas-inspectio-9c5a034c81419.png?hl=th)
คุณต้องปิดและเปิดเครื่องมือสำหรับนักพัฒนาเว็บอีกครั้ง (ใช้ Alt+R
หรือ Option+R
แทนก็ได้) เพื่อให้การเปลี่ยนแปลงมีผล
เมื่อ DevTools เปิดขึ้นมาอีกครั้ง ให้ไปที่ส่วนโปรไฟล์ แล้วคุณจะเห็นตัวเลือก Canvas Profiler ใหม่
ในการเริ่มต้น คุณจะเห็นได้ว่า Canvas Profiler ถูกปิดใช้ เมื่อคุณมีหน้าเว็บที่มี Canvas ที่ต้องการแก้ไขข้อบกพร่อง เพียงกดเปิดใช้ แล้วหน้าเว็บจะโหลดซ้ำพร้อมที่จะบันทึกการเรียก <canvas>
![การเปิดเครื่องมือวิเคราะห์ Canvas](https://web.dev/static/articles/canvas-inspection/image/switching-the-canvas-pro-8229763bb9c69.png?hl=th)
คุณจะต้องตัดสินใจว่าต้องการจับภาพเฟรมเดียวหรือเฟรมต่อเนื่อง โดยที่เฟรมจะเหมือนกับที่คุณเห็นในไทม์ไลน์ของเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ทุกประการ
เฟรมเดียวจะบันทึกการโทรจนกว่าจะสิ้นสุดเฟรมปัจจุบันแล้วหยุด ในทางกลับกัน เฟรมต่อเนื่องจะจับเฟรมทั้งหมดขององค์ประกอบ <canvas>
ทั้งหมดจนกว่าคุณจะบอกให้หยุด โหมดที่คุณเลือกจะขึ้นอยู่กับวิธีใช้องค์ประกอบ <canvas>
สำหรับภาพเคลื่อนไหวต่อเนื่อง คุณอาจต้องจับภาพเฟรมเดียว สําหรับภาพเคลื่อนไหวสั้นๆ ที่เกิดขึ้นเพื่อตอบสนองต่อเหตุการณ์ของผู้ใช้ คุณอาจต้องจับเฟรมต่อเนื่อง
![การเลือกจำนวนเฟรมที่จะจับภาพ](https://web.dev/static/articles/canvas-inspection/image/choosing-many-frames-ca-dac047b4f844.png?hl=th)
เท่านี้ก็พร้อมแล้วที่จะเริ่มบันทึก
การจับเฟรม
หากต้องการบันทึกภาพ ให้กดเริ่ม แล้วโต้ตอบกับแอปพลิเคชันตามปกติ หลังจากผ่านไปสักครู่ ให้กลับไปที่เครื่องมือสำหรับนักพัฒนาเว็บ และหากต้องการบันทึกติดต่อกัน ให้กดหยุด
ตอนนี้คุณมีโปรไฟล์ใหม่เอี่ยมในรายการทางด้านซ้ายพร้อมด้วยจํานวนการเรียกบริบทที่บันทึกไว้ขององค์ประกอบ <canvas>
ทั้งหมด คลิกโปรไฟล์แล้วคุณจะเห็นหน้าจอที่มีลักษณะดังนี้
![โปรไฟล์ Canvas ในเครื่องมือสำหรับนักพัฒนาเว็บ](https://web.dev/static/articles/canvas-inspection/image/a-canvas-profile-devtool-01c9b18075c5b.png?hl=th)
ในแผงด้านล่าง คุณจะเห็นรายการเฟรมที่บันทึกไว้ทั้งหมดซึ่งคุณสามารถดูทีละเฟรมได้ และเมื่อคลิกแต่ละเฟรม ภาพหน้าจอที่ด้านบนจะแสดงสถานะขององค์ประกอบ <canvas>
ในตอนท้ายของเฟรมนั้น หากมีองค์ประกอบ <canvas>
หลายรายการ คุณจะเลือกองค์ประกอบที่จะแสดงได้โดยใช้เมนูใต้ภาพหน้าจอ
![การเลือกบริบทของ Canvas](https://web.dev/static/articles/canvas-inspection/image/choosing-canvas-context-06332d0d7988c.png?hl=th)
คุณจะเห็นกลุ่มการเรียกใช้การวาดในเฟรม กลุ่มการเรียกให้วาดแต่ละกลุ่มมีการเรียกให้วาดรายการเดียว ซึ่งจะเป็นคําเรียกสุดท้ายในกลุ่ม แล้วการเรียกให้วาดคืออะไร สําหรับบริบท 2 มิติ จะเป็นค่าต่างๆ เช่น clearRect()
, drawImage()
, fill()
, stroke()
, putImageData()
หรือฟังก์ชันการแสดงผลข้อความ และสำหรับ WebGL จะเป็น clear()
, drawArrays()
หรือ drawElements()
โดยพื้นฐานแล้ว ทุกอย่างที่จะเป็นการเปลี่ยนแปลงเนื้อหาของบัฟเฟอร์การวาดภาพปัจจุบัน (หากคุณไม่สนใจเรื่องกราฟิก ให้คิดว่าบัฟเฟอร์เป็นบิตแมปที่มีพิกเซลที่เรากำลังจัดการ)
ตอนนี้คุณก็แค่ทำตามขั้นตอนในรายการ ซึ่งทำได้ที่ระดับเฟรม กลุ่มการเรียกให้วาด หรือระดับการเรียก ไม่ว่าคุณจะเลือกดูรายการด้วยวิธีใด (และจะมีปุ่มอยู่ใต้ภาพหน้าจอเพื่อช่วยคุณไปยังส่วนต่างๆ ได้อย่างรวดเร็ว) คุณจะเห็นบริบท ณ จุดนั้น ซึ่งหมายความว่าคุณจะค้นหาและแก้ไขข้อบกพร่องได้อย่างรวดเร็วเมื่อเกิดข้อบกพร่องขึ้น
![ปุ่มนำทางเพื่อไปยังรายการต่างๆ ได้อย่างสะดวก](https://web.dev/static/articles/canvas-inspection/image/navigation-buttons-conve-2f7cb15615b55.png?hl=th)
สังเกตความแตกต่าง
ฟีเจอร์ที่มีประโยชน์อีกอย่างหนึ่งคือความสามารถในการดูว่าพร็อพเพอร์ตี้และตัวแปรใดเปลี่ยนแปลงระหว่างการเรียก 2 ครั้ง
หากต้องการดู ให้คลิกปุ่มแถบด้านข้าง () แล้วมุมมองใหม่จะปรากฏขึ้น เมื่อเรียกใช้การวาด คุณจะเห็นพร็อพเพอร์ตี้ที่อัปเดตแล้ว บัฟเฟอร์หรืออาร์เรย์จะแสดงเนื้อหาหากวางเมาส์เหนือรายการดังกล่าว
![สังเกตความแตกต่าง](https://web.dev/static/articles/canvas-inspection/image/spot-difference-b9a3c02dccfeb.gif?hl=th)
แสดงความคิดเห็น
ตอนนี้คุณก็รู้วิธีแก้ไขข้อบกพร่องของงานแคนวาสในเครื่องมือสำหรับนักพัฒนาเว็บของ Chrome แล้ว หากมีความคิดเห็นเกี่ยวกับเครื่องมือ Canvas Profiler โปรดรายงานข้อบกพร่องหรือโพสต์ในกลุ่มเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome โปรดแจ้งให้เราทราบหากพบข้อบกพร่องหรือมีอะไรที่คุณต้องการเห็นเมื่อตรวจสอบ <canvas>
เนื่องจากเครื่องมือของ Chrome จะดีขึ้นได้ก็ต่อเมื่อนักพัฒนาซอฟต์แวร์ใช้งานและแสดงความคิดเห็น