מבוא ל-Budget API

ה-API להעברת הודעות מאפשר לנו לשלוח התראות למשתמש גם כאשר הדפדפן סגור. מפתחים רבים רוצים שתהיה להם אפשרות להשתמש בהודעות האלה כדי לעדכן ולסנכרן תוכן בלי שהדפדפן ייפתח, אבל ה-API הגבלה חשובה אחת: צריך תמיד להציג הודעה לגבי כל התקבלה הודעת דחיפה אחת.

יכולת לשלוח הודעה כדי לסנכרן נתונים במכשיר של משתמש או להסתיר אותו התראה שהוצגה בעבר יכולה להיות שימושית מאוד למשתמשים אבל לאפשר לאפליקציית אינטרנט לפעול ברקע ללא המשתמש שהכרתם פתוחה לניצול לרעה.

ה-API תקציב , הוא API חדש שנועד לאפשר למפתחים לבצע עבודה מוגבלת ברקע ללא הודעה למשתמש, למשל, דחיפה שקטה או ביצוע רקע אחזור. ב-Chrome 60 ומעלה תוכלו להתחיל להשתמש ב-API הזה צוות Chrome ישמח לקבל משוב ממפתחים.

כדי לאפשר למפתחים לצרוך משאבים של משתמש ברקע, אפשר להשתמש באינטרנט הפלטפורמה החדשה מציגה את הקונספט של תקציב באמצעות Budget API החדש. כל אחד האתר יקבל כמות משאבים על סמך התעניינות המשתמשים יכולה לצרוך פעולות ברקע, כמו דחיפה שקטה, שבה כל פעולה מחילה את התקציב. כאשר התקציב מנוצל, לא ניתן יותר לבצע פעולות ברקע בלי משתמש החשיפה. סוכן המשתמש יהיה אחראי לקביעת התקציב הוקצה לאפליקציית אינטרנט על סמך היוריסטיקה שלה, לדוגמה, הקצאת התקציב. יכול להיות מקושר לאינטראקציה של משתמשים. כל דפדפן יכול לקבוע מה היוריסטיקה שלו.

אמ;לק ה-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' הוא סוג הפעולה היחיד אבל אפשר למצוא הרשימה המלאה של סוגי הפעולות במפרט. אין גם דרך קלה להגדיל את התקציב למטרות בדיקה או ניפוי באגים אבל בתור פתרון זמני, אתם יכולים ליצור מודל חדש הפרופיל ב-Chrome. לצערי, לא ניתן להשתמש במצב פרטי בתור התקציב ה-API יחזיר תקציב של אפס במצב פרטי (אם כי קיים באג שגורם לשגיאה במהלך הבדיקה שלי).

יש להתקשר אל reserve() רק כשרוצים לבצע את הפעולה לבצע הזמנה בשלב כלשהו בעתיד. שימו לב, אם התקשרתם להזמנה שלמעלה, אבל עדיין הופיעה התראה, התקציב עדיין יהיה בשימוש.

תרחיש נפוץ אחד שלא הופעל על ידי reserve() לבדו, הוא היכולת לתזמן דחיפה שקטה מהקצה העורפי. ל-Budget API יש ממשקי API שאפשר להפעיל אבל הם עדיין נמצאים בשלבי פיתוח ב-Chrome זמין רק מאחורי דגלים ו / או בגרסת מקור לניסיון.

Budget API ותקופות מקור לניסיון

יש שתי שיטות, getBudget() ו-getCost(), שבהן אפליקציית אינטרנט יכולה להשתמש כדי לתכנן את השימוש בתקציב שלהם.

ב-Chrome 60, שתי השיטות האלה זמינות אם נרשמים לגרסת המקור לניסיון אבל מלבד זאת לצורך בדיקה, אפשר להשתמש בהם באופן מקומי על ידי הפעלת תכונות ניסיוניות של פלטפורמת האינטרנט דגל (Open chrome://flags/#activate-סוגal-web-platform-features ב- Chrome).

עכשיו נראה איך משתמשים בממשקי ה-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(). אולי עדיין תהיה לך אפשרות לשריין פעולה אם התקציב הנוכחי שלך נמוך יותר מהעלות שצוינה. הפרטים הספציפיים מהמפרט מעקב:

זהו ממשק ה-API הנוכחי ב-Chrome, מאחר שהאינטרנט ממשיך לתמוך בממשקי ה-API החדשים שדורשות יכולת לבצע פעולות ברקע, כמו אחזור ברקע, אפשר להשתמש ב-Budget API כדי לנהל את מספר הפעולות שאפשר לבצע בלי להודיע למשתמש.

במהלך השימוש ב-API, עליכם לשלוח משוב על מאגר GitHub או לדווח על באגים ב-Chrome בכתובת crbug.com.