การใช้ Lighthouse เพื่อปรับปรุงประสิทธิภาพการโหลดหน้าเว็บ

Lighthouse เป็นเครื่องมืออัตโนมัติสำหรับปรับปรุงคุณภาพของเว็บไซต์ เพียงคุณใส่ URL แล้วก็จะให้รายการแนะนำวิธีปรับปรุงประสิทธิภาพของหน้าเว็บ ทำให้หน้าเว็บเข้าถึงได้ง่ายขึ้น ปฏิบัติตามแนวทางปฏิบัติแนะนำ และอีกมากมาย คุณสามารถเรียกใช้จากในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome เป็นส่วนขยาย Chrome หรือแม้แต่เป็นโมดูลโหนดก็ได้ ซึ่งมีประโยชน์สำหรับการผสานรวมอย่างต่อเนื่อง

ในตอนนี้ Lighthouse ได้ให้คำแนะนำหลายอย่างในการปรับปรุงประสิทธิภาพในการโหลดหน้าเว็บ เช่น การเปิดใช้การบีบอัดข้อความหรือการลดสคริปต์ที่บล็อกการแสดงผล ทีม Lighthouse ยังส่งการตรวจสอบใหม่อย่างต่อเนื่องเพื่อให้คำแนะนำที่มีประโยชน์มากขึ้นในการทำให้เว็บไซต์เร็วขึ้น โพสต์นี้สรุปการตรวจสอบประสิทธิภาพที่มีประโยชน์ซึ่งคุณอาจไม่ทราบมาก่อน อย่างเช่น

รายละเอียดการทำงานเทรดหลัก

หากเคยใช้แผงประสิทธิภาพในเครื่องมือสำหรับนักพัฒนาเว็บมาก่อน ก็คงเป็นงานที่น่าเบื่อมากที่จะดูรายละเอียดว่าใช้เวลา CPU ไหนในการโหลดหน้าเว็บ เรายินดีที่จะแจ้งให้ทราบว่าขณะนี้ข้อมูลนี้พร้อมใช้งานได้อย่างสะดวกและง่ายดายแล้วผ่านการตรวจสอบรายละเอียดการทํางานของเทรดหลักใหม่

รายละเอียดกิจกรรมเทรดหลักใน Lighthouse
รูปที่ 1 รายละเอียดกิจกรรมเทรดหลักใน Lighthouse

การวินิจฉัยแบบใหม่นี้จะประเมินจำนวนกิจกรรมและประเภทของกิจกรรมที่เกิดขึ้นระหว่างการโหลดหน้าเว็บ ซึ่งคุณใช้เพื่อจัดการกับปัญหาด้านประสิทธิภาพการโหลดที่เกี่ยวข้องกับเลย์เอาต์ การประเมินสคริปต์ การแยกวิเคราะห์ และกิจกรรมอื่นๆ ได้

โหลดคำขอคีย์ล่วงหน้า

เมื่อเบราว์เซอร์เรียกทรัพยากร เบราว์เซอร์ก็จะค้นหาการอ้างอิงภายในเอกสารและทรัพยากรย่อย การทำเช่นนี้อาจมีประสิทธิภาพไม่ดีในบางครั้งเนื่องจากมีการค้นพบทรัพยากรที่สำคัญบางส่วนมาแทนที่ในกระบวนการโหลดหน้าเว็บ โชคดีที่ rel=preload ช่วยให้นักพัฒนาซอฟต์แวร์สามารถบอกใบ้แก่เบราว์เซอร์ที่เป็นไปตามนโยบายว่าควรดึงข้อมูลทรัพยากรใดโดยเร็วที่สุด การตรวจสอบคำขอคีย์ล่วงหน้าแบบใหม่ช่วยให้นักพัฒนาแอปทราบว่าทรัพยากรใดอาจได้รับประโยชน์จากการโหลดเร็วขึ้นภายในวันที่ rel=preload

การตรวจสอบคำขอโหลดคีย์ล่วงหน้าที่แนะนำรายการทรัพยากรที่ควรพิจารณาการโหลดล่วงหน้า
รูปที่ 2 การตรวจสอบคำขอโหลดคีย์ล่วงหน้าของ Lighthouse ที่แนะนำรายการทรัพยากรที่ควรพิจารณาการโหลดล่วงหน้า

