Habréã§ã ãã§ã«ã¯ã©ã€ã¢ã³ãã«å€§èŠæš¡ãªæ§é åããŒã¿ãä¿åããããã®æšæºã§ããIndexedDB ã«ã€ããŠè©±ããŸããã ããããããã¯ããªãåã®ããšã§ãããAPIã¯å€§ããå€ãããŸããã ããã«ãããããããæ€çŽ¢ã®æåã®èšäºã®1ã€ããããã¢ãããããã®ãã¯ãããžãŒã䜿çšããããšããå€ãã®äººã誀解ãããŸãã ãã®ãããçŸåšã®APIã«é¢ããæ å ±ãå«ãæ°ããèšäºãæžãããšã«ããŸããã
IndexedDBãšã¯
IndexedDBã¯ãWeb Storageã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠå©çšå¯èœãªããŒ/å€ãã¢ã®WebããŒã¹ã®ã¹ãã¬ãŒãžãããã¯ããã«åŒ·åã§å¹ççã§ä¿¡é Œæ§ã®é«ããªããžã§ã¯ãããŒã¿ããŒã¹ã§ãã Webã¹ãã¬ãŒãžããã³ãã¡ã€ã«ã·ã¹ãã ãžã®ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ãšåæ§ã«ãããŒã¿ããŒã¹ã®å¯çšæ§ã¯ããããäœæããããã¥ã¡ã³ãã®äœæå ã«ãã£ãŠæ±ºãŸããŸãã
ãªãªãžã³ããšã«ãä»»æã®æ°ã®IndexedDBããŒã¿ããŒã¹ãäœæã§ããŸãã åããŒã¿ããŒã¹ã«ã¯ãç¹å®ã®ãªãªãžã³ã«å¯ŸããŠäžæã§ãªããã°ãªããªãååããããŸãã IndexedDBã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã®èŠ³ç¹ããèŠããšãããŒã¿ããŒã¹ã¯ååä»ããªããžã§ã¯ãã¹ãã¢ã®åçŽãªã³ã¬ã¯ã·ã§ã³ã§ãã åãªããžã§ã¯ãã«ã¯ãä¿åããã³ã¹ãã¬ãŒãžããã®ååŸã«äœ¿çšããããŒãå¿ èŠã§ãã ããŒã¯äžæã§ããå¿ èŠãããããœãŒãããã«ã¯èªç¶ãªé åºã§ããå¿ èŠããããŸãã IndexedDBã¯ãããŒã¿ããŒã¹ã«è¿œå ããããªããžã§ã¯ãããšã«äžæã®ããŒãèªåçã«çæã§ããŸãã ãã ããå€ãã®å Žåããªããžã§ã¯ãã¹ãã¢ã«æ ŒçŽãããŠãããªããžã§ã¯ãã«ã¯ãããŒãšããŠäœ¿çšããã®ã«é©ããããããã£ãæ¢ã«ãããŸãã ãã®å Žåããªããžã§ã¯ãã¹ãã¢ãäœæãããšãã«ãåã«ããŒããããã£ãå®çŸ©ããã ãã§ååã§ãã
äž»ããŒã®å€ã«ãã£ãŠã¹ãã¬ãŒãžãããªããžã§ã¯ããååŸããæ©èœã«å ããŠããªããžã§ã¯ãã®ä»ã®ããããã£ã®å€ã«ãã£ãŠæ€çŽ¢ããæ©èœããããŸãã ãã®æ©èœãæäŸããããã«ããªããžã§ã¯ãã¹ãã¢ã§ä»»æã®æ°ã®ã€ã³ããã¯ã¹ãå®çŸ©ã§ããŸãã åã€ã³ããã¯ã¹ã¯ãä¿åããããªããžã§ã¯ãã®äºæ¬¡ããŒãå®çŸ©ããŸãã ãããã®ã€ã³ããã¯ã¹ã¯å šäœãšããŠäžæã§ã¯ãªããå€ãã®ãªããžã§ã¯ããåãããŒã«å¯Ÿå¿ã§ããŸãã ãããã£ãŠãã€ã³ããã¯ã¹ã䜿çšããŠãªããžã§ã¯ãã¹ãã¢ã«ã¢ã¯ã»ã¹ããæäœã§ã¯ãéåžžãçµæã¹ããªãŒã ãããªããžã§ã¯ãã1ã€ãã€æœåºããããã®ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ãå®çŸ©ããã«ãŒãœã«ã䜿çšãããŸãã
IndexedDBã¯æäœã®ååæ§ãä¿èšŒããŸãïŒããŒã¿ããŒã¹å ã®èªã¿åãããã³æžã蟌ã¿æäœã¯ãã©ã³ã¶ã¯ã·ã§ã³ã«çµåãããŸããããã«ããããããã¯ãã¹ãŠæ£åžžã«å®äºããããããããå®è¡ããããããŒã¿ããŒã¹ã¯æªå®çŸ©ã®éšåçã«å€æŽãããç¶æ ã®ãŸãŸã«ãªããŸããã
ããå§ããŸããã
IE> 9ãFirefox> 15ãChrome> 23ã¯ããã¬ãã£ãã¯ã¹ãªãã§ã®åäœããµããŒãããŸããããã¹ãŠã®ãªãã·ã§ã³ã確èªããããšããå§ãããŸãã
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction;
ããŒã¿ããŒã¹æ¥ç¶
ããŒã¿ããŒã¹ã®æäœã¯ãéãèŠæ±ããå§ãŸããŸãã
var request = indexedDB.open("myBase", 1);
openã¡ãœããã¯IDBOpenDBRequestãªããžã§ã¯ããè¿ããŸããããã§ã¯ã3ã€ã®ã€ãã³ããã³ãã©ãŒã«é¢å¿ããããŸãã
- onerror ;
- æåãã
- onupgradeneeded ã
ãšã©ãŒãçºçãããšOnerrorãçºçãããã©ã¡ãŒã¿ã§ãšã©ãŒãªããžã§ã¯ããåãåããŸãã
ãã¹ãŠãé 調ã«é²ãã å Žåã«OnsuccessãåŒã³åºãããŸãããã¡ãœããã¯éããŠããããŒã¿ããŒã¹ã®ã€ã³ã¹ã¿ã³ã¹ããã©ã¡ãŒã¿ãŒãšããŠåãåããŸããã éããŠããããŒã¿ããŒã¹ã«ã¯ããªã¯ãšã¹ããªããžã§ã¯ãrequest.resultããã¢ã¯ã»ã¹ã§ããŸãã
ãããŸã§ã®ãšããããã¹ãŠã¯ä»¥åãšåãã§ããããä»ã§ã¯éããå§ãŸããŸãã openã¡ãœããã®2çªç®ã®åŒæ°ã¯ãããŒã¿ããŒã¹ã®ããŒãžã§ã³ã§ãã ããŒãžã§ã³ã¯èªç¶æ°ã®ã¿ã§ãã åæ°ãæž¡ããšãæãè¿ãæŽæ°ã«äžžããããŸãã æå®ãããããŒãžã§ã³ã®ããŒã¿ããŒã¹ãååšããªãå Žåã onupgradeneededãåŒã³åºãããå€ãããŒãžã§ã³ãååšããå Žåã¯ããŒã¿ããŒã¹ãå€æŽããååšããªãå Žåã¯ããŒã¿ããŒã¹ãäœæã§ããŸãã
ãããã£ãŠãããŒã¿ããŒã¹ã«æ¥ç¶ããæ±çšæ©èœã¯ãããšãã°æ¬¡ã®ããã«ãªããŸãã
function connectDB(f){ var request = indexedDB.open("myBase", 1); request.onerror = function(err){ console.log(err); }; request.onsuccess = function(){ // f(request.result); } request.onupgradeneeded = function(e){ // , . e.currentTarget.result.createObjectStore("myObjectStore", { keyPath: "key" }); connectDB(f); } }
ããã§ãfã¯ãéããŠããããŒã¿ããŒã¹ãæž¡ãããé¢æ°ã§ãã
ããŒã¿ããŒã¹æ§é
IndexedDBã¯ããŒãã«ã§ã¯åäœããŸãããããªããžã§ã¯ãã¹ãã¢ïŒ ObjectStoreã§åäœããŸãã ObjectStoreãäœæãããšããããŒãã£ãŒã«ãã®ååïŒèšå®ãªããžã§ã¯ãã®æååããããã£ïŒkeyPathïŒãšããŒã®èªåçæïŒèšå®ãªããžã§ã¯ãã®ããŒã«ããããã£ïŒautoIncrementïŒã®ååãšãã©ã¡ãŒã¿ãŒãæå®ã§ããŸãã
ããŒãã£ãŒã«ãã«é¢ããŠã4ã€ã®è¡åæŠç¥ããããŸãïŒ
- ããŒãã£ãŒã«ããæå®ãããŠããããããŒçæãæå¹ã«ãªã£ãŠããŸãããæ°ããã¬ã³ãŒããè¿œå ããããã³ã«ããŒãæåã§æå®ããå¿ èŠããããŸãã
- ããŒãã£ãŒã«ãã瀺ãããèªåçæã¯ãªãã§ã-ããŒãã£ãŒã«ããããŒã§ãã
- ããŒãã£ãŒã«ãã¯æå®ããããèªåçæããªã³ã«ãªããŸã-IndexedDBèªäœãããŒå€ãçæããŸãããæ°ããã¬ã³ãŒããè¿œå ãããšãã«ããŒå€ãæå®ã§ããŸãã
- ããŒãã£ãŒã«ãã瀺ãããèªåçæãæå¹ã«ãªã£ãŠããŸã-æ°ããèŠçŽ ã«ããŒããããã£ããªãå ŽåãIndexedDBã¯æ°ããå€ãçæããŸãã
ç°ãªãã¿ã€ãã®ã¬ã³ãŒãã«ã¯ãç°ãªããªãã·ã§ã³ãé©ããŠããŸãã ããšãã°ãããªããã£ããä¿åããå Žåã¯ããããã®ããŒãã£ãŒã«ããçæããããšããå§ãããŸãã éåžžããªããžã§ã¯ããä¿åããããŒãã£ãŒã«ãã䜿çšããŸãã
createObjectStoreã¡ãœããã䜿çšããŠObjectStoreãäœæã§ããŸãã ObjectStoreãäœæãããšãããã®ååãšãã©ã¡ãŒã¿ãŒïŒããŒãã£ãŒã«ããªã©ïŒãæå®ã§ããŸãã createIndexã¡ãœããã䜿çšããŠãããŒã¿ããŒã¹ã€ã³ããã¯ã¹ãäœæã§ããŸãã ã€ã³ããã¯ã¹ãäœæãããšãããã®ååãäœæããå¿ èŠããããã£ãŒã«ããããã³ããŒã®äžææ§ãªã©ã®ãã©ã¡ãŒã¿ãæå®ã§ããŸãã
objectStore.createIndex("name", "name", { unique: false });
ã¡ã¢ãæäœãã
ã¯ããã«è¿°ã¹ãããã«ãIndexedDBã®ã¬ã³ãŒãã䜿çšããæäœã¯ããã©ã³ã¶ã¯ã·ã§ã³ã®äžéšãšããŠçºçããŸãã ãã©ã³ã¶ã¯ã·ã§ã³ã¯ã ãã©ã³ã¶ã¯ã·ã§ã³ã¡ãœããã«ãã£ãŠéãããŸãã ãã®ã¡ãœããã§ã¯ãå¿ èŠãªObjectStoreãšã¢ã¯ã»ã¹ã¢ãŒãïŒèªã¿åããèªã¿åããšæžã蟌ã¿ãããŒãžã§ã³å€æŽïŒãæå®ããå¿ èŠããããŸãã ããŒãžã§ã³å€æŽã¢ãŒãã¯ãåºæ¬çã«onupgradeneededã¡ãœãããšåãã§ãã
ç¹å®ã®æ°å€ã枬å®ããŸããã§ããããããã©ãŒãã³ã¹ã®èŠ³ç¹ããããã©ã³ã¶ã¯ã·ã§ã³ãã©ã¡ãŒã¿ãæ éã«èšå®ããæ¹ãè¯ããšæããŸããå¿ èŠãªObjectStoreã®ã¿ãéããèªã¿åããå¿ èŠãªãšãã«ã¬ã³ãŒããèŠæ±ããªãã§ãã ããã
db.transaction(["myObjectStore"], "readonly");
éãããã©ã³ã¶ã¯ã·ã§ã³ãã§ããã®ã§ãã¬ã³ãŒããæäœããããã®æ¬¡ã®ã¡ãœãããæã€ObjectStoreãååŸã§ããŸãã
- add-å³å¯ã«æ°ããã¬ã³ãŒããè¿œå ããŸããæ¢åã®ããŒã§ã¬ã³ãŒããè¿œå ããããšãããšããšã©ãŒãçºçããŸãã
- put-æå®ãããããŒã®æ°ããã¬ã³ãŒããäžæžããŸãã¯äœæããŸãã
- get-ããŒã§ã¬ã³ãŒããè¿ããŸãã
- delete-æå®ãããããŒã®ã¬ã³ãŒããåé€ããŸãã
ã«ãŒãœã«
getã¡ãœããã¯ãããŒã¿ãåä¿¡ããããŒãããã£ãŠããå Žåã«äŸ¿å©ã§ãã ObjectStoreã®ãã¹ãŠã®ãšã³ããªã調ã¹ããå Žåã¯ãã«ãŒãœã«ã䜿çšã§ããŸãã
var customers = []; objectStore.openCursor().onsuccess = function(event) { var cursor = event.target.result; if (cursor) { customers.push(cursor.value); cursor.continue(); } else { alert("Got all customers: " + customers); } };
ããããç§ã®ãããªMozillaã®äººãã¡ã¯ããã¹ãŠã®ã¬ã³ãŒããäžå¿«ã«ãããã®æ¹æ³ãèŠã€ããObjectStoreã®ãã¹ãŠã®ã³ã³ãã³ããå³åº§ã«è¿ãã¡ãœããmozGetAllãäœæããŸãã ã å°æ¥ãä»ã®ãã©ãŠã¶ãå®è£ ããããšãé¡ã£ãŠããŸãã
玢åŒ
ã€ã³ããã¯ã¹ã䜿çšããŠå€ãååŸããå Žåããã¹ãŠãéåžžã«ç°¡åã§ãïŒ
var index = objectStore.index("name"); index.get("Donna").onsuccess = function(event) { alert("Donna's SSN is " + event.target.result.ssn); };
å¶éäºé
倧ãã
ãµã€ãºã«ã»ãšãã©å¶éã¯ãããŸããã Firefoxã¯ããŒããã©ã€ãã®ãµã€ãºã®ã¿ãå¶éããŸããã50ã¡ã¬ãã€ãããšã«ãŠãŒã¶ãŒã®ç¢ºèªãå¿ èŠã§ãããšããæ¡ä»¶ã§ã Chromeã¯ãåããŒã¿ããŒã¹ããã®ååã®20ïŒ ã«å¶éããªãããããããäœæãããã¹ãŠã®WebããŒãžã®ããŒã¿ããŒã¹ã®äžã®ããŒããã©ã€ãã®ååãå æã§ããŸãã
ãã©ãŠã¶ã®ãµããŒã
ç§ã®æèŠã§ã¯ããµãã¡ãªãšã¢ãã€ã«ãªãã©ãé€ããã¹ãŠã®æ°ãããã©ãŠã¶ã§ãµããŒããããŠããŸããããããã¯éèŠã§ã¯ãããŸããã
äŸ
éåžžããã¹ãŠã®èšäºã§ã¢ãã¬ã¹åž³ãäŸãšããŠèããããŠããŸãããæ¬è³ªçã«éãã¯ãªããã³ãŒãå šäœã¯æ®éçã§ãããå€æŽã®ããã«ãã¡ã€ã«ã¹ãã¬ãŒãžã衚瀺ããããšã«ããŸããã
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB, IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction, baseName = "filesBase", storeName = "filesStore"; function logerr(err){ console.log(err); } function connectDB(f){ var request = indexedDB.open(baseName, 1); request.onerror = logerr; request.onsuccess = function(){ f(request.result); } request.onupgradeneeded = function(e){ e.currentTarget.result.createObjectStore(storeName, { keyPath: "path" }); connectDB(f); } } function getFile(file, f){ connectDB(function(db){ var request = db.transaction([storeName], "readonly").objectStore(storeName).get(file); request.onerror = logerr; request.onsuccess = function(){ f(request.result ? request.result : -1); } }); } function getStorage(f){ connectDB(function(db){ var rows = [], store = db.transaction([storeName], "readonly").objectStore(storeName); if(store.mozGetAll) store.mozGetAll().onsuccess = function(e){ f(e.target.result); }; else store.openCursor().onsuccess = function(e) { var cursor = e.target.result; if(cursor){ rows.push(cursor.value); cursor.continue(); } else { f(rows); } }; }); } function setFile(file){ connectDB(function(db){ var request = db.transaction([storeName], "readwrite").objectStore(storeName).put(file); request.onerror = logerr; request.onsuccess = function(){ return request.result; } }); } function delFile(file){ connectDB(function(db){ var request = db.transaction([storeName], "readwrite").objectStore(storeName).delete(file); request.onerror = logerr; request.onsuccess = function(){ console.log("File delete from DB:", file); } }); }
ãããã«
IndexedDBã¯ãã§ã«ãã©ãŠã¶ã§å®å šã«ãµããŒããããŠãããããã«äœ¿çšã§ããŸãã ããã¯ãã¹ã¿ã³ãã¢ãã³ã®Webã¢ããªã±ãŒã·ã§ã³ãäœæããããã®åªããããŒã«ã§ãããäŸç¶ãšããŠè³¢æã«äœ¿çšããå¿ èŠããããŸãã WebStorageãåé¿ããæ¹æ³-WebStorageãåé¿ããæ¹æ³ãæ¹åããŸãã ã¯ã©ã€ã¢ã³ãã«äœãä¿åã§ããªãå Žåã¯ãã¯ã©ã€ã¢ã³ãã«äœãä¿åããªãæ¹ãè¯ãã§ãããã
çŸåšãWebStorageãFileSystem APIãIndexedDBãããã³WebSQLãšã®é£æºãå éšã«ã«ãã»ã«åããã©ã€ãã©ãªã¯å¢ããŠããŸãããç§ã®æèŠã§ã¯ãç解ããã«ä»ã®äººã®ã³ãŒãã®æããã©ãã°ããªãããã«ãå°ãªããšã1åã¯ã³ãŒããèšè¿°ããæ¹ãè¯ãã§ãããä»äºã
MDNã®è©³çŽ°ã