Push Messaging API 讓我們能夠傳送通知給使用者 則瀏覽器已關閉。許多開發人員都希望運用這項功能 雖然 API 可以 一項重要限制:您必須一律顯示 只會收到一則推送訊息
能夠傳送推送訊息,藉此同步處理使用者裝置上的資料或隱藏 您先前顯示的通知對使用者來說非常實用 但允許網頁應用程式免於使用者的背景在背景執行 避免濫用
預算 API 是一個新的 API,可讓開發人員執行有限的背景工作 而未通知使用者,例如無聲推送或執行背景 擷取。您可以在 Chrome 60 以上版本中開始使用這個 API,以及 Chrome 團隊熱切希望取得開發人員的意見回饋。
為了讓開發人員能夠在背景使用使用者的資源,網路 平台推出了全新預算 API 的預算概念。每項 會根據使用者參與度 用於背景動作 例如無聲推送,其中每項作業都會用光預算當 預算已用盡,無法在沒有使用者的情況下執行背景動作 曝光率。使用者代理程式將負責決定預算 根據經驗法則 (例如預算額度) 指派至網頁應用程式 連結至使用者參與度每個瀏覽器都有各自的經驗法則。
重點摘要:Budget API 可讓您預留預算、使用預算、取得清單 瞭解背景作業的費用
預留預算
Chrome 60 以上版本將支援 navigator.budget.reserve()
方法
不加上任何旗標
reserve()
方法可讓您要求特定作業的預算並
就會傳回布林值,指出可是否預訂預算。如果
預算已預留,您不需要通知使用者背景
這些研究有助於我們找出
能引導後續作業的標準
以推播通知為例,您可以嘗試預留給
「silent-push」如果 reserve()
解析為 true,作業就會是
。否則,系統會傳回 false,而您需要顯示通知
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);
});
在 Chrome 60 版中,「silent-push」是唯一屬於 不過您可以找到 規格所列作業類型的完整清單。 要在測試或偵錯時提高預算,也沒有簡單的方法 但可以做為暫時性的替代方案 。很抱歉,你不能使用無痕模式進行這類操作 在無痕模式中,API 會傳回 0 的預算 (不過 導致發生錯誤的錯誤 測試期間)。
請只在您打算執行要執行的作業時,才呼叫 reserve()
預留資源請注意,如果您在
上述範例但還是顯示通知,但系統還是會使用該預算。
不單靠 reserve()
啟用的常見用途之一就是
安排在後端進行無訊息推送預算 API 具備可啟用的 API
雖然 Chrome 開發的功能仍在開發中,
僅提供旗標和 / 或來源試用。
預算 API 和來源試用
網頁應用程式可使用兩種方法 (getBudget()
和 getCost()
)
規劃預算的使用方式
在 Chrome 60 中,如果您申請來源試用,即可使用這兩種方法 如要進行測試,您可以在本機使用 實驗性 Web Platform 功能 旗標 (在 。
讓我們來看看如何使用這些 API。
取得預算
您可以使用 getBudget()
方法查看可用預算。部分瀏覽器
(例如 Chrome) 預算會顯示為「衰減」因此為了讓您充分利用時間
顯示設定會傳回 BudgetStates
的陣列,並指出您的預算
不同的時間點
如要列出可執行的預算項目:
navigator.budget.getBudget()
.then((budgets) => {
budgets.forEach((element) => {
console.log(\`At '${new Date(element.time).toString()}' \` +
\`your budget will be '${element.budgetAt}'.\`);
});
});
第一個項目是您目前的預算,會顯示其他值 您在未來各個時間點所設定的預算
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'.
納入未來預算額度的其中一個好處,是開發人員可以 與後端分享這項資訊,調整他們的伺服器端行為 (即只在用戶端有預算時,傳送推送訊息來觸發更新作業)。 以靜音方式推送)。
取得作業成本
如要瞭解作業費用,呼叫 getCost()
會傳回
數字,代表當您打電話聯絡時,將使用的預算上限
reserve()
適用於該作業。
舉例來說,我們可以找出在 接收推送訊息 (即無聲推送的費用),而且須注意以下 程式碼:
navigator.budget.getCost('silent-push')
.then((cost) => {
console.log('Cost of silent push is:', cost);
})
.catch((err) => {
console.error('Unable to get cost:', err);
});
撰寫本文時,Chrome 60 會列印以下內容:
Cost of silent push is: 2
使用 reserve()
和 getCost()
方法時,我們要特別介紹的是
實際作業費用可能會低於 getCost()
傳回的費用。
目前的預算較低時,您仍可預訂作業
而不是低於指定的費用規格中的具體細節為
追蹤:
這是 Chrome 目前推出的 API,且隨著網路持續支援新版 API 的 需要執行背景工作 (例如背景擷取) 的能力,Budget API 可用來: 管理在不通知使用者的情況下可以執行的作業數量。
使用 API 時,請前往 GitHub 存放區提供意見回饋 您也可以前往 crbug.com 回報 Chrome 錯誤。