แก้ปัญหา Eliminate Render Blocking Resources จาก Link CSS
หลังจากนำ Markdown Style ของ GitHub มาแปะ คะแนน PageSpeed Insights ก็ตกอีกแล้ว 😭 เลยต้องมาแก้กัน
ทำไมคะแนนถึงตก
ปัญหา Eliminate render-blocking resources เนี่ย มันเกิดจากมีบางคำสั่งทำงานนานและคำสั่งนี้มันดันไปขัดขวางการทำงานของส่วนการแสดงผล
ในกรณีของผมคือเครื่องของผู้อ่านต้องทำการโหลด <link rel="stylesheet"> จนเสร็จก่อนถึงเริ่มแสดงผล แปลว่าผู้อ่านจะเห็นหน้าสีขาวซักพักก่อนข้อมูลจะเริ่มปรากฏให้เห็น (จริง ๆ ก็ไม่ได้ช้าอะไร PageSpeed Insights ชอบทำให้เป็นเรื่องใหญ่ 🙄)
แก้ไขอย่างไร
วิธีแก้ตามคำแนะนำที่ให้มาใน PageSpeed Insights คือ
- นำโค้ด CSS มาแปะใน
<head>เลย (Internal CSS) หรือ - โหลดแบบ Asynchronously (ใช้
rel="preload")
ซึ่งผมไม่เลือกทั้ง 2 วิธีนี้ (อ้าว 555)
- ที่ไม่เลือกข้อ 1 เพราะไม่อยากให้ไฟล์ HTML มันใหญ่เกินไป
- ที่ไม่เลือกข้อ 2 เพราะเว็บบราวเซอร์เพิ่งจะ รองรับครบ (ใช่ Firefox นายน่ะแหล่ะ 😠 ช้าไปนะ)
เลยขอใช้วิธีเก่าดั้งเดิมที่เคยใช้มาก่อนแทน
แล้วใช้วิธีไหน
ที่เราต้องทำก็คือการเพิ่มโค้ด media="print" onload="this.media='all' ไปใน Link ของเรา
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/4.0.0/github-markdown.min.css" integrity="sha512-Oy18vBnbSJkXTndr2n6lDMO5NN31UljR8e/ICzVPrGpSud4Gkckb8yUpqhKuUNoE+o9gAb4O/rAxxw1ojyUVzg==" crossorigin="anonymous" media="print" onload="this.media='all'"/> |
อธิบายการทำงานของโค้ดนี้นิดนึง
เราตั้ง CSS ตัวนี้ให้เป็น CSS สำหรับการพิมพ์ (media="print") เท่านั้นก่อน (เว็บบราวเซอร์จะไม่โหลดหากไม่ได้แสดงผลเพื่อการพิมพ์) หลังจากนั้นจึงค่อยเปลี่ยนเป็น CSS สำหรับทุกอย่าง (media="all") เพื่อไม่ให้มันไปขัดขวางการแสดงผลในตอนแรกให้คะแนนเราตก
Happy Coding ครับ 😎