คุณจำเป็นต้องทดสอบและเปรียบเทียบการเปลี่ยนแปลงด้านประสิทธิภาพกับ rel=preload เนื่องจากการเปลี่ยนแปลงอาจส่งผลต่อประสิทธิภาพการโหลดในแบบที่คุณคาดไม่ถึง เช่น การโหลดรูปภาพขนาดใหญ่ล่วงหน้าอาจทำให้การแสดงผลเริ่มต้นล่าช้า แต่ข้อดีคือรูปภาพที่โหลดล่วงหน้าจะปรากฏในเลย์เอาต์เร็วขึ้น ตรวจสอบให้แน่ใจเสมอว่าผลลัพธ์จะดีมาก

เวลาเปิดเครื่อง JavaScript สูง

เมื่อโหลด JavaScript มากเกินไป หน้าเว็บอาจไม่ตอบสนองเมื่อเบราว์เซอร์แยกวิเคราะห์ คอมไพล์ และดำเนินการ สคริปต์และโฆษณาของบุคคลที่สามเป็นแหล่งที่มาเฉพาะของกิจกรรมสคริปต์ที่มากเกินไป ซึ่งอาจทำให้อุปกรณ์ไม่ทำงานได้ การตรวจสอบเวลาในการเปิดเครื่อง JavaScript สูงแบบใหม่จะแสดงระยะเวลาที่ใช้ CPU ในแต่ละหน้าเว็บ รวมถึง URL ของสคริปต์นั้นๆ

Lighthouse แสดงจำนวนการประเมิน แยกวิเคราะห์ และรวบรวมเวลาสำหรับสคริปต์ในหน้าเว็บ
รูปที่ 3 Lighthouse แสดงระยะเวลาการประเมิน การแยกวิเคราะห์ และการรวบรวมสคริปต์ในหน้าเว็บ

เมื่อดำเนินการตรวจสอบนี้ คุณจะเปิดใช้ป้ายของบุคคลที่สามในแผงเครือข่ายและกรองรายการเพื่อระบุทรัพยากรสคริปต์ของบุคคลที่สามได้ด้วย ข้อมูลจากการตรวจสอบนี้จะทำให้คุณพร้อมค้นหาแหล่งที่มาของกิจกรรม JavaScript ที่มากเกินไปซึ่งจะเปลี่ยนหน้าต่างๆ จากไม่เร็วจนช้าๆ ได้ สำหรับสคริปต์เฉพาะสำหรับแอปพลิเคชัน คุณอาจใช้เทคนิคต่างๆ เช่น การแยกโค้ดและการเขย่าต้นไม้เพื่อจำกัดจำนวน JavaScript ในแต่ละหน้าของเว็บไซต์

หลีกเลี่ยงการเปลี่ยนเส้นทางหน้าเว็บ

บางครั้งเมื่อเบราว์เซอร์ขอ URL เซิร์ฟเวอร์อาจตอบกลับด้วยรหัสสถานะระดับ 300 ซึ่งจะทำให้เบราว์เซอร์เปลี่ยนเส้นทางไปยัง URL อื่น แม้ว่าการเปลี่ยนเส้นทางเป็นสิ่งจำเป็นสำหรับ SEO และความสะดวก แต่ก็เพิ่มเวลาในการตอบสนองให้คำขอด้วย โดยเฉพาะอย่างยิ่งหากเปลี่ยนเส้นทางไปยังต้นทางอื่นๆ ซึ่งอาจทำให้การค้นหา DNS และใช้เวลาเจรจาเพิ่มเติมกับการเชื่อมต่อ/TLS

ห่วงโซ่การเปลี่ยนเส้นทางตามที่เห็นในแผงเครือข่ายของ
เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ของ Chrome
รูปที่ 4 ห่วงโซ่การเปลี่ยนเส้นทางตามที่เห็นในแผงเครือข่าย ของเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ของ Chrome

การเปลี่ยนเส้นทางนั้นไม่เป็นที่ต้องการสำหรับหน้า Landing Page ในเว็บไซต์ของคุณ ตอนนี้ Lighthouse ได้มีการตรวจสอบหลีกเลี่ยงการเปลี่ยนเส้นทางหน้าเว็บเพื่อช่วยลดเวลาในการตอบสนองและปรับปรุงประสิทธิภาพการโหลด ซึ่งจะแจ้งให้คุณทราบเมื่อการนำทางทริกเกอร์การเปลี่ยนเส้นทาง

รายการการเปลี่ยนเส้นทางหน้าเว็บใน Lighthouse
รูปที่ 5 รายการการเปลี่ยนเส้นทางหน้าเว็บใน Lighthouse

โปรดทราบว่าการตรวจสอบนี้จะทริกเกอร์ใน Lighthouse เวอร์ชันสำหรับ DevTools ได้ยาก เนื่องจากการตรวจสอบนี้จะวิเคราะห์ URL ปัจจุบันในแถบที่อยู่ของหน้าเว็บ ซึ่งจะแสดงความละเอียดของการเปลี่ยนเส้นทางทั้งหมด คุณน่าจะเห็นการตรวจสอบนี้ปรากฏใน Node CLI

