แตกข้อมูล CSS ที่สำคัญและแทรกในบรรทัดด้วยค่า Critical

ไม่ว่าคุณจะใช้ไลบรารี UI หรือสร้างสไตล์ด้วยตนเอง การส่ง CSS จํานวนมากจะทําให้การแสดงผลล่าช้าเนื่องจากเบราว์เซอร์ต้องดาวน์โหลดและแยกวิเคราะห์ไฟล์ CSS ก่อนจึงจะแสดงหน้าเว็บได้

แกลเลอรีไอศกรีมที่ตอบสนองตามอุปกรณ์นี้สร้างขึ้นด้วย Bootstrap ไลบรารี UI อย่าง Bootstrap เร่งการพัฒนา แต่มักจะลด CSS ที่มากเกินไปและไม่จำเป็น ซึ่งจะทำให้เวลาในการโหลดของคุณช้าลง Bootstrap 4 มีขนาดใหญ่ 187 KB ส่วน Semantic UI ซึ่งเป็นไลบรารี UI อีกรายการหนึ่งมีขนาดใหญ่ถึง 730 KB เมื่อยังไม่ได้บีบอัด แม้ว่าจะได้รับการบีบอัดและแปลงเป็นไฟล์ ZIP แล้ว Bootstrap ยังคงมีขนาดใหญ่ประมาณ 20 KB ซึ่งมากกว่าเกณฑ์ 14 KB สำหรับการรับส่งข้อมูลครั้งแรก

สำคัญเป็นเครื่องมือที่ดึงข้อมูล CSS ครึ่งหน้าบน บีบอัด และแทรกในหน้า ซึ่งช่วยให้ระบบแสดงผลเนื้อหาด้านบนโฆษณาโดยเร็วที่สุด แม้ว่า CSS สําหรับส่วนอื่นๆ ของหน้าจะยังไม่โหลดก็ตาม ในโค้ดแล็บนี้ คุณจะได้เรียนรู้วิธีใช้โมดูล npm ของ Critical

วัดระยะทาง

  • หากต้องการดูตัวอย่างเว็บไซต์ ให้กดดูแอป แล้วกด เต็มหน้าจอ เต็มหน้าจอ

วิธีเรียกใช้การตรวจสอบ Lighthouse ในเว็บไซต์นี้

  1. กดแป้น Control+Shift+J (หรือ Command+Option+J ใน Mac) เพื่อเปิดเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์
  2. คลิกแท็บ Lighthouse
  3. คลิกอุปกรณ์เคลื่อนที่
  4. เลือกช่องทําเครื่องหมายประสิทธิภาพ
  5. ล้างช่องทำเครื่องหมายที่เหลือในส่วนการตรวจสอบ
  6. คลิก3G ที่เร็วจำลอง ชะลอความเร็ว CPU ลง 4 เท่า
  7. เลือกช่องทำเครื่องหมายล้างพื้นที่เก็บข้อมูล เมื่อเลือกตัวเลือกนี้ Lighthouse จะไม่โหลดทรัพยากรจากแคช ซึ่งเป็นการจำลองวิธีที่ผู้เข้าชมครั้งแรกจะได้รับประสบการณ์ในการใช้งานหน้าเว็บ
  8. คลิกเรียกใช้การตรวจสอบ

แผงการตรวจสอบของเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ที่ทำงานด้วย Lighthouse

เมื่อเรียกใช้การตรวจสอบบนเครื่อง ผลลัพธ์จริงอาจแตกต่างกันไป แต่ในมุมมองแถบฟิล์ม คุณจะสังเกตเห็นว่าแอปมีหน้าจอว่างเปล่ามาระยะหนึ่งแล้วก่อนที่จะแสดงผลเนื้อหาในที่สุด ด้วยเหตุนี้ First Contentful Paint (FCP) จึงสูงและคะแนนประสิทธิภาพโดยรวมจึงไม่ดี

การตรวจสอบ Lighthouse ที่แสดงคะแนนประสิทธิภาพ 84, FCP 3 วินาที และมุมมองภาพสไลด์ของการโหลดแอป

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

รายการ "กำจัดทรัพยากรที่บล็อกการแสดงผล" ในส่วน "โอกาส" ของการตรวจสอบ Lighthouse

เพิ่มประสิทธิภาพ

  • คลิกรีมิกซ์เพื่อแก้ไขเพื่อให้โปรเจ็กต์แก้ไขได้

เพื่อให้การดำเนินการเป็นไปได้เร็วขึ้น ระบบได้ติดตั้ง Critical แล้วและมีไฟล์การกำหนดค่าที่ว่างเปล่าอยู่ใน Codelab

ในไฟล์การกําหนดค่า critical.js ให้เพิ่มการอ้างอิงถึง Critical แล้วเรียกใช้ฟังก์ชัน critical.generate() ฟังก์ชันนี้จะยอมรับออบเจ็กต์ที่มีการกำหนดค่า

const critical = require('critical');

critical.generate({
    // configuration
},(err, output) => {
  if (err) {
    console.error(err);
  } else if (output) {
    console.log('Generated critical CSS');
  }
});

