Tổng quan về trình chạy dịch vụ

Trình chạy dịch vụ cung cấp tiện ích đáng kinh ngạc, nhưng có thể khó sử dụng lúc đầu. Hộp làm việc giúp trình chạy dịch vụ dễ sử dụng hơn. Tuy nhiên, vì trình chạy dịch vụ giải quyết các vấn đề khó khăn, nên bất kỳ khái niệm trừu tượng nào của công nghệ đó cũng sẽ khó khăn nếu không hiểu được. Do đó, một số tài liệu đầu tiên này sẽ đề cập đến công nghệ cơ bản trước khi đi vào các thông tin cụ thể về Workbox.

Để xem danh sách trình chạy dịch vụ đang chạy, hãy nhập chrome://serviceworker-internals/ vào thanh địa chỉ.

Danh sách đang chạy của các trình chạy dịch vụ.

Trình chạy dịch vụ cung cấp gì?

Trình chạy dịch vụ là các tài sản JavaScript chuyên biệt hoạt động như proxy giữa trình duyệt web và máy chủ web. Mục đích của các bản cập nhật này là cải thiện độ tin cậy bằng cách cung cấp quyền truy cập ngoại tuyến, cũng như tăng hiệu suất của trang.

Một vòng đời giống như ứng dụng được cải thiện dần dần

Trình chạy dịch vụ là một tính năng nâng cao cho các trang web hiện có. Điều này có nghĩa là nếu người dùng trên các trình duyệt không hỗ trợ trình chạy dịch vụ truy cập vào các trang web sử dụng trình chạy đó, thì sẽ không có chức năng cơ sở nào bị hỏng. Đó là lý do của web.

Trình chạy dịch vụ dần dần cải thiện các trang web thông qua vòng đời tương tự như các ứng dụng dành riêng cho nền tảng. Hãy nghĩ về những điều sẽ xảy ra khi một ứng dụng gốc được cài đặt từ một cửa hàng ứng dụng:

  • Hệ thống sẽ đưa ra yêu cầu tải ứng dụng xuống.
  • Số lượt tải xuống và cài đặt ứng dụng.
  • Ứng dụng đã sẵn sàng để sử dụng và có thể ra mắt.
  • Bản cập nhật của ứng dụng cho bản phát hành mới.

Vòng đời của trình chạy dịch vụ cũng tương tự, nhưng có phương pháp nâng cao tăng dần. Trong lượt truy cập đầu tiên vào một trang web cài đặt trình chạy dịch vụ mới, lượt truy cập đầu tiên vào một trang sẽ cung cấp chức năng cơ sở trong khi trình chạy dịch vụ tải xuống. Sau khi cài đặt và kích hoạt một trình chạy dịch vụ, trình chạy này sẽ kiểm soát trang để cải thiện độ tin cậy và tốc độ.

Quyền truy cập vào API lưu vào bộ nhớ đệm dựa trên JavaScript

Một khía cạnh không thể thiếu của công nghệ trình chạy dịch vụ là giao diện Cache. Đây là cơ chế lưu vào bộ nhớ đệm hoàn toàn tách biệt với bộ nhớ đệm HTTP. Bạn có thể truy cập vào giao diện Cache trong phạm vi trình chạy dịch vụ và trong phạm vi của luồng chính. Điều này mở ra rất nhiều khả năng cho các hoạt động tương tác mà người dùng thực hiện với một thực thể Cache.

Trong khi bộ nhớ đệm HTTP bị ảnh hưởng thông qua các lệnh lưu vào bộ nhớ đệm được chỉ định trong tiêu đề HTTP, thì bạn có thể lập trình giao diện Cache thông qua JavaScript. Điều này có nghĩa là phản hồi lưu vào bộ nhớ đệm cho các yêu cầu mạng có thể dựa trên bất kỳ logic nào phù hợp nhất cho một trang web nhất định. Ví dụ:

  • Lưu trữ các tài sản tĩnh trong bộ nhớ đệm khi có yêu cầu đầu tiên đối với các tài sản đó và chỉ phân phát tài sản từ bộ nhớ đệm cho mỗi yêu cầu tiếp theo.
  • Lưu trữ mã đánh dấu trang trong bộ nhớ đệm, nhưng chỉ phân phát mã đánh dấu từ bộ nhớ đệm trong trường hợp ngoại tuyến.
  • Phân phát các phản hồi cũ cho một số tài sản nhất định từ bộ nhớ đệm, nhưng cập nhật phản hồi từ mạng trong nền.
  • Truyền trực tuyến một phần nội dung từ mạng và tập hợp nội dung đó với một giao diện ứng dụng từ bộ nhớ đệm để cải thiện hiệu suất nhận thức.

