การนำทางเว็บที่รวดเร็วขึ้นด้วยการดึงข้อมูลล่วงหน้าตามการคาดการณ์

เรียนรู้เกี่ยวกับการดึงข้อมูลล่วงหน้าแบบคาดการณ์และวิธีที่ Guess.js นำข้อมูลดังกล่าวไปใช้

ในเซสชันการนำทางเว็บที่เร็วขึ้นด้วยการดึงข้อมูลล่วงหน้าแบบคาดการณ์ที่งาน Google I/O 2019 ฉันเริ่มด้วยการพูดถึงการเพิ่มประสิทธิภาพเว็บแอปด้วยการแยกโค้ดและผลด้านประสิทธิภาพที่เป็นไปได้สำหรับการนำทางหน้าเว็บในครั้งต่อๆ ไป ในส่วนที่สองของการพูดคุยนี้ เราได้กล่าวถึงวิธีปรับปรุงความเร็วในการไปยังส่วนต่างๆ โดยใช้ Guess.js เพื่อตั้งค่าการดึงข้อมูลล่วงหน้าแบบคาดการณ์

การแยกโค้ดสำหรับเว็บแอปที่เร็วขึ้น

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

เว็บแอปที่ช้าจะทำให้รู้สึกเครียด

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

  • การแยกโค้ดระดับคอมโพเนนต์
  • การแยกโค้ดระดับเส้นทาง

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

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

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

การดึงข้อมูลล่วงหน้าจะช่วยให้เบราว์เซอร์ดาวน์โหลดและแคชทรัพยากรที่ผู้ใช้น่าจะต้องการใช้ในเร็วๆ นี้ วิธีการตามปกติคือการใช้ <link rel="prefetch"> แต่มีข้อเสียทั่วไป 2 ประการดังนี้

  • การดึงข้อมูลทรัพยากรล่วงหน้ามากเกินไป (การดึงข้อมูลมากเกินไป) ต้องใช้ข้อมูลจำนวนมาก
  • ทรัพยากรบางอย่างที่ผู้ใช้ต้องการอาจไม่มีการดึงข้อมูลล่วงหน้า

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

ตัวอย่างการดึงข้อมูลล่วงหน้า

การดึงข้อมูลล่วงหน้าที่มีการคาดการณ์ด้วย Guess.js

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

Guess.js มีการผสานรวมกับ Angular, Next.js, Nuxt.js และ Gatsby หากต้องการนำไปใช้ในแอปพลิเคชัน ให้เพิ่มบรรทัดต่อไปนี้ลงในการกำหนดค่า Webpack เพื่อระบุรหัสข้อมูลพร็อพเพอร์ตี้ Google Analytics

const { GuessPlugin } = require('guess-webpack');

// ...
plugins: [
   // ...
   new GuessPlugin({ GA: 'XXXXXX' })
]
// ...

หากไม่ได้ใช้ Google Analytics คุณระบุ reportProvider และดาวน์โหลดข้อมูลจากบริการโปรดได้

การผสานรวมกับเฟรมเวิร์ก

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีผสานรวม Guess.js กับเฟรมเวิร์กที่คุณชื่นชอบ โปรดดูแหล่งข้อมูลต่อไปนี้

ดูคำแนะนำแบบคร่าวๆ เกี่ยวกับการผสานรวมกับ Angular ได้ในวิดีโอนี้

วิธีการทำงานของ Guess.js

ต่อไปนี้คือวิธีที่ Guess.js ใช้การดึงข้อมูลล่วงหน้าแบบคาดการณ์

  1. โดยจะดึงข้อมูลสำหรับรูปแบบการนำทางของผู้ใช้จากผู้ให้บริการวิเคราะห์ที่คุณชื่นชอบก่อน
  2. จากนั้นจะแมป URL จากรายงานกับช่อง JavaScript ที่สร้างโดย Webpack
  3. จากข้อมูลที่ดึงมา โมเดลจะสร้างโมเดลการคาดการณ์แบบง่ายๆ ว่าผู้ใช้จะไปยังหน้าใดจากหน้าหนึ่งๆ
  4. โดยจะเรียกใช้โมเดลสำหรับกลุ่ม JavaScript แต่ละกลุ่ม โดยคาดการณ์ส่วนอื่นๆ ที่น่าจะต้องใช้ในลำดับถัดไป
  5. เพิ่มวิธีการดึงข้อมูลล่วงหน้าให้กับแต่ละส่วน

เมื่อ Guess.js สร้างเสร็จแล้ว แต่ละส่วนจะมีวิธีการดึงข้อมูลล่วงหน้าที่คล้ายกับ

__GUESS__.p(
  ['a.js', 0.2],
  ['b.js', 0.8]
)

โค้ด Guess.js ที่สร้างขึ้นนี้กำลังบอกให้เบราว์เซอร์พิจารณาการดึงข้อมูลส่วน a.js ล่วงหน้าที่มีความน่าจะเป็น 0.2 และกลุ่ม b.js ที่มีความน่าจะเป็น 0.8

เมื่อเบราว์เซอร์เรียกใช้โค้ดแล้ว Guess.js จะตรวจสอบความเร็วในการเชื่อมต่อของผู้ใช้ หากเพียงพอ Guess.js จะแทรกแท็ก <link rel="prefetch"> 2 แท็กในส่วนหัวของหน้าเว็บ โดยแต่ละแท็กสำหรับแต่ละกลุ่ม หากผู้ใช้ใช้เครือข่ายความเร็วสูง Guess.js จะดึงข้อมูลทั้งสองส่วนล่วงหน้า หากผู้ใช้มีการเชื่อมต่อเครือข่ายที่สัญญาณไม่ดี Guess.js จะดึงข้อมูลส่วน b.js ล่วงหน้าเท่านั้น เนื่องจากมีความเป็นไปได้สูงที่จะจำเป็นต้องใช้

ดูข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับ Guess.js ได้จากแหล่งข้อมูลต่อไปนี้