js讀取本地文件的方法「js獲取本地文件絕對路徑」

JavaScript中本地存儲的方式有哪些?

一、方式

javaScript本地緩存的方法我們主要講述以下四種:

  • cookie
  • sessionStorage
  • localStorage
  • indexedDB

cookie

Cookie,類型為「小型文本文件」,指某些網站為了辨別用戶身份而儲存在用戶本地終端上的數據。是為了解決 HTTP無狀態導致的問題

作為一段一般不超過 4KB 的小型文本數據,它由一個名稱(Name)、一個值(Value)和其它幾個用於控制 cookie有效期、安全性、使用範圍的可選屬性組成

但是cookie在每次請求中都會被發送,如果不使用 HTTPS並對其加密,其保存的信息很容易被竊取,導致安全風險。舉個例子,在一些使用 cookie保持登錄態的網站上,如果 cookie被竊取,他人很容易利用你的 cookie來假扮成你登錄網站

關於cookie常用的屬性如下:

  • Expires 用於設置 Cookie 的過期時間
Expires=Wed, 21 Oct 2015 07:28:00 GMT  
  • Max-Age 用於設置在 Cookie 失效之前需要經過的秒數(優先級比Expires高)
Max-Age=604800  
  • Domain指定了 Cookie 可以送達的主機名
  • Path指定了一個 URL路徑,這個路徑必須出現在要請求的資源的路徑中才可以發送 Cookie 首部
Path=/docs   # /docs/Web/ 下的資源會帶 Cookie 首部  
  • 標記為 Secure的 Cookie只應通過被HTTPS協議加密過的請求發送給服務端

通過上述,我們可以看到cookie又開始的作用並不是為了緩存而設計出來,只是借用了cookie的特性實現緩存

關於cookie的使用如下:

document.cookie = '名字=值';  

關於cookie的修改,首先要確定domain和path屬性都是相同的才可以,其中有一個不同得時候都會創建出一個新的cookie

Set-Cookie:name=aa; domain=aa.net; path=/  # 服務端設置  
document.cookie =name=bb; domain=aa.net; path=/  # 客戶端設置  

最後cookie的刪除,最常用的方法就是給cookie設置一個過期的事件,這樣cookie過期後會被瀏覽器刪除

localStorage

HTML5新方法,IE8及以上瀏覽器都兼容

特點

  • 生命周期:持久化的本地存儲,除非主動刪除數據,否則數據是永遠不會過期的
  • 存儲的信息在同一域中是共享的
  • 當本頁操作(新增、修改、刪除)了localStorage的時候,本頁面不會觸發storage事件,但是別的頁面會觸發storage事件。
  • 大小:5M(跟瀏覽器廠商有關係)
  • localStorage本質上是對字符串的讀取,如果存儲內容多的話會消耗內存空間,會導致頁面變卡
  • 受同源策略的限制

下面再看看關於localStorage的使用

設置

localStorage.setItem('username','cfangxu');  

獲取

localStorage.getItem('username')  

獲取鍵名

localStorage.key(0) //獲取第一個鍵名  

刪除

localStorage.removeItem('username')  

一次性清除所有存儲

localStorage.clear()  

localStorage 也不是完美的,它有兩個缺點:

  • 無法像Cookie一樣設置過期時間
  • 只能存入字符串,無法直接存入對象
localStorage.setItem('key', {name: 'value'});  
console.log(localStorage.getItem('key')); // '[object, Object]'  

sessionStorage

sessionStorage和 localStorage使用方法基本一致,唯一不同的是生命周期,一旦頁面(會話)關閉,sessionStorage 將會刪除數據

擴展的前端存儲方式

indexedDB是一種低級API,用於客戶端存儲大量結構化數據(包括, 文件/ blobs)。該API使用索引來實現對該數據的高性能搜索

雖然 Web Storage對於存儲較少量的數據很有用,但對於存儲更大量的結構化數據來說,這種方法不太有用。IndexedDB提供了一個解決方案

優點:

  • 儲存量理論上沒有上限
  • 所有操作都是異步的,相比 LocalStorage 同步操作性能更高,尤其是數據量較大時
  • 原生支持儲存JS的對象
  • 是個正經的數據庫,意味着數據庫能幹的事它都能幹

缺點:

  • 操作非常繁瑣
  • 本身有一定門檻

關於indexedDB的使用基本使用步驟如下:

  • 打開數據庫並且開始一個事務
  • 創建一個 object store
  • 構建一個請求來執行一些數據庫操作,像增加或提取數據等。
  • 通過監聽正確類型的 DOM 事件已等待操作完成。
  • 在操作結果上進行一些操作(可以在 request對象中找到)

關於使用indexdb的使用會比較繁瑣,大家可以通過使用Godb.js庫進行緩存,最大化地降低操作難度

二、區別

關於cookie、sessionStorage、localStorage三者的區別主要如下:

  • 存儲大小:cookie數據大小不能超過4k,sessionStorage和localStorage雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大
  • 有效時間:localStorage存儲持久數據,瀏覽器關閉後數據不丟失除非主動刪除數據;sessionStorage數據在當前瀏覽器窗口關閉後自動刪除;cookie設置的cookie過期時間之前一直有效,即使窗口或瀏覽器關閉
  • 數據與服務器之間的交互方式,cookie的數據會自動地傳遞到服務器,服務器端也可以寫cookie到客戶端;sessionStorage和localStorage不會自動把數據發給服務器,僅在本地保存

三、應用場景

在了解了上述的前端的緩存方式後,我們可以看看針對不對場景的使用選擇:

  • 標記用戶與跟蹤用戶行為的情況,推薦使用cookie
  • 適合長期保存在本地的數據(令牌),推薦使用localStorage
  • 敏感賬號一次性登錄,推薦使用sessionStorage
  • 存儲大量數據的情況、在線文檔(附文本編輯器)保存編輯歷史的情況,推薦使用indexedDB

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/250230.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-13 13:30
下一篇 2024-12-13 13:30

相關推薦

發表回復

登錄後才能評論