Mỗi phương pháp trong số này là một ví dụ về chiến lược lưu vào bộ nhớ đệm. Các chiến lược lưu vào bộ nhớ đệm mang lại trải nghiệm ngoại tuyến khả thi và có thể mang lại hiệu suất tốt hơn bằng cách kiểm tra lại việc xác thực lại độ trễ cao song song, bộ nhớ đệm HTTP bắt đầu. Trước khi tìm hiểu về Workbox, bạn sẽ thấy đánh giá về một số chiến lược và mã lưu vào bộ nhớ đệm giúp chúng hoạt động.

API không đồng bộ và API dựa trên sự kiện

Việc chuyển dữ liệu qua mạng vốn đã không đồng bộ. Cần có thời gian để yêu cầu một nội dung, để máy chủ phản hồi yêu cầu đó và tải phản hồi xuống. Thời gian liên quan rất đa dạng và không xác định. Trình chạy dịch vụ điều chỉnh tính không đồng bộ này thông qua API dựa trên sự kiện, sử dụng lệnh gọi lại cho các sự kiện như:

Bạn có thể đăng ký các sự kiện bằng API addEventListener quen thuộc. Tất cả những sự kiện này có thể tương tác với giao diện Cache. Đặc biệt, khả năng chạy lệnh gọi lại khi yêu cầu mạng được gửi đi là rất quan trọng để đảm bảo độ tin cậy và tốc độ mà nhiều người mong muốn.

Để thực hiện tác vụ không đồng bộ trong JavaScript, bạn cần sử dụng promise (Lời hứa). Vì lời hứa cũng là cơ sở cho asyncawait, nên các tính năng JavaScript đó cũng có thể được dùng để đơn giản hoá mã trình chạy dịch vụ (và Workbox!) nhằm mang lại trải nghiệm tốt hơn cho nhà phát triển.

Lưu vào bộ nhớ đệm và lưu vào bộ nhớ đệm trong thời gian chạy

Hoạt động tương tác giữa trình chạy dịch vụ và thực thể Cache liên quan đến 2 khái niệm lưu vào bộ nhớ đệm riêng biệt: lưu trước vào bộ nhớ đệm và lưu vào bộ nhớ đệm trong thời gian chạy. Mỗi yếu tố trong số này là trọng tâm của những lợi ích mà trình chạy dịch vụ có thể cung cấp.

Lưu trước vào bộ nhớ đệm là quá trình lưu tài sản vào bộ nhớ đệm trước khi thực hiện, thường là trong quá trình cài đặt của một trình chạy dịch vụ. Với tính năng lưu trước vào bộ nhớ đệm, bạn có thể tải xuống và lưu trữ các tài sản và tài liệu tĩnh quan trọng cần thiết để truy cập khi không có mạng trong thực thể Cache. Hình thức lưu vào bộ nhớ đệm này cũng cải thiện tốc độ trang đối với các trang tiếp theo yêu cầu tài sản được lưu trước vào bộ nhớ đệm.

Lưu vào bộ nhớ đệm trong thời gian chạy là khi chiến lược lưu vào bộ nhớ đệm được áp dụng cho các tài sản khi chúng được mạng yêu cầu trong thời gian chạy. Hình thức lưu vào bộ nhớ đệm này rất hữu ích vì nó đảm bảo quyền truy cập ngoại tuyến vào các trang và tài sản mà người dùng đã truy cập.

Khi kết hợp với nhau, các phương pháp sử dụng giao diện Cache trong trình chạy dịch vụ mang lại lợi ích to lớn cho trải nghiệm người dùng, đồng thời cung cấp các hành vi giống như ứng dụng cho các trang web thông thường khác.

Tách biệt với luồng chính

Trạng thái hiệu suất của JavaScript là một thách thức không ngừng phát triển trên web, và từ góc độ người dùng, trạng thái này phụ thuộc vào khả năng của thiết bị cũng như khả năng truy cập vào Internet tốc độ cao. Càng sử dụng JavaScript nhiều, việc xây dựng các trang web có tốc độ nhanh và mang lại trải nghiệm thú vị cho người dùng càng trở nên khó khăn.

Trình chạy dịch vụ giống như trình chạy web ở chỗ tất cả công việc chúng thực hiện đều diễn ra trên luồng của riêng chúng. Điều này có nghĩa là các tác vụ của trình chạy dịch vụ sẽ không cạnh tranh để thu hút sự chú ý với các tác vụ khác trên luồng chính. Trong thiết kế, trình chạy dịch vụ luôn đặt người dùng lên hàng đầu!

Con đường phía trước

Tài liệu này chỉ là phần tổng quan. Có một vài chủ đề khác cần được đề cập về trình chạy dịch vụ trước khi bao gồm Workbox thích hợp, nhưng hãy yên tâm: khi đã hiểu rõ về trình chạy dịch vụ, việc sử dụng Workbox sẽ là một trải nghiệm dễ dàng và hiệu quả hơn.