הגדרת ההיקף בטרנזקציות של IndexedDB

מה זה IndexedDB?

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

אז מה חדש?

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

מגרסה 17 ואילך, Chrome יציג הודעת שגיאה אם טרנזקציית IndexedDB לא הוקצתה למאגר אובייקטים. מכיוון שכל הקריאה והכתיבה של נתונים נעשות במסגרת טרנזקציות, עלינו ליצור טרנזקציה במסד נתונים, לציין את ההיקף (למשל, לאילו חנויות אובייקטים אתם רוצים לגשת) ולקבוע את סוג הגישה (לקריאה בלבד או לכתיבה).

מה המשמעות בקוד? ובכן, במקום להעביר מערך ריק למסד הנתונים שלנו.transaction:

var transaction = db.transaction([], IDBTransaction.READ_ONLY);

יש להגדיר את ההיקף לאחסון אובייקטים מסוים או לרשימה של מאגרי אובייקטים:

// all stores (equivalent to what use to be marked as empty array. )
var transaction = db.transaction(db.objectStoreNames, IDBTransaction.READ_ONLY);

// multiple stores:
var transaction = db.transaction(['ObjectStoreName1', 'ObjectStoreName2'],
    IDBTransaction.READ_ONLY);

// single store - these are equivalent
var transaction = db.transaction(['ObjectStoreName'], IDBTransaction.READ_ONLY);
var transaction = db.transaction('ObjectStoreName', IDBTransaction.READ_ONLY);

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

מקורות אחרים:

אז עד הפעם הבאה... המשיכו לדחוף את האינטרנט לאזורים קרובים.