Web Storage の残容量を調べてみた
Web Storage に保存可能なデータ量を計測してみました。
Browser | Max |
---|---|
Firefox3.5.3 | 5MB |
Firefox3.6β5 | 4.99MB |
iPhone 3.1.2 | 2.49MB |
Safari4 | 50MB以上 |
Chrome 4 | 2.49MB |
IE8 | 2.22MB |
Opera10.50 | 2.49MB |
(バッド)ノウハウ
iPhone で容量オーバーを回避する
既存のデータと上書するデータの合計が 2.4MBを超える場合に容量オーバーが発生します。回避するには、一度空文字列で上書します。
var db = window.localStorage; db["a"] = ""; // 空文字列で上書(削除) db["a"] = "......."; // 設定
IE8 には残量を示す localStorage.remainingSpace がある
IE8 の localStorage には、HTML5 の仕様に無いプロパティ remainingSpace が存在します。初期値は 2329405 (約2.22MB) です。
Firefox3.6β5 は連続アクセスで OS のスワップを食いつぶす
ある程度データを格納した状態で、localStorage に数byteのデータを連続で書き込むと、100MB単位でOSのスワップを食いつぶす現象が発生します。数秒〜数十秒でメモリを開放するようですが、アプリケーションのほとんどがスワップアウトしてしまい、全体が不安定になるケースもありました。
Firefox3.5.3 では発生しないようです。
SharedObject は、一度に 98kBまでのデータを格納できる
Flash Storage(SharedObject) のデフォルト容量は 100kB ということですが、利用可能な容量は 99kB までと考えるべきです(それ以上要求するとユーザに許可を求めるダイアログが出てしまう)。
また、一度に 99kB のデータを入れようとすると容量オーバーと言われてしまいます。98kBのデータと1kBのデータ(合計99kB)を格納することは可能です。
Cookie は 4kB をフルに利用できない
Cookie は 4kB 程度のデータを入れられるはずですが、IE で容量をギリギリまで利用しようとすると、データの安全性に問題が発生するようです。
また、Cookie は他のライブラリからも利用されるため、ストレージとしての最大値は 3.8kB ぐらいかなと。
IEStorage (userData behavior) はキーに制限がある
a-zA-Z_[a-zA-Z0-9_]* は OK で、それ以外はエラーになります。
内部的には、setAttriute(key, value) が走るので、Ident の制限ってことになりますね。もちろん urlencode 等で回避もできます。
Opera10.10 の Unite は存在しないファイルの扱いが GET と HEAD で異なる
GET → 404, HEAD → 200
バグかな?
uupaa.js で利用可能なストレージ容量の一覧
Web Storage (localStorage) | Max |
---|---|
Firefox3.5.3 | 4.9MB |
Firefox3.6β5 | 4.9MB |
iPhone 3.1.2 | 2.4MB |
Safari4 | 8MB |
Chrome 4 | 2.4MB |
IE8 | 2.2MB |
Opera10.50 | 2.4MB |
IEStorage (userData behavior) | |
IE6〜IE8 | 63kB |
FlashStorage (SharedObject) | |
FlashPlayer8+ | 99kB |
CookieStorage (Cookie) | |
any | 3.8kB |
uu.storage.info() が { use, max, free } を返します。max の値は上記の表の値になります。
Web Storage の容量は、localStorage と sessionStorage で共用です。実際に利用可能な容量はもっと少ない場合があります。
Cookie Storage はセッショントラッキング用の Cookie などと共用なので、実際に利用可能な容量はもっと少ない場合があります。