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

เผยแพร่แล้ว: 2022-05-04

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

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

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

นั่นคือที่มาของคำแนะนำทรัพยากร

ในบรรทัดต่อไปนี้ เราจะมาดูวิธีใช้ประโยชน์จากข้อดีเหล่านี้ให้ดีที่สุด

มาดำดิ่งลงไปกันเถอะ


วิธีการทำงานของเบราว์เซอร์ (โดยสังเขป)


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

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


เราสามารถแบ่งกระบวนการทั้งหมดของเบราว์เซอร์ที่โหลดหน้าเว็บออกเป็นสามขั้นตอน:

  • สร้างการเชื่อมต่อ
  • ดาวน์โหลด แยกวิเคราะห์ และแสดงโค้ด
  • ทำให้หน้าโต้ตอบ;

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

เมื่อทุกอย่างเสร็จสิ้น เบราว์เซอร์สามารถดำเนินการดาวน์โหลดและแยกวิเคราะห์ข้อมูล สร้าง Document Object Model (DOM) และ CSS Object Model (CSSOM) แล้วแสดงผลเนื้อหา

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

โดยสรุป นั่นคือกระบวนการเบื้องหลังทุกครั้งที่โหลดหน้า

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


คำแนะนำทรัพยากร: ดึงข้อมูลล่วงหน้า เชื่อมต่อล่วงหน้า โหลดล่วงหน้า

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

คำแนะนำทรัพยากรทั้งหมดใช้แอตทริบิวต์ rel ขององค์ประกอบ ลิงก์ ที่คุณจะพบในส่วน หัว ของเอกสาร HTML

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

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

โหลดล่วงหน้า

link rel=prefetch เป็นคำใบ้ทรัพยากรที่มีลำดับความสำคัญต่ำที่ช่วยให้เบราว์เซอร์ดึงทรัพยากรที่อาจจำเป็นในภายหลังและจัดเก็บไว้ในแคชของเบราว์เซอร์

กระบวนการดึงข้อมูลล่วงหน้า

เนื่องจากการ ดึงข้อมูลล่วงหน้า ตั้งค่าลำดับความสำคัญต่ำมาก อย่าใช้คำใบ้นี้สำหรับไฟล์ที่มีความสำคัญสูง

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

คุณสามารถปรับปรุงเมตริกต่างๆ เช่น First Contentful Paint และ Time to Interactive โดยคาดการณ์ขั้นตอนของผู้เข้าชมในไซต์ของคุณและดึงทรัพยากรล่วงหน้า สิ่งที่ Netflix ทำและลดเวลาในการโต้ตอบลง 30%

ทุกสิ่งที่เรากล่าวถึงจนถึงจุดนี้เกี่ยวข้องกับการดึงข้อมูลล่วงหน้า หรือที่เรียกว่าการดึงข้อมูลล่วงหน้าของลิงก์ แต่มีการดึงข้อมูลล่วงหน้าอีกสองประเภทที่สำคัญเท่าเทียมกัน และเราต้องพูดถึง:

1. การดึงข้อมูล DNS ล่วงหน้า
เบราว์เซอร์จำเป็นต้องทำการค้นหา DNS เพื่อแปลงชื่อโฮสต์ (URL) เป็นที่อยู่ IP ก่อนเชื่อมต่อกับโฮสต์ (เซิร์ฟเวอร์ต้นทาง)

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

ในกรณีเหล่านี้ การใช้คำใบ้ dns-prefetch อาจช่วยประหยัดเวลาได้สองสามมิลลิวินาที เนื่องจากคำสั่งบอกให้เบราว์เซอร์เริ่มกระบวนการนั้นทันที แทนที่จะพบความต้องการในภายหลังในกระบวนการโหลด

dns-prefetch


ตามที่แนะนำใน Web Almanac 2021 แนวปฏิบัติที่ดีคือการรวม DNS-prefetch เข้ากับคำใบ้การ เชื่อมต่อล่วงหน้า เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด คุณสามารถดูสาเหตุได้ในส่วนที่เราพูดถึงการ เชื่อมต่อล่วงหน้า

2. การแสดงล่วงหน้า
การแสดงผลล่วงหน้านั้นคล้ายกับการดึงข้อมูลล่วงหน้าโดยจะปรับทรัพยากรให้เหมาะสมซึ่งผู้ใช้อาจนำทางไปยังส่วนถัดไป ความแตกต่างคือ การแสดงผลล่วงหน้าจริงทำให้ทั้งหน้า แทนทรัพยากรเฉพาะ

พรีเรนเดอร์


เชื่อมต่อล่วงหน้า

