API Gửi thông báo đẩy cho phép chúng ta gửi thông báo đến người dùng ngay cả khi trình duyệt đã đóng. Nhiều nhà phát triển muốn có thể sử dụng thông báo này để cập nhật và đồng bộ hoá nội dung mà không cần mở trình duyệt, nhưng API vẫn một hạn chế quan trọng: bạn phải luôn hiển thị thông báo mỗi khi đã nhận được thông báo đẩy một lần.
Có thể gửi thông báo đẩy để đồng bộ hoá dữ liệu trên thiết bị của người dùng hoặc ẩn một thông báo bạn đã hiển thị trước đây có thể cực kỳ hữu ích cho người dùng và nhưng cho phép ứng dụng web hoạt động ở chế độ nền mà không cần người dùng biết thì dễ bị lạm dụng.
API Ngân sách . là một API mới được thiết kế để cho phép nhà phát triển thực hiện một số ít công việc ở chế độ nền mà không thông báo cho người dùng, chẳng hạn như đẩy thầm lặng hoặc thực hiện thao tác ở chế độ nền tìm nạp. Trong Chrome 60 trở lên, bạn có thể bắt đầu sử dụng API này và Nhóm Chrome rất mong nhận được ý kiến phản hồi của các nhà phát triển.
Để cho phép nhà phát triển sử dụng tài nguyên của người dùng ở chế độ nền, trình duyệt web nền tảng đang giới thiệu khái niệm ngân sách bằng cách sử dụng API Ngân sách mới. Một sẽ nhận được một lượng tài nguyên dựa trên mức độ tương tác của người dùng mà họ có thể sử dụng cho các thao tác trong nền, chẳng hạn như thúc đẩy trong âm thầm mà trong đó mỗi hoạt động sẽ làm cạn kiệt ngân sách. Khi ngân sách đã được chi tiêu hết, các hành động trong nền không thể được thực hiện nữa nếu không có người dùng khả năng hiển thị. Tác nhân người dùng sẽ chịu trách nhiệm xác định ngân sách đã chỉ định cho ứng dụng web dựa trên suy đoán, ví dụ: phụ cấp ngân sách có thể được liên kết với mức độ tương tác của người dùng. Mỗi trình duyệt có thể quyết định phương thức tự phỏng đoán.
Tóm tắt Ngân sách API cho phép bạn đặt trước ngân sách, sử dụng ngân sách và tạo danh sách trong ngân sách còn lại cũng như nắm được chi phí của các hoạt động ở chế độ nền
Dành riêng ngân sách
Trên Chrome 60 trở lên, bạn sẽ có thể sử dụng phương thức navigator.budget.reserve()
mà không có bất kỳ cờ nào.
Phương thức reserve()
cho phép bạn yêu cầu ngân sách cho một hoạt động cụ thể và
nó sẽ trả về một giá trị boolean cho biết liệu ngân sách có thể được đặt trước hay không. Nếu
ngân sách đã được đặt trước, không cần phải thông báo cho người dùng về thông tin cơ bản của bạn
cơ quan.
Trong ví dụ về thông báo đẩy, bạn có thể thử dành trước ngân sách cho
"đẩy im lặng" và nếu reserve()
phân giải bằng đúng, thì thao tác này sẽ
được phép. Nếu không, kết quả sẽ trả về là false và bạn cần hiển thị thông báo
self.addEventListener('push', event => {
const promiseChain = navigator.budget.reserve('silent-push')
.then((reserved) => {
if (reserved) {
// No need to show a notification.
return;
}
// Not enough budget is available, must show a notification.
return registration.showNotification(...);
});
event.waitUntil(promiseChain);
});
Trong Chrome 60, tính năng "silent-push" là loại toán tử duy nhất khả dụng, nhưng bạn có thể tìm thấy danh sách đầy đủ các loại thao tác trong quy cách. Ngoài ra, cũng không có cách dễ dàng để tăng ngân sách cho hoạt động thử nghiệm hoặc gỡ lỗi mục đích sau khi sử dụng, nhưng giải pháp tạm thời là tạo hồ sơ trong Chrome. Rất tiếc, bạn không thể sử dụng chế độ ẩn danh dưới dạng Ngân sách API sẽ trả về ngân sách bằng 0 ở Chế độ ẩn danh (mặc dù có dẫn đến lỗi trong quá trình thử nghiệm).
Bạn chỉ nên gọi reserve()
khi định thực hiện thao tác
đặt trước tại một thời điểm trong tương lai. Xin lưu ý rằng nếu bạn đã gọi là đặt trước trong
ví dụ trên nhưng vẫn hiển thị thông báo, thì ngân sách sẽ vẫn được sử dụng.
Một trường hợp sử dụng phổ biến không được chỉ riêng reserve()
kích hoạt, đó là khả năng
lên lịch đẩy thầm lặng từ phần phụ trợ. API ngân sách không có API để bật
trường hợp sử dụng này nhưng chúng vẫn đang được xử lý trong Chrome và hiện đang
chỉ dành cho những ứng dụng bị gắn cờ và / hoặc Bản dùng thử theo nguyên gốc.
API ngân sách và bản dùng thử theo nguyên gốc
Ứng dụng web có thể dùng 2 phương thức getBudget()
và getCost()
để lập kế hoạch sử dụng ngân sách.
Trong Chrome 60, bạn có thể sử dụng cả hai phương pháp này nếu đăng ký bản dùng thử theo nguyên gốc nhưng để thử nghiệm, bạn có thể sử dụng chúng cục bộ bằng cách bật Tính năng Nền tảng web thử nghiệm cờ (Mở chrome://flags/#enable-experimental-web-platform-features trong Chrome).
Hãy xem cách sử dụng các API này.
Xem ngân sách của bạn
Bạn có thể tìm thấy ngân sách hiện có bằng phương thức getBudget()
. Một số trình duyệt
(như Chrome) sẽ có ngân sách "giảm dần" theo thời gian, để cung cấp cho bạn
Mức độ hiển thị này sẽ trả về một mảng BudgetStates
, cho biết ngân sách của bạn là bao nhiêu
sẽ diễn ra tại các thời điểm khác nhau trong tương lai.
Để liệt kê các mục ngân sách, chúng ta có thể chạy:
navigator.budget.getBudget()
.then((budgets) => {
budgets.forEach((element) => {
console.log(\`At '${new Date(element.time).toString()}' \` +
\`your budget will be '${element.budgetAt}'.\`);
});
});
Mục nhập đầu tiên sẽ là ngân sách hiện tại của bạn và các giá trị khác sẽ hiển thị ngân sách của bạn sẽ là bao nhiêu tại nhiều thời điểm trong tương lai.
At 'Mon Jun 05 2017 12:47:20' you will have a budget of '3'.
At 'Fri Jun 09 2017 10:42:57' you will have a budget of '2'.
At 'Fri Jun 09 2017 12:31:09' you will have a budget of '1'.
Một trong những lợi ích của việc thêm khoản phụ cấp ngân sách trong tương lai là nhà phát triển có thể chia sẻ thông tin này với phần phụ trợ của họ để điều chỉnh hành vi phía máy chủ (ví dụ: chỉ gửi thông báo đẩy để kích hoạt bản cập nhật khi khách hàng có ngân sách để thúc đẩy trong khi thầm lặng).
Tìm hiểu chi phí của một hoạt động
Để biết chi phí cho một hoạt động, việc gọi getCost()
sẽ trả về một
số cho biết số tiền ngân sách tối đa sẽ được chi tiêu nếu bạn gọi
reserve()
cho thao tác đó.
Ví dụ: chúng tôi có thể tìm hiểu chi phí không hiển thị thông báo khi bạn nhận được một thông báo đẩy (tức là chi phí của một thông báo đẩy thầm lặng), kèm theo mã:
navigator.budget.getCost('silent-push')
.then((cost) => {
console.log('Cost of silent push is:', cost);
})
.catch((err) => {
console.error('Unable to get cost:', err);
});
Tại thời điểm viết, Chrome 60 sẽ in:
Cost of silent push is: 2
Một điều cần nhấn mạnh với phương thức reserve()
và getCost()
là phương thức
chi phí thực tế của một hoạt động có thể nhỏ hơn chi phí do getCost()
trả về.
Bạn vẫn có thể đặt trước một hoạt động nếu ngân sách hiện tại của bạn ít hơn
so với chi phí đã chỉ định. Các chi tiết cụ thể từ thông số kỹ thuật như
sau:
Đó là API hiện tại trong Chrome và khi web tiếp tục hỗ trợ API mới yêu cầu khả năng thực hiện công việc ở chế độ nền, chẳng hạn như tìm nạp ở chế độ nền, thì bạn có thể sử dụng API Ngân sách để quản lý số lượng thao tác bạn có thể thực hiện mà không cần thông báo cho người dùng.
Khi bạn sử dụng API, vui lòng cung cấp ý kiến phản hồi trên GitHub Repo hoặc báo cáo lỗi của Chrome tại crbug.com.