JavaScript ที่ไม่ได้ใช้

โค้ดที่ใช้งานไม่ได้อาจเป็นปัญหาร้ายแรงในแอปพลิเคชันที่มี JavaScript จำนวนมาก แม้ว่าวิธีนี้จะไม่ทำให้เกิดต้นทุนในการดําเนินการเนื่องจากไม่เคยเกิดขึ้น แต่ก็จะก่อให้เกิดผลกระทบที่ไม่พึงประสงค์อื่นๆ ด้วย เบราว์เซอร์จะยังคงดาวน์โหลด แยกวิเคราะห์ และคอมไพล์โค้ดที่เสียหายต่อไป ซึ่งมีผลต่อประสิทธิภาพการโหลดและเวลาที่ใช้ในการเปิดเครื่อง JavaScript การตรวจสอบ JavaScript ที่ไม่ได้ใช้นั้นคล้ายกับแผงการครอบคลุมในเครื่องมือสำหรับนักพัฒนาเว็บ โดยจะแสดง JavaScript ที่ดาวน์โหลดโดยหน้าปัจจุบัน แต่ไม่มีการใช้งาน

Lighthouse แสดงจำนวน JavaScript
ที่ไม่ได้ใช้ในหน้าเว็บ
รูปที่ 6 Lighthouse แสดงจำนวน JavaScript ที่ไม่ได้ใช้ในหน้าเว็บ

ด้วยการตรวจสอบนี้ คุณจะระบุโค้ดที่ใช้งานไม่ได้ในแอปพลิเคชันของคุณ และนำออกเพื่อปรับปรุงประสิทธิภาพการโหลดและลดการใช้ทรัพยากรของระบบ เคล็ดลับมือโปร: คุณยังใช้แผงการครอบคลุมโค้ดในเครื่องมือสำหรับนักพัฒนาเว็บของ Chrome เพื่อค้นหาข้อมูลนี้ได้ด้วย

ใช้นโยบายแคชที่ไม่มีประสิทธิภาพกับเนื้อหาคงที่

แม้ว่าคำแนะนำด้านประสิทธิภาพมักมุ่งเน้นที่การเพิ่มความเร็วของเว็บไซต์สำหรับผู้ใช้ครั้งแรก แต่คุณก็ควรใช้การแคชเพื่อปรับปรุงประสิทธิภาพการโหลดสำหรับผู้ใช้ที่กลับมาด้วย การใช้นโยบายแคชที่ไม่มีประสิทธิภาพเกี่ยวกับเนื้อหาแบบคงที่จะตรวจสอบส่วนหัวการแคชสำหรับทรัพยากรเครือข่าย และแจ้งให้คุณทราบหากนโยบายแคชสำหรับทรัพยากรแบบคงที่ต่ำกว่ามาตรฐาน

ตารางชิ้นงานแบบคงที่
รูปที่ 7

การตรวจสอบนี้จะช่วยให้คุณค้นหาและแก้ไขปัญหาเกี่ยวกับนโยบายแคชปัจจุบันได้อย่างง่ายดาย การทำเช่นนี้จะช่วยปรับปรุงประสิทธิภาพ สำหรับผู้ใช้ที่กลับมาได้อย่างมาก พวกเขาจะชื่นชอบความเร็วที่เพิ่มขึ้นด้วย!

หลีกเลี่ยงการเดินทางไป-กลับที่มีราคาสูงหลายๆ รอบไปยังต้นทางใดก็ได้

เมื่อเบราว์เซอร์เรียกทรัพยากรจากเซิร์ฟเวอร์ อาจใช้เวลานานในการค้นหา DNS และสร้างการเชื่อมต่อกับเซิร์ฟเวอร์ rel=preconnect ทำให้นักพัฒนาซอฟต์แวร์มาสก์เวลาในการตอบสนองนี้ได้ด้วยการสร้างการเชื่อมต่อกับเซิร์ฟเวอร์อื่นก่อนที่เบราว์เซอร์จะถึงกำหนดส่ง การตรวจสอบหลีกเลี่ยงการเดินทางหลายรอบในต้นทางที่หลากหลายจะช่วยให้คุณค้นพบโอกาสในการใช้ rel=preconnect!

รายการต้นทางที่แนะนำสำหรับ
rel=preconnectin Lighthouse
ภาพที่ 8 รายการต้นทางที่แนะนำสำหรับ rel=preconnect ใน Lighthouse

