ข้อมูลเบื้องต้นเกี่ยวกับ Budget API

Push Messaging API ช่วยให้เราสามารถส่งการแจ้งเตือนไปยังผู้ใช้ได้แม้ว่าเบราว์เซอร์จะปิดอยู่ก็ตาม นักพัฒนาแอปจํานวนมากต้องการใช้การรับส่งข้อความนี้เพื่ออัปเดตและซิงค์เนื้อหาโดยไม่ต้องเปิดเบราว์เซอร์ แต่ API มีข้อจํากัดที่สําคัญข้อหนึ่งคือคุณต้องแสดงการแจ้งเตือนสําหรับข้อความ Push แต่ละรายการที่ได้รับเสมอ

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

Budget API เป็น API ใหม่ที่ออกแบบมาเพื่อให้นักพัฒนาแอปทํางานบางอย่างในเบื้องหลังได้แบบจํากัดโดยไม่ต้องแจ้งให้ผู้ใช้ทราบ เช่น Push แบบเงียบหรือการดึงข้อมูลในเบื้องหลัง ใน Chrome 60 ขึ้นไป คุณจะเริ่มต้นใช้ API นี้ได้ และทีม Chrome ยินดีรับฟังความคิดเห็นจากนักพัฒนาซอฟต์แวร์

แพลตฟอร์มเว็บจะเปิดตัวแนวคิดเกี่ยวกับงบประมาณโดยใช้ Budget API ใหม่เพื่อให้นักพัฒนาแอปใช้ทรัพยากรของผู้ใช้ในเบื้องหลังได้ แต่ละเว็บไซต์จะได้รับจำนวนทรัพยากรโดยอิงตามการมีส่วนร่วมของผู้ใช้ซึ่งจะใช้ได้สำหรับการดำเนินการในเบื้องหลัง เช่น การพุชแบบเงียบ ซึ่งการดำเนินการแต่ละรายการจะทำให้งบประมาณหมด เมื่อใช้งบประมาณจนหมด ระบบจะดำเนินการในเบื้องหลังโดยที่ผู้ใช้ไม่เห็นอีกต่อไป User Agent จะมีหน้าที่รับผิดชอบในการพิจารณางบประมาณที่กําหนดให้กับเว็บแอปตาม heuristics ของ User Agent เช่น วงเงินงบประมาณอาจเชื่อมโยงกับการมีส่วนร่วมของผู้ใช้ เบราว์เซอร์แต่ละรายการจะตัดสินใจเกี่ยวกับการเรียนรู้ด้วยตนเองของตนเองได้

สรุป Budget API ช่วยให้คุณจองงบประมาณ ใช้งบประมาณ ดูรายการงบประมาณที่เหลือ และทําความเข้าใจต้นทุนของการดำเนินการในเบื้องหลังได้

การจองงบประมาณ

ใน Chrome 60 ขึ้นไป วิธีการ navigator.budget.reserve() จะพร้อมใช้งานโดยไม่มี Flag

เมธอด reserve() ช่วยให้คุณของบประมาณสําหรับการดำเนินการที่เฉพาะเจาะจงได้ และจะแสดงผลลัพธ์บูลีนเพื่อระบุว่าจองงบประมาณได้หรือไม่ หากมีการจองงบประมาณไว้ คุณไม่จําเป็นต้องแจ้งให้ผู้ใช้ทราบเกี่ยวกับงานเบื้องหลัง

ในตัวอย่างของ Push Notification คุณสามารถลองจองงบประมาณสําหรับการดำเนินการ "push แบบเงียบ" และหาก reserve() แสดงผลเป็น "จริง" ระบบจะอนุญาตการดำเนินการ ไม่เช่นนั้น ระบบจะแสดงผลเป็นเท็จและคุณจะต้องแสดงการแจ้งเตือน

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 เป็นวิธีแก้ปัญหาชั่วคราวได้ ขออภัย คุณใช้โหมดไม่ระบุตัวตนไม่ได้เนื่องจาก Budget API จะแสดงผลงบประมาณเป็น 0 ในโหมดไม่ระบุตัวตน (แม้ว่าจะมีข้อบกพร่องที่ทำให้เกิดข้อผิดพลาดระหว่างการทดสอบ)

คุณควรเรียกใช้ reserve() เฉพาะเมื่อต้องการดำเนินการที่คุณจองไว้ในอนาคตเท่านั้น โปรดทราบว่าหากคุณเรียกใช้การจองในตัวอย่างข้างต้นแต่ยังคงแสดงการแจ้งเตือน ระบบจะยังคงใช้งบประมาณ

กรณีการใช้งานทั่วไปอย่างหนึ่งที่ไม่ได้เปิดใช้โดย reserve() เพียงอย่างเดียวคือความสามารถในการกำหนดเวลาการพุชแบบเงียบจากแบ็กเอนด์ Budget API มี API เพื่อเปิดใช้ Use Case นี้ แต่ขณะนี้เรากำลังพัฒนาใน Chrome และพร้อมใช้งานหลังการแจ้งว่าไม่เหมาะสมและ / หรือช่วงทดลองใช้จากต้นทางเท่านั้น

API งบประมาณและช่วงทดลองใช้จากต้นทาง

เว็บแอปสามารถใช้ 2 วิธี ได้แก่ getBudget() และ getCost() เพื่อวางแผนการใช้งบประมาณ

ใน Chrome 60 คุณจะใช้ทั้ง 2 วิธีนี้ได้หากลงชื่อสมัครใช้ช่วงทดลองใช้จากต้นทาง แต่หากต้องการทดสอบ คุณจะใช้ฟีเจอร์เหล่านี้ได้แบบในเครื่องโดยเปิดใช้ Flag ฟีเจอร์แพลตฟอร์มเว็บเวอร์ชันทดลอง (เปิด chrome://flags/#enable-experimental-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'.

ประโยชน์อย่างหนึ่งของการรวมการอนุญาตงบประมาณในอนาคตคือนักพัฒนาแอปสามารถแชร์ข้อมูลนี้กับแบ็กเอนด์เพื่อปรับลักษณะการทำงานฝั่งเซิร์ฟเวอร์ (เช่น ส่งข้อความ Push เพื่อทริกเกอร์การอัปเดตเฉพาะเมื่อลูกค้ามีงบประมาณสําหรับ Push แบบเงียบ)

ดูต้นทุนของการดำเนินการ

หากต้องการดูค่าใช้จ่ายของการดำเนินการ การเรียกใช้ getCost() จะแสดงผลเป็นตัวเลขที่ระบุจำนวนงบประมาณสูงสุดที่จะใช้หากคุณเรียกใช้ reserve() สําหรับการดำเนินการนั้น

ตัวอย่างเช่น เราอาจดูต้นทุนของการไม่แสดงการแจ้งเตือนเมื่อคุณได้รับข้อความ Push (นั่นคือต้นทุนของ Push แบบเงียบ) โดยใช้รหัสต่อไปนี้

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 Repo หรือรายงานข้อบกพร่องของ Chrome ที่ crbug.com