เช่นเดียวกับ dns-prefetch คำสั่ง เชื่อมต่อล่วงหน้า ช่วยให้เบราว์เซอร์สร้างการเชื่อมต่อตั้งแต่เนิ่นๆ ก่อนส่งคำขอเริ่มต้นไปยังเซิร์ฟเวอร์

อย่างไรก็ตาม คำใบ้การ เชื่อมต่อล่วงหน้า จะล้ำหน้าไปอีกขั้น ในขณะที่ทำการค้นหา DNS ยังรวมถึงการเจรจา TLS และ TCP handshakes ซึ่งจะช่วยลดเวลาในการตอบสนองของการเดินทางไปกลับและประหยัดเวลาได้มากขึ้น

มีและไม่มีการเชื่อมต่อล่วงหน้า

แต่มีคำถามตามมาว่า

หากการ เชื่อมต่อล่วงหน้า ทำทุกอย่าง ที่ dns-prefetch ทำ และเหนือกว่านั้น ทำไมฉันถึงใช้ dns-prefetch ตั้งแต่แรก

ในกรณีส่วนใหญ่ การ เชื่อมต่อล่วงหน้า เป็นตัวเลือกที่ดีกว่าสำหรับ dns-prefetch แต่ปัญหาคือการ เชื่อมต่อล่วงหน้า ไม่ได้รับการสนับสนุนโดยเบราว์เซอร์บางตัว:

รองรับการเชื่อมต่อเบราว์เซอร์ล่วงหน้า
ที่มา: caniuse.com

ข้อดีคือคุณสามารถใช้มันร่วมกันเพื่อให้ได้ประโยชน์สูงสุด คุณสามารถได้รับประโยชน์จากการ เชื่อมต่อล่วงหน้า ในเบราว์เซอร์ที่สนับสนุนการสำรอง DNS-prefetch :

เชื่อมต่อล่วงหน้าและ dns-prefetch

ตามที่ Google:

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

ย้อนกลับไปในปี 2019 Chrome สามารถปรับปรุง Time To Interactive ได้เกือบ 1 วินาทีโดยเชื่อมต่อกับต้นกำเนิดที่สำคัญล่วงหน้า


พรีโหลด

ก่อนที่จะอธิบายว่าคำสั่ง พรีโหลด ทำงานอย่างไร เราต้องทำให้ชัดเจนก่อน

แม้ว่าการ โหลดล่วงหน้า มักจะถูกกล่าวถึงว่าเป็น “คำแนะนำทรัพยากร” แต่ก็ไม่ใช่ โหลดล่วงหน้าเป็นการดึงข้อมูลประกาศ และ จำเป็นสำหรับเบราว์เซอร์ ทำให้เป็นคำสั่งมากกว่าคำใบ้

ดังที่กล่าวไว้ พรีโหลด ใช้เพื่อบังคับให้เบราว์เซอร์ดาวน์โหลดทรัพยากร เร็วกว่าที่เบราว์เซอร์จะค้นพบเพราะเป็นสิ่งสำคัญสำหรับหน้า

คำสั่งการ โหลดล่วงหน้า ทำงานได้ดีที่สุดกับทรัพยากรที่เป็นส่วนหนึ่งของเส้นทางการแสดงผลที่สำคัญ แต่เบราว์เซอร์ไม่สามารถค้นพบได้ง่าย ตัวอย่างเช่น แบบอักษร CSS หรือ JavaScript ที่สำคัญ

ความแตกต่างอีกประการจากคำแนะนำ dns-prefetch และ preconnect ก็คือ แม้ว่าพวกเขาต้องการเพียง แอตทริบิวต์ rel และ href แต่การ โหลดล่วงหน้า นั้นซับซ้อนกว่า คุณต้องเพิ่มแอตทริบิวต์ เป็น ซึ่งระบุประเภทเนื้อหาของทรัพยากรที่คุณต้องการโหลดล่วงหน้า

พรีโหลด

ตามที่ Addy Osmani ผู้จัดการฝ่ายวิศวกรรมของ Google ระบุ เป็น แอตทริบิวต์เมื่อจำเป็นต้องโหลดล่วงหน้า:

“ถ้าคุณไม่ระบุ “as” ที่ถูกต้องเมื่อระบุสิ่งที่จะโหลดล่วงหน้า เช่น สคริปต์ คุณจะต้องดึงข้อมูลสองครั้ง”


นี่คือรายการที่สมบูรณ์ของค่า ที่ คุณสามารถระบุได้:

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

ดูเอกสารการจัดลำดับความสำคัญของทรัพยากร Chrome และการจัดกำหนดการเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการจัดลำดับความสำคัญของทรัพยากรประเภทต่างๆ

สำหรับทรัพยากรบางอย่าง เช่น ฟอนต์ คุณต้องรวมแอตทริบิวต์ crossorigin ด้วย

คุณลักษณะไขว้