เมื่อเวลาในการตอบสนองของเนื้อหาแบบข้ามต้นทางลดลง ผู้ใช้จะรู้สึกว่าสิ่งต่างๆ เปลี่ยนไปเร็วขึ้นเล็กน้อย การตรวจสอบ Lighthouse ใหม่นี้จะทำให้คุณได้เรียนรู้ถึงโอกาสใหม่ๆ ในการใช้ rel=preconnect เพื่อทำเช่นนั้น

ใช้รูปแบบวิดีโอสำหรับเนื้อหาภาพเคลื่อนไหว

GIF แบบเคลื่อนไหวใหญ่ ซึ่งมักจะใช้อย่างน้อยหลายร้อยกิโลไบต์ ถ้าไม่มีข้อมูลหลายเมกะไบต์ หากคุณสนใจเรื่องประสิทธิภาพการโหลด ก็ต้องแปลง GIF เหล่านั้นเป็นวิดีโอ โชคดีที่การตรวจสอบการใช้รูปแบบวิดีโอสำหรับเนื้อหาภาพเคลื่อนไหวช่วยได้

คำแนะนำในการแปลง GIF เป็นวิดีโอใน
Lighthouse
รูปที่ 9 คำแนะนำในการแปลง GIF เป็น วิดีโอใน Lighthouse

หากเว็บไซต์มี GIF ที่มีขนาดเกิน 100 KB การตรวจสอบนี้จะแจ้งว่าไม่เหมาะสมโดยอัตโนมัติและนำคุณไปยังคำแนะนำเกี่ยวกับวิธีแปลงเป็นวิดีโอและฝัง GIF ไว้ เว็บไซต์อย่าง Imgur ปรับปรุงประสิทธิภาพในการโหลดได้อย่างมากด้วยการแปลง GIF เป็นวิดีโอ นอกจากนี้ หากเว็บไซต์ใช้แพ็กเกจโฮสติ้งที่มีแบนด์วิดท์แบบจำกัดปริมาณ การประหยัดค่าใช้จ่ายที่เป็นไปได้เพียงอย่างเดียวก็อาจเพียงพอแล้วที่จะโน้มน้าวคุณ

ข้อความทั้งหมดจะยังมองเห็นได้ในระหว่างการโหลดแบบอักษรบนเว็บ

เมื่อเราโหลดแบบอักษรเว็บสำหรับหน้า เบราว์เซอร์มักจะแสดงข้อความที่มองไม่เห็นจนกว่าแบบอักษรจะโหลด ปรากฏการณ์นี้ที่รู้จักกันในชื่อ Flash of Invisible Text (FOIT)) อาจเหมาะกับคุณมากกว่าในแง่ของการออกแบบ แต่อันที่จริงมันเป็นปัญหาจริงๆ ข้อความที่ถูกบล็อกจากการแสดงผลจะไม่สามารถอ่านได้จนกว่าข้อความดังกล่าวจะแสดงผลและปรากฏให้เห็น ในกรณีที่มีเวลาในการตอบสนองสูงและ/หรือการเชื่อมต่อที่มีแบนด์วิดท์สูง จะหมายความว่าส่วนสำคัญของประสบการณ์ของผู้ใช้ขาดหายไป และยังอาจเป็นปัญหาด้านประสิทธิภาพทางการรับรู้ที่หน้าเว็บไม่แสดงเนื้อหาที่มีความหมายเร็วที่สุดเท่าที่ทำได้ โชคดีที่การตรวจสอบข้อความทั้งหมดยังคงแสดงให้เห็นระหว่างการโหลดแบบอักษรเว็บจะช่วยให้คุณพบโอกาสในการแก้ไขปัญหานี้ในเว็บไซต์

Lighthouse แนะนำการปรับปรุง
การแสดงแบบอักษร
รูปที่ 10 ประภาคารที่ให้คำแนะนำ ในการปรับปรุงการแสดงแบบอักษร

หาก Lighthouse พบแบบอักษรเว็บในแอปพลิเคชันที่ทำให้การแสดงผลข้อความล่าช้า ก็มีวิธีแก้ไขที่เป็นไปได้อยู่ 2-3 ข้อ คุณควบคุมการแสดงข้อความได้ด้วยพร็อพเพอร์ตี้ CSS font-display และ/หรือ Font Loading API หากต้องการข้อมูลแบบเจาะลึก ลองอ่านคู่มือที่ครอบคลุมสำหรับกลยุทธ์การโหลดแบบอักษร ซึ่งเป็นคู่มือที่ยอดเยี่ยมจาก Zach Leatherman ซึ่งเป็นแหล่งข้อมูลที่ยอดเยี่ยมสำหรับการโหลดแบบอักษรที่เหมาะสม

