歡迎閱讀小型domstorage()
函式系列中的另一篇文章,在此,我想向您展示乙個名為domstorage()
的簡潔抽象,它提供了一組與web storage互動的便捷函式,同時可以離散地處理所有最常見的要點。失敗。
如果您還不熟悉web儲存(又名dom儲存),則建議您閱讀colin ihrig的文章: web儲存api概述 。
這是domstorage()
函式的**:
function domstorage(persist)
} catch(ex)
return
, write : function(key, value)
catch(ex)
}, erase : function(key)
, keys : function()
return keys;
}, clear : function()
catch(ex) }};
}
domstorage()
函式返回乙個物件,該物件包含可以用作諸如讀取和寫入值之類的快捷方式的方法。 但是,如果不支援web儲存或在瀏覽器中將其禁用,則domstorage()
函式將返回null
。 首先呼叫domstorage()
並儲存它返回的引用,如下所示。
var storage = domstorage();
預設情況下,該函式建立對會話儲存的引用-資料將在瀏覽器會話結束時自動刪除。 您還可以通過傳遞布林值true
來選擇永續性儲存,如下所示。 在這種情況下,資料將一直保留到您或使用者刪除它為止。
var storage = domstorage(true);
有了storage
引用後,應在嘗試使用其方法之前測試它是否為null
:
var storage = domstorage();
if(storage !== null)
主要方法是具有單個key
引數的read()
和具有key
和value
write()
。 儲存互動是同步的,因此您可以在寫入值後立即讀取它:
storage.write("key", "value");
storage.read("key");
所有儲存的值都是字串,任何其他資料型別都將進行靜默轉換(例如123
被儲存為"123"
)。 如果需要儲存複雜資料,最好的方法是將其另存為json字串:
storage.write("key", json.stringify(data));
如果成功,則read()
和write()
方法都返回乙個字串,否則返回null
。read()
失敗意味著該鍵沒有儲存值,而write()
失敗意味著未儲存該值。 只有根據瀏覽器首選項設定的配額,該值對於可用的剩餘儲存空間而言太大時才會發生,我們將在下一部分中討論。
if(storage.write("key", "value") === null)
還有兩種刪除方法,一種刪除單個值:
storage.erase("key");
另乙個用於清除儲存物件中的每個值(請特別注意!):
storage.clear();
最後,對於儲存物件中當前定義的每個值,都有乙個keys()
方法返回乙個字串鍵陣列:
var keys = storage.keys();
例如,您可以使用它來檢查儲存物件並找出其包含多少資料:
var size = 0,
keys = storage.keys();
for(var n = keys.length, i = 0; i < n; i ++)
alert((size / 1000).tofixed(2) + 'k');
本質上,domstorage()
函式所做的全部工作就是定義一組快捷方法,但它也處理可能會導致錯誤的多個故障點。 第乙個也是最有可能發生的故障是在獲取對儲存物件本身的引用(根據persist
引數指定為sessionstorage
或localstorage
)時發生的。 可能不支援該儲存物件,但是即使支援該儲存物件,在引用該儲存物件時也可能會引發錯誤。 這是因為如果使用儲存會違反策略決定(例如被使用者禁用),則該規範允許瀏覽器丟擲安全錯誤。 因此,這是我們需要異常處理的第乙個地方,捕獲任何此類錯誤並為失敗返回null
:
try
}catch(ex)
下乙個潛在的失敗是在儲存值時,因為我們可以儲存多少資料受到限制。 瀏覽器設定配額,並且大多數瀏覽器還提供使用者偏好來進行調整。 據我所知,尚無可靠的方法以程式設計方式確定配額是多少,但這通常綽綽有餘2-5mb
,具體取決於瀏覽器。 如果儲存的值將超過該配額,則瀏覽器將引發另乙個錯誤。 因此,我們處理該問題並為失敗返回null
:
try
catch(ex)
您會注意到,我使用方括號表示法而不是setitem()
函式,這只是為了方便在單個表示式中儲存和返回值,作為對此的替代方法:
try
catch(ex)
失敗的最後一點是使用clear()
函式時,因為某些早期的實現不支援它(例如firefox 3)。 為了避免在這些實現中引發錯誤,我們再次使用異常處理,然後返回true
或false
表示成功:
try
catch(ex)
如果您確實確實需要此功能在較舊的實現中工作,則可以通過使用keys()
方法來完成相同的事情很簡單–遍歷返回的鍵並手動擦除每個值:
if(storage.clear() === false)
}
請注意,firefox 2-3對web storage的支援有限-除了缺少對clear()
支援之外,它們根本不支援localstorage
,僅支援sessionstorage
。 值得注意的是ie7根本不支援web儲存。 ie8確實支援它,即使是在相容模式下也給人以錯誤的印象,即ie7也支援它。
domstorage()
成為有用的抽象的原因是它無縫地處理這些不同故障點的方式。 它省去了重複檢查和測試並處理異常的麻煩,從而使簡單的任務(如讀寫)變得應有盡有!
from:
NAS網路儲存
nas network attached storage 網路儲存基於標準網路協議實現資料傳輸,為網路中的windows linux mac os 等各種不同作業系統的計算機提供檔案共享和資料備份。優點nas是通過網線連線的磁碟陣列,具備磁碟陣列的所有主要特徵 高容量 高效能 高可靠。1 nas 具...
ISCSI網路儲存盤的建立和使用
伺服器端 iscsi server 192.168.1.2 root iscsi server yum y install targetcli 安裝targetcli軟體包,用來搭建iscsi root iscsi server targetcli ls 檢視最初的配置情況 backstores b...
網路爬蟲(2) 儲存
目前我想到的儲存方案有兩種 單檔案單頁面儲存和單檔案多頁面儲存。單檔案單頁面儲存就是乙個頁面儲存在乙個檔案中,檔名稱可以使用頁面編號doc id。這種方案查詢的時候容易定位,直接使用檔名就可以,缺點是會產生大量瑣碎的檔案,管理 冗餘和查詢感覺都不太方便。單檔案多頁面儲存即乙個檔案儲存多個頁面,寫滿乙...