localForage 是一個快速而簡單的JavaScript 存儲庫。通過使用異步存儲(IndexedDB 或WebSQL)和簡單的類localStorage 的API ,localForage 能改善Web 應用的離線體驗。
在不支持IndexedDB 或WebSQL 的瀏覽器中,localForage 使用localStorage。有關兼容性詳情,請參閱wiki。
使用localForage,只需將JavaScript 文件放入頁面即可:
< script src =" localforage/dist/localforage.js " > </ script >
< script > localforage . getItem ( 'something' , myCallback ) ; </ script >試一試示例。
下載GitHub 上最新的localForage ,或通過npm 安裝:
npm install localforage或通過bower:
bower install localforagelocalForage 也兼容browserify。
感到迷茫?需要幫助?試一試localForage API 文檔。
如果你正在使用本庫,運行測試或想為localForage 做出貢獻,可訪問irc.freenode.net 並在#localforage頻道諮詢有關localForage 的問題。
最佳諮詢人員是tofumatt ,他在線時間一般為格林威治時間10 am - 8 pm。
從Safari 10.1 開始,默認為IndexedDB;請參閱CHANGELOG 了解更多。
由於localForage 使用異步存儲,因此API 是異步的。在其他方面,與localStorage API 完全相同。
localForage 支持兩種API,你可以使用回調函數形式或Promise。如果你不確定哪一個更適合你,那麼建議使用Promise。
下面是一個回調函數形式的示例:
localforage . setItem ( 'key' , 'value' , function ( err ) {
// 若 err 不为 null,则表示出错
localforage . getItem ( 'key' , function ( err , value ) {
// 若 err 不为 null,则表示出错,否则 value 为 key 对应的值
} ) ;
} ) ;Promise 形式:
localforage . setItem ( 'key' , 'value' ) . then ( function ( ) {
return localforage . getItem ( 'key' ) ;
} ) . then ( function ( value ) {
// 成功获取值
} ) . catch ( function ( err ) {
// 出错了
} ) ;更多的示例,請訪問API 文檔。
你可以在localForage 中存儲任何類型; 不像localStorage 只能存儲字符串。即使後端的存儲形式為localStorage,當需要獲取/設置值時,localForage 也會自動執行JSON.parse()和JSON.stringify() 。
只要是可以序列化為JSON 的原生JS 對象,localForage 都可以存儲,包括ArrayBuffers,Blob 和TypedArrays。在API 文檔可查看localForage 支持所有類型。
所有的後端存儲驅動支持所有類型在,但localStorage 有存儲限制,所以無法存儲大型Blob。
你可以通過config()方法設置數據庫信息。可用的選項有driver , name , storeName , version , size ,和description 。
示例:
localforage . config ( {
driver : localforage . WEBSQL , // 使用 WebSQL;也可以使用 setDriver()
name : 'myApp' ,
version : 1.0 ,
size : 4980736 , // 数据库的大小,单位为字节。现仅 WebSQL 可用
storeName : 'keyvaluepairs' , // 仅接受字母,数字和下划线
description : 'some description'
} ) ; **注意:**在數據交互之前,你必須先調用config() 。即在使用getItem() , setItem() , removeItem() , clear() , key() , keys()或length()前要先調用config() 。
通過createInstance方法,你可以創建多個localForage 實例,且能指向不同數據倉庫。所有config 中的配置選項都可用。
var store = localforage . createInstance ( {
name : "nameHere"
} ) ;
var otherStore = localforage . createInstance ( {
name : "otherName"
} ) ;
// 设置某个数据仓库 key 的值不会影响到另一个数据仓库
store . setItem ( "key" , "value" ) ;
otherStore . setItem ( "key" , "value2" ) ; 你可以通過RequireJS 使用localForage:
define ( [ 'localforage' ] , function ( localforage ) {
// 作为回调函数
localforage . setItem ( 'mykey' , 'myvalue' , console . log ) ;
// 使用 Promise
localforage . setItem ( 'mykey' , 'myvalue' ) . then ( console . log ) ;
} ) ; localForage 1.3+ 支持Browserify 和webpack。如果你使用的是早期版本的localForage,且與Browserify 或webpack 搭配時有問題,請升級至1.3.0 或更高版本。
在預構建一個正常的JavaScript 文件的時候,webpack 可能會提示警告信息。如果你不想看到警告,你可以使用下面的配置,在webpack 解析時忽略localforage :
module : {
noParse : / node_modules/localforage/dist/localforage.js / ,
loaders : [ ... ] , 若你在tsconfig.json(支持TypeScript v1.8+)中將allowSyntheticDefaultImports編譯選項設置為true ,那麼你應該這樣使用:
import localForage from "localforage" ;否則,你應該使用以下方法中的一種:
import * as localForage from "localforage" ;
// 若你用的 TypeScript 版本不支持 ES6 风格导入像 localForage 这样的 UMD 模块,则用如下方式导入:
import localForage = require ( "localforage" ) ; 若你使用如下的框架,localForage 為這幾種框架都提供了模塊作為驅動,你可以通過localForage 離線存儲數據。支持的框架驅動如下:
如果你有其他驅動,同時想將其加入此列表,請提出issue。
你可以創建你自己的驅動; 參閱defineDriver API 文檔。
Wiki 中有自定義驅動列表。
你需要有node/npm 和bower。
開發localForage,需要先fork 並安裝依賴。將USERNAME替換為你的GitHub 用戶名,並運行以下命令:
# 若你没有安装过 bower,则需要先全局安装 bower
npm install -g bower
# 将 USERNAME 替换为你的 GitHub 用户名:
git clone [email protected]:USERNAME/localForage.git
cd localForage
npm install
bower install缺少bower 依賴會導致測試失敗!
本地執行測試需要安裝PhantomJS。執行npm test (或直接: grunt test )。你的代碼必須通過linter 的檢查。
localForage 僅能在瀏覽器中運行,因此執行測試需要一個瀏覽器環境。本地測試在無頭WebKit 瀏覽器上運行(使用PhantomJS)。
通過Sauce Labs,localForage 支持Travis CI,當你Pull request 時,將在所有瀏覽器中自動執行測試。
本程序為免費軟件;許可協議為Apache License.
Copyright (c) 2013-2016 Mozilla (Contributors).