CSS และ JavaScript ที่ไม่มีความละเอียด

การลดขนาดเป็นเทคนิคที่แนะนำมาเนื่องจากประสิทธิภาพของเว็บเป็นสิ่งสำคัญและด้วยเหตุผลที่ดี เครื่องมือนี้ลดขนาดทรัพยากรแบบข้อความได้อย่างมาก ซึ่งส่งผลดีต่อประสิทธิภาพในการโหลด อย่างไรก็ตาม คุณอาจมองข้ามการเพิ่มประสิทธิภาพนี้ไปได้ง่ายๆ โดยเฉพาะอย่างยิ่งหากกระบวนการสร้างไม่จัดการเรื่องนี้ให้คุณ การตรวจสอบ Minify CSS และ Minify JavaScript จะรวบรวมรายการทรัพยากรที่ยังไม่ถูกย่อซึ่งพบในหน้าปัจจุบัน จากตรงนั้น คุณสามารถลดขนาดไฟล์เหล่านั้นด้วยตนเอง หรือเสริมระบบบิลด์เพื่อสร้างให้คุณ

กฎ CSS ที่ไม่ได้ใช้

เมื่อเว็บไซต์ค่อนข้างยาว แหล่งที่มาของการใช้งานที่เกินความจำเป็นมาในรูปแบบของกฎ CSS ที่ไม่ได้ใช้ ซึ่งไม่จำเป็นต่อการทำงานของเว็บไซต์อีกต่อไป แต่ก็ยังใช้แบนด์วิดท์อยู่ การตรวจสอบกฎ CSS ที่ไม่ได้ใช้จะแสดงทรัพยากร CSS ในหน้าที่มี CSS ที่ไม่ได้ใช้เพื่อความสะดวก

ประภาคารแสดงรายการทรัพยากร CSS
ที่มีกฎ CSS ที่ไม่ได้ใช้
รูปที่ 11 ประภาคารแสดงรายการทรัพยากร CSS ที่มีกฎ CSS ที่ไม่ได้ใช้

หาก Lighthouse พบ CSS ที่ไม่ได้ใช้ในหน้าเว็บ ก็มีวิธีแก้ไขดังนี้ UnCSS เป็นเครื่องมือหนึ่งที่จะดำเนินการให้คุณโดยอัตโนมัติ (แต่ต้องใช้ด้วยความระมัดระวัง) วิธีการที่ต้องดำเนินการด้วยตนเองมากกว่าจะใช้แผงการครอบคลุมของโค้ดในเครื่องมือสำหรับนักพัฒนาเว็บ แต่อย่าลืมว่า CSS ที่ไม่ได้ใช้ในหน้าหนึ่งอาจจำเป็นในหน้าอื่น อีกวิธีหนึ่งคือการแยก CSS ออกเป็นไฟล์เฉพาะเทมเพลตซึ่งจะโหลดเมื่อจำเป็นเท่านั้น ไม่ว่าคุณจะตัดสินใจทำอะไร Lighthouse จะพร้อมช่วยให้คุณ รู้ว่า CSS ของคุณยากมากหรือไม่

ลองใช้ Lighthouse

หากตื่นเต้นกับการตรวจสอบใหม่เหล่านี้ ก็อัปเดต Lighthouse แล้วลองได้เลย

  • ส่วนขยาย Lighthouse ของ Chrome ควรอัปเดตโดยอัตโนมัติ แต่คุณจะอัปเดตด้วยตนเองได้ผ่าน chrome://extensions
  • ในเครื่องมือสำหรับนักพัฒนาเว็บ คุณจะเรียกใช้ Lighthouse ในแผงการตรวจสอบได้ Chrome จะอัปเดตเป็นเวอร์ชันใหม่ทุก 6 สัปดาห์โดยประมาณ ดังนั้นการตรวจสอบใหม่ๆ อาจไม่พร้อมใช้งาน หากไม่ต้องการใช้การตรวจสอบล่าสุดที่มีอยู่ คุณจะเรียกใช้โค้ด Chrome ล่าสุดได้โดยดาวน์โหลด Chrome Canary
  • สำหรับผู้ใช้โหนด: เรียกใช้ npm update lighthouse หรือ npm update lighthouse -g หากคุณติดตั้ง Lighthouse ทั่วโลก

ขอขอบคุณเป็นพิเศษสำหรับ Kayce Basques, Patrick Hulce, Addy Osmani และ Vinamrata Singal สำหรับความคิดเห็นอันมีค่า ซึ่งช่วยปรับปรุงคุณภาพของบทความนี้ได้เป็นอย่างมาก