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

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

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

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

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

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

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

คุณจะใช้เมธอด navigator.budget.reserve() ใน Chrome 60 ขึ้นไปได้ ที่ไม่มี Flag ใดๆ เลย

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

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

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

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

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

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

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

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

ดูค่าใช้จ่ายในการดำเนินการ

หากต้องการดูว่าการดำเนินการหนึ่งๆ มีค่าใช้จ่ายเท่าใด การโทรหา 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