ภาพรวมของ Service Worker

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

หากต้องการดูรายชื่อ Service Worker ที่ทำงานอยู่ ให้ป้อน chrome://serviceworker-internals/ ลงในแถบที่อยู่

รายการ Service Worker ที่กำลังทำงาน

Service Worker มีอะไรให้บ้าง

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

วงจรชีวิตที่พัฒนาขึ้นเรื่อยๆ เหมือนแอป

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

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

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

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

การเข้าถึง API การแคชที่ขับเคลื่อนโดย JavaScript

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

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

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

แต่ละข้อต่อไปนี้คือตัวอย่างของกลยุทธ์การแคช กลยุทธ์การแคชทำให้การใช้งานแบบออฟไลน์เกิดขึ้นได้ และมีประสิทธิภาพดีขึ้นด้วยการตรวจดูแคช HTTP ที่มีเวลาในการตอบสนองสูงทีละขั้นติดต่อกัน ก่อนที่จะเจาะลึกไปที่ Workbox เราจะทบทวนกลยุทธ์การแคชและโค้ด 2-3 รายการที่ทำให้กลยุทธ์เหล่านี้ใช้งานได้

API แบบอะซิงโครนัสและที่ขับเคลื่อนด้วยเหตุการณ์

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

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

การทำงานแบบอะซิงโครนัสใน JavaScript เกี่ยวข้องกับการใช้ promises นอกจากนี้ สัญญาเหล่านี้ยังช่วยสนับสนุน async และ await อีกด้วย ฟีเจอร์ JavaScript เหล่านั้นจึงสามารถใช้เพื่อทำให้โค้ด Service Worker (และ Workbox!) ง่ายขึ้นเพื่อประสบการณ์ของนักพัฒนาซอฟต์แวร์ที่ดียิ่งขึ้น

การแคชล่วงหน้าและการแคชรันไทม์

การโต้ตอบระหว่าง Service Worker กับอินสแตนซ์ Cache เกี่ยวข้องกับแนวคิดการแคช 2 แบบที่แตกต่างกัน ได้แก่ การแคชล่วงหน้าและการแคชรันไทม์ แต่ละข้อเหล่านี้ล้วนเป็นประโยชน์ที่โปรแกรมทำงานของบริการสามารถมอบให้ได้

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

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

เมื่อนำมารวมกันแล้ว แนวทางในการใช้อินเทอร์เฟซ Cache ในโปรแกรมทำงานของบริการเป็นประโยชน์ต่อประสบการณ์ของผู้ใช้อย่างมาก และให้ลักษณะการทำงานที่เหมือนกับแอปแก่หน้าเว็บทั่วไป

การแยกจากเทรดหลัก

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

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

เส้นทางข้างหน้า

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