แอตทริบิวต์ crossorigin ตั้งค่าโหมดของคำขอเป็นคำขอ HTTP CORS CORS (Cross-Origin Resource Sharing) เป็นกลไกที่ช่วยให้เซิร์ฟเวอร์สามารถระบุต้นทางอื่น ๆ นอกเหนือจากที่เบราว์เซอร์ควรอนุญาตให้โหลดทรัพยากร เราจะไม่ลงลึกในเรื่องนี้เนื่องจากไม่ใช่จุดสนใจของบทความนี้ แต่คุณสามารถหาข้อมูลเพิ่มเติมได้ที่นี่

และคล้ายกับแอตทริบิวต์ as การโหลดฟอนต์ล่วงหน้าโดยไม่มี crossorigin จะดึงข้อมูลสองเท่า นี่เป็นอีกข้อความที่ตัดตอนมาจากบทความของ Addy Osmani ในหัวข้อ:

“ตรวจสอบให้แน่ใจว่าคุณเพิ่มแอตทริบิวต์ไขว้เมื่อดึงแบบอักษรโดยใช้พรีโหลด ไม่เช่นนั้นจะถูกดาวน์โหลดสองครั้ง พวกเขาได้รับการร้องขอโดยใช้โหมดไม่ระบุชื่อ CORS คำแนะนำนี้ใช้ได้แม้ว่าฟอนต์จะมาจากแหล่งที่มาเดียวกันกับเพจ สิ่งนี้ใช้ได้กับการดึงข้อมูลที่ไม่ระบุชื่ออื่นๆ ด้วย (เช่น XHR โดยค่าเริ่มต้น)”


คำแนะนำทรัพยากรเพิ่มเติม ปัญหาเพิ่มเติม

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

น่าเสียดายที่นี่ไม่ใช่กรณี

ต่อไปนี้คือข้อเสียบางประการที่คุณควรคำนึงถึงเมื่อผสานรวมคำแนะนำทรัพยากร:

1. การดึงข้อมูลล่วงหน้าอาจเพิ่มการใช้ข้อมูล

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

2. Prerender อาจทำให้แบนด์วิธเสียได้

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

3. การเชื่อมต่อล่วงหน้าอาจทำให้มีการใช้งาน CPU เพิ่มขึ้น

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


4. โหลดล่วงหน้าจะแทนที่ลำดับความสำคัญที่กำหนดโดยตัววิเคราะห์ของเบราว์เซอร์

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

สรุป

เราได้กล่าวถึงประเด็นต่างๆ มากมายในบทความนี้ เรามาสรุปประเด็นสำคัญที่สำคัญที่สุดกัน:

  • dns-prefetch และ preconnect ใช้เพื่อจัดลำดับความสำคัญของชื่อโดเมน (เช่น https://example.com)
  • การ ดึงข้อมูลล่วงหน้า และ โหลดล่วงหน้า ใช้เพื่อจัดลำดับความสำคัญการโหลดทรัพยากร แม้ว่าการ ดึงข้อมูลล่วงหน้า จะใช้ในการปรับปรุงเวลาในการโหลดของหน้าถัดไป การ โหลดล่วงหน้า จะทำงานได้ดีที่สุดกับทรัพยากรที่สำคัญสำหรับหน้าปัจจุบัน
  • การแสดงผล ล่วงหน้า อ้างอิงทั้งหน้า (เช่น blog.html)
  • prefetch , prerender และ preconnect เป็นคำแนะนำทรัพยากรและจะดำเนินการตามที่เบราว์เซอร์เห็นสมควร คำสั่ง พรีโหลด เป็นคำสั่งที่จำเป็นสำหรับเบราว์เซอร์
  • เมื่อใช้ preload อย่าลืมระบุแอตทริบิวต์ as และ crossorigin เพื่อหลีกเลี่ยงการดึงข้อมูลซ้ำซ้อน
  • แม้ว่าคำแนะนำทรัพยากรจะเป็นคำแนะนำที่มีลำดับความสำคัญต่ำ แต่ก็ยังเป็นภัยคุกคามต่อประสิทธิภาพของไซต์ของคุณ ใช้ในปริมาณที่พอเหมาะและเมื่อจำเป็นเท่านั้น
  • โหลดล่วงหน้า เป็นคำสั่งที่มีประสิทธิภาพที่สามารถแทนที่ลำดับความสำคัญของตัววิเคราะห์ของเบราว์เซอร์ได้ อย่าลืมว่าเบราว์เซอร์สมัยใหม่นั้นค่อนข้างดีในการจัดลำดับความสำคัญของทรัพยากร ดังนั้นโปรดใช้ "คำใบ้" ที่ โหลดล่วงหน้า ไว้เท่าที่จำเป็น

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