การจัดการข้อผิดพลาดไม่ใช่สิ่งจําเป็น แต่ทําได้ง่ายเพื่อประเมินความสําเร็จของการดำเนินการในคอนโซล

กำหนดค่าที่สำคัญ

ตารางด้านล่างมีตัวเลือก "สำคัญ" ที่มีประโยชน์บางส่วน คุณดูตัวเลือกทั้งหมดที่มีให้ใช้งานใน GitHub ได้

ตัวเลือก ประเภท คำอธิบาย
base สตริง ไดเรกทอรีฐานสำหรับไฟล์
src สตริง ไฟล์ต้นฉบับ HTML
dest สตริง เป้าหมายสำหรับไฟล์เอาต์พุต หากแทรก CSS ไว้ในหน้า ไฟล์เอาต์พุตจะเป็น HTML หากไม่ใช่ เอาต์พุตจะเป็นไฟล์ CSS
width height ตัวเลข ความกว้างและความสูงของวิวพอร์ตในหน่วยพิกเซล
dimensions อาร์เรย์ มีออบเจ็กต์ที่มีคุณสมบัติความกว้างและความสูง ออบเจ็กต์เหล่านี้แสดงวิวพอร์ตที่คุณต้องการกำหนดเป้าหมายด้วย CSS ครึ่งหน้าบน หากมี Media Queries ใน CSS คุณจะสร้าง CSS ที่สำคัญซึ่งครอบคลุมขนาดวิวพอร์ตหลายขนาดได้
inline บูลีน เมื่อตั้งค่าเป็น "จริง" ระบบจะแทรก CSS ที่สำคัญที่สร้างขึ้นไว้ในไฟล์ต้นฉบับ HTML
minify บูลีน เมื่อตั้งค่าเป็น "จริง" Critical จะลดขนาด CSS ที่สำคัญที่สร้างขึ้น ละเว้นได้เมื่อดึงข้อมูล CSS ที่สำคัญสำหรับความละเอียดหลายรายการ เนื่องจาก Critical จะย่อขนาดโดยอัตโนมัติเพื่อหลีกเลี่ยงการรวมกฎที่ซ้ำกัน

ด้านล่างนี้คือตัวอย่างการกําหนดค่าสําหรับการดึงข้อมูล CSS สําคัญสําหรับความละเอียดหลายรายการ เพิ่มลงใน critical.js หรือลองเล่นและปรับเปลี่ยนตัวเลือก

critical.generate({
  base: 'public/',
  src: './index.html',
  dest: './index.html',
  inline: true,
  dimensions: [
    {
      height: 500,
      width: 300,
    },
    {
      height: 720,
      width: 1280,
    },
  ]
}, (err, output) => {
  if (err) {
    console.error(err);
  } else if (output) {
    console.log('Generated critical CSS');
  }
});

ในตัวอย่างนี้ index.html จะเป็นทั้งไฟล์ต้นทางและไฟล์ปลายทางเนื่องจากตัวเลือก inline มีการตั้งค่าเป็น "จริง" Critical จะอ่านไฟล์ต้นทาง HTML ก่อน จากนั้นดึง CSS ที่สําคัญออกมา แล้วเขียนทับ index.html ด้วย CSS ที่สําคัญซึ่งแทรกอยู่ใน <head>

อาร์เรย์ dimensions ระบุขนาดวิวพอร์ต 2 ขนาด ได้แก่ 300 x 500 สำหรับหน้าจอขนาดเล็กพิเศษและ 1280 x 720 สำหรับหน้าจอแล็ปท็อปมาตรฐาน

ระบบจะไม่แสดงตัวเลือก minify เนื่องจาก Critical จะลดขนาด CSS ที่ดึงข้อมูลโดยอัตโนมัติเมื่อมีการกำหนดขนาดวิวพอร์ตหลายขนาด

เรียกใช้การทดสอบที่สำคัญ

เพิ่ม "สำคัญ" ในสคริปต์ใน package.json

scripts: {
  "start": "node server.js",
  "critical": "node critical.js"
}
  1. คลิก Terminal (หมายเหตุ: หากปุ่ม Terminal ไม่แสดง คุณอาจต้องใช้ตัวเลือก "เต็มหน้าจอ")

หากต้องการสร้าง CSS ที่สำคัญ ให้เรียกใช้คำสั่งต่อไปนี้ในคอนโซล

npm run critical
refresh
ข้อความแจ้งสำเร็จที่ระบุว่า &quot;สร้าง CSS ที่สำคัญแล้ว&quot; ในคอนโซล
ข้อความแสดงความสําเร็จในคอนโซล

ตอนนี้ในแท็ก <head> ของ index.html ระบบจะแทรก CSS ที่สําคัญซึ่งสร้างขึ้นไว้ระหว่างแท็ก <style> ตามด้วยสคริปต์ที่โหลด CSS ที่เหลือแบบไม่พร้อมกัน

index.html ที่มี CSS ที่สําคัญซึ่งแทรกในหน้า
CSS ที่สําคัญแบบแทรก

วัดอีกครั้ง

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

การตรวจสอบ Lighthouse แสดงคะแนนประสิทธิภาพ 100 คะแนน, FCP 0.9 วินาที และมุมมองแถบฟิล์มที่ดีขึ้นสำหรับการโหลดแอป