HTML5 localStorage 本地存储详解与 Bootstrap 实现

作者:工具松鼠时间:2026-10-22 10:00:55浏览:632

本文对比 Cookie 与 HTML5 Web Storage 的差异,重点解析 localStorage 和 sessionStorage 的 API 使用方法。通过 Bootstrap 框架搭建的增删改查示例,展示如何在客户端高效存储数据,避免 HTTP 传输开销,并讨论其容量限制、隐私模式兼容性及爬虫抓取等注意事项。

localStorage 概述与对比

首先介绍 localStorage 的基本概念。

近期在维护旧项目时,发现存在对 Cookie 的操作,经咨询得知目的是缓存部分信息以避免在 URL 中传递参数。然而,这种做法并未充分考量 Cookie 可能带来的负面影响:

第一,Cookie 的大小限制约为 4KB,不适合存储大规模业务数据;第二,Cookie 会随每次 HTTP 请求自动发送,造成带宽浪费。

鉴于本项目面向移动端开发,更适合采用的技术方案是 localStorage。localStorage 可视为对 Cookie 的优化升级,它允许在客户端便捷地存储数据,且不会随 HTTP 请求传输。但该技术同样存在局限性:

第一,localStorage 的容量限制约为 500 万字符,具体数值因浏览器而异;第二,在隐私浏览模式下无法读取数据;第三,其本质涉及文件读写操作,数据量大时可能导致性能卡顿(例如 Firefox 会将数据一次性导入内存,性能开销较大);第四,搜索引擎爬虫无法抓取 localStorage 内容,因此不能完全替代 URL 传参。尽管存在上述瑕疵,但瑕不掩瑜,关键在于如何正确使用 localStorage。

摘要:

HTML5 本地存储机制

过去,若仅需在前端存储数据而无需服务端处理,开发者通常只能依赖 Cookie。由于 Cookie 会随请求头在客户端与服务器间反复传输,且存在诸多缺陷,HTML5 引入了 Web Storage API 以提供更优的客户端数据存储方案。

Cookie 与 Web Storage 的主要区别如下:

  1. Cookie 存在大小限制,仅能存储约 4KB 数据,且对数量有限制;而 Web Storage 可存储约 5MB 数据。
  2. Cookie 会随请求头在客户端和服务端之间传递,从而影响网络带宽效率。
  3. Cookie 需要设置有效期,而 localStorage 为永久保存,sessionStorage 则为会话级保存。
  4. Cookie 支持设置作用路径(path)。
  5. Cookie 的操作相对复杂,而 Web Storage 提供了更简洁的 API。
  6. Cookie 的浏览器兼容性优于 Web Storage。

Web Storage 类型与特性

Web Storage 包含两种存储方式:

  1. localStorage:有效期为永久,数据持久保存,除非用户手动删除。
  2. sessionStorage:有效期为一次会话时间,关闭标签页或浏览器后数据清除。
  3. globalStorage、indexedDB 和 WebSQL 因兼容性和实用性较差,在此不予采用。

API 使用方法与 Bootstrap 示例

localStorage 和 sessionStorage 的使用方法(API)如下:

  1. localStorage 和 sessionStorage 的操作方法一致。
  2. 主要功能包括增、删、改、查。

增加或修改数据:使用 localStorage.setItem(key, value) 或直接赋值如 localStorage.a = 1。

查询数据:通过 length 属性获取项数,使用 key(index) 方法获取对应键名,通过 getItem(key) 或直接访问 localStorage.a 获取值。

删除数据:使用 removeItem(key) 方法移除指定键值对。

清空所有数据:调用 clear() 方法。


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<style>
 .panel-body input.form-control{
 width: 200px;
 }
</style>
<body>
 <div class="container">
 <div class="panel panel-primary insert">
 <div class="panel-heading">

 增加

 </div>
 <div class="panel-body">
 <label for="">key:</label>
 <input type="text" id="key" class="form-control">
 <label for="">value:</label>
 <input type="text" id="value" class="form-control">
 <button onclick="save()">save</button>
 </div>
 </div>
 <div class="panel panel-primary select">
 <div class="panel-heading">
 key-value-list:
 </div>
 <div class="panel-body">
 <button onclick="select()" class="btn btn-success">select</button>
 <button onclick="abc()" class="btn btn-warning">clear</button>
 <hr>
 <ul class="list-group">
 </ul>
 </div>
 </div>
 </div>
 </div>
 <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
 <script>
 function save(){
 var key = $(".insert #key").val()
 var value = $(".insert #value").val()
 localStorage.setItem(key,value)
 //select()
 }
 function select(){
 let str = ''
 for(var i = 0;i < localStorage.length;i ++){
 var key = localStorage.key(i)
 var value = localStorage.getItem(key)
 str +=`
 <li class="list-group-item clearfix">
 key: <span class="label label-primary key">${key}</span> &nbsp;&nbsp;&nbsp;
 value: <span class="label label-primary value">${value}</span>
 <button data-key='${key}' class="btn btn-danger delete pull-right">delete</button>
 </li>
 `
 }
 $(".select ul").html(str)
 }
 function abc(){
 localStorage.clear()
 $(".select ul").html("")
 }
 $(".select ul").delegate(".delete",'click',function () {
 console.log(1)
 var key = $(this).data("key")
 localStorage.removeItem(key)
 $(this).parent().remove()
 })
 </script>
</body>

总结

以上介绍了基于 Bootstrap 实现的 localStorage 本地存储功能,希望有所帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持!

作者最新文章