浏览器缓存方式有哪些(cookie、localstorage、sessionstorage)

news2024/9/28 15:24:55

浏览器缓存方式

概要

http缓存

基于HTTP协议的浏览器文件级缓存机制

websql

只有较新的chrome浏览器支持,并以一个独立规范形式出现

indexDB

一个为了能够在客户端存储可观数量的结构化数据,并且在这些数据上使用索引进行高性能检索的 API

Cookie

一般网站为了辨别用户身份、进行 session跟踪储存在用户本地终端上的数据 (通常经过加密

Localstorage

html5的一种新的本地缓存方案(目前用的比较多),一般用来存储ajax返回的数据,加快下次页面打开时的渲染速度,浏览器关闭不会全部删除

Sessionstorage

和localstorage类似,但是浏览器关闭则会全部删除,api和localstorage相同(实际项目中使用较少

application cache

将大部分图片资源、js、css等静态资源放在manifest文件配置中

cacheStorage

在ServiceWorker的规范中定义的,可以保存每个serverWorker申明的cache对象

flash缓存

(基本不用) 主要基于flash有读写浏览器端本地目录的功能

ps:通常缓存已高亮。

 

一、localStorage 介绍

在HTML5中,为了解决cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),增加了一个 localStorage,主要是用来作为本地存储的;localStorage 中一般浏览器支持的容量大小是5M,针对不同的浏览器,localStorage容量大小会有所不同。

 

二、localStorage 使用

1>、localStorage的浏览器支持情况:

2>、localStorage 代码中的使用:

1在项目中,使用localStorage首先需要做的先判断浏览器是否支持;

2、存储

注意:localStorage的存储和读取方式,官方推荐使用 setItem / getItem;

3、读取

注意:localStorage的存储和读取方式,官方推荐使用 setItem / getItem;

4、修改

5、删除

删除指定key的值: window.localStorage.removeItem('key')

localStorage 清除当前域名下所有内容: localStorage.clear();

6localStorage中存入 JSON 对象,需先转换成 JSON 字符串,再写入,在读取时再转换成 JSON 对象:(否则会报错)

以上6种操作,在代码中使用如下:

下述代码是在【react项目+antd组件-demo:hello-world】(react项目+antd组件-demo:hello-world_西晋的no1的博客-CSDN博客 )的基础上进行的。

import React from 'react';
import {Button} from "antd";

const App = () => {

    function judge() {
        if (!window.localStorage) {
            alert("浏览器不支持localstorage");
        } else {
            alert("浏览器支持localstorage");
        }
    }

    function storeItem() {
        if (!window.localStorage) {
            alert("浏览器不支持localstorage");
        } else {
            var storage = window.localStorage;
            //第一种设置方式:
            storage["a"] = 1;
            //第二种设置方式:
            storage.b = 2;
            //第三种设置方式:
            storage.setItem("c", 3);
        }
    }

    function readItem() {
        if (!window.localStorage) {
            alert("浏览器不支持localstorage");
        } else {
            var storage = window.localStorage;
            //第一种方法读取
            var a = storage.a;
            //第二种方法读取
            var b = storage["b"];
            //第三种方法读取
            var c = storage.getItem("c");
            alert("a:" + a + "\nb:" + b + "\nc:" + c);  // 打印出结果
        }
    }

    function changeItema() {
        if (!window.localStorage) {
            alert("浏览器不支持localstorage");
        } else {
            var a = localStorage.getItem('a');
            if (a != null) {
                localStorage.setItem('a', '4');
            } else {
                alert('a返回值为 null');
            }
        }
    }

    function changeItema() {
        if (!window.localStorage) {
            alert("浏览器不支持localstorage");
        } else {
            var a = localStorage.getItem('a');
            if (a != null) {
                localStorage.setItem('a', '4');
            } else {
                alert('a返回值为 null');
            }
        }
    }

    function deleteItema() {
        if (!window.localStorage) {
            alert("浏览器不支持localstorage");
        } else {
            window.localStorage.removeItem('a')
        }
    }

    function deleteItemall() {
        if (!window.localStorage) {
            alert("浏览器不支持localstorage");
        } else {
            localStorage.clear();
        }
    }

    function storeItemJson() {
        if (!window.localStorage) {
            alert("浏览器不支持localstorage");
        } else {

            var storage = window.localStorage;
            var data = {
                name: 'zhangSan',
                sex: '1'
            };
            //将对象转换为 String ,如果不转,在存入localStorage后,读取出来转换 json对象会报错
            var setData = JSON.stringify(data);
            storage.setItem("data", setData);
        }
    }

    function readItemJson() {
        if (!window.localStorage) {
            alert("浏览器不支持localstorage");
        } else {
            var storage = window.localStorage;
            //将JSON字符串转换成为JSON对象输出
            var jsonString = storage.getItem("data");
            alert(jsonString); //打印出 String;
            var jsonObj = JSON.parse(jsonString);
            // alert(jsonObj); //打印出 Object;
        }
    }

    return (<div>
            <Button onClick={judge}>判断浏览器是否支持localStorage</Button>
            <Button onClick={storeItem}>存储</Button>
            <Button onClick={readItem}>读取</Button>
            <Button onClick={changeItema}>修改</Button>
            <Button onClick={deleteItema}>删除a</Button>
            <Button onClick={deleteItemall}>删除all</Button>
            <Button onClick={storeItemJson}>存储json</Button>
            <Button onClick={readItemJson}>读取json</Button>
        </div>
    )
};
export default App;

点击按钮查看效果,刷新页面,数据不会丢失。

localStorage 注意事项:

浏览器的大小不统一,并且在IE8以上的IE版本才支持localStorage这个属性

目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换

localStorage在浏览器的隐私模式下面是不可读取的

localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡

localStorage不能被爬虫抓取到

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/711974.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

v-model双向绑定指令

文章目录 前言v-model.lazy 延迟同步v-model.trim 去掉空格 前言 v-model指令是Vue.js中实现双向数据绑定的一种重要机制。它可以将表单控件的值与Vue.js实例中的数据进行双向绑定&#xff0c;即当表单控件的值发生变化时&#xff0c;Vue.js实例中的数据也会随之更新&#xff…

qt实现漂亮主页面

模仿自feiyangqingyun的博客_CSDN博客-Qt/C控件SDK使用示例,Qt/C音视频开发,Qt/C自定义控件领域博主 1.无边框窗口可移动 #ifndef MOVABLE_WIDGET_H #define MOVABLE_WIDGET_H#include <QWidget>class movable_widget:public QWidget { public:movable_widget(QWidget *…

华为荣耀6X(BLN-AL20)解锁全过程

这台旧手机一直闲置&#xff0c;想用它做测试机&#xff0c;所以必须先解锁。在此之前我已将手机改成了直供电&#xff0c;所以图片里没有电池&#xff0c;但是目前直供电方案并不完美&#xff0c;除了直供电线要插&#xff0c;尾插也要插上&#xff0c;淘宝卖家给出的理由是普…

部署 CNI网络组件

部署 flannel K8S 中 Pod 网络通信&#xff1a; ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器&#xff08;Pod 内的容器是不会跨宿主机的&#xff09;共享同一个网络命令空间&#xff0c; 相当于它们在同一台机器上一样&#xff0c;可以用 localhost 地址访问彼此的端…

如何看待程序员的高薪现象?

点击上方关注 “终端研发部” 设为“星标”&#xff0c;和你一起掌握更多数据库知识 最近在知乎上看到这样个话题&#xff1a; 难道不应该吗&#xff1f; 本人月薪八千&#xff0c;在北京一线&#xff0c;拿着最基础的工资&#xff0c;上的加班最频繁的班&#xff0c;干最累的活…

STM32模拟SPI协议控制数字电位器MCP41010电阻值

STM32模拟SPI协议控制数字电位器MCP41010电阻值 MCP41010是单路8位分辨率数字电位器&#xff0c;通过SPI接口可控制电位器阻值分配&#xff0c;相当于PW0端在PA0和PB0之间滑动。如下图所示&#xff1a; MCP41010是10K欧姆规格的数字电位器&#xff0c;即PA0和PB0之间的阻值恒…

Spring Boot 中的 @HystrixCommand 注解

Spring Boot 中的 HystrixCommand 注解 简介 在分布式系统中&#xff0c;服务之间的调用是不可避免的。但随着服务数量的增加&#xff0c;服务之间的依赖关系也会变得越来越复杂&#xff0c;服务的故障也会变得越来越常见。一旦某个服务出现故障&#xff0c;它所依赖的服务也…

Helm之深入浅出Kubernetes包管理工具基础

Helm 基础 作者&#xff1a;行癫&#xff08;盗版必究&#xff09; 一&#xff1a;Helm 简介 1.简介 ​ Helm 是 Kubernetes 的包管理器&#xff1b;它提供了提供、共享和使用为 Kubernetes 构建的软件的能力&#xff1b;是CNCF的毕业项目&#xff0c;自 Helm 加入 CNCF 以来…

【Canal】从原理、配置出发,从0到1完成Canal搭建

文章目录 简介工作原理MySQL主备复制原理canal 工作原理 Canal架构Canal-HA机制应用场景同步缓存 Redis /全文搜索 ES下发任务数据异构 MySQL 配置开启 binlog扩展statementrowmixed 配置权限 Canal 配置配置启动报错解决 实战引入依赖代码样例测试 前几天在网上冲浪的时候发现…

MYSQL03高级_新增用户、授予权限、授权底层表结构、角色理解

文章目录 ①. 登录服务器操作②. 用户的增删改③. 修改用户密码④. MySQL8密码管理⑤. 权限列表及原则⑥. 授予查看回收权限⑦. 底层权限表操作⑧. 角色的理解 ①. 登录服务器操作 ①. 启动MySQL服务后,可以通过mysql命令来登录MySQL服务器,命令如下: mysql –h hostname|hos…

chatgpt赋能python:搜索Python答案的软件

搜索Python答案的软件 介绍&#xff1a;什么是搜索Python答案的软件&#xff1f; 搜索Python答案的软件是一种工具&#xff0c;可以帮助编程人员快速地找到他们在编写Python代码时遇到的问题的答案。这种软件可以搜索各种不同的网站&#xff0c;以帮助用户找到最适合他们问题…

实例006 菜级联菜单

实例说明 如果管理程序功能菜单非常多&#xff0c;一些功能中又包括许多子功能&#xff0c;这时可以使用级联菜单来组织系统的各个功能。实例运行结果如图1.6所示。 图1.6 级联菜单 技术要点 制作级联菜单需要使用MenuStrip控件。 注意&#xff1a;在使用级联菜单时最好不要…

Redis三种模式——主从复制、哨兵、集群

目录 一、概述 二、 Redis 主从复制 1.主从复制的作用 2. 主从复制流程 3. 搭建Redis 主从复制 3.1准备环境 3.2安装redis 3.3创建redis工作目录 3.4环境变量 3.5定义systemd服务管理脚本 3.6修改 Redis 配置文件&#xff08;Master节点操作&#xff09; 3.7修改 …

我在「亚马逊云科技中国峰会」做讲师 - 「程序员的社区成长史」

文章目录 ⭐️ Part - 〇&#xff1a;开场的自我介绍⭐️ Part - ①&#xff1a;程序员的学习从技术社区开始&#x1f31f; 编程初学者共同面对的迷茫&#x1f31f; 加入一个适合自己的技术社区&#x1f31f; 反哺社区做有价值的贡献者 ⭐️ Part - ②&#xff1a;与技术社区的…

STM32F4 WiFi上传温度【ds18b20传感器、网络通信】

通过WIFI或GPRS上传温度到云端 本篇博客将介绍如何使用WIFI或GPRS模块将温度数据上传到云端。我们将涵盖连接网络的过程、上传数据的过程以及相关代码。 准备工作 在开始之前&#xff0c;我们需要准备以下材料&#xff1a; STM32F4开发板温度传感器&#xff08;例如18B20&a…

ch0_汇编介绍

1. 汇编作用 1.1 1.2 1.3 2.  机器语言到汇编语言 2.1 2.2 2.3 3.  计算机的组成 3.1 指令和数据是存放在存储器中的&#xff0c; 而计算机包含多种存储器&#xff1b; 但是&#xff0c;在计算机工作的过程中&#xff0c; 指令和数据则必须存放到内存中。 而对于…

代码随想录二刷day41 | 动态规划之 343. 整数拆分 96.不同的二叉搜索树

day41 343. 整数拆分确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp的初始化确定遍历顺序举例推导dp数组 96.不同的二叉搜索树确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 34…

【每日一题Day254】LC445两数相加Ⅱ | 链表反转 栈

两数相加Ⅱ【LC445】 给定两个 非空链表 l1和 l2 来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 可以假设除了数字 0 之外&#xff0c;这两个数字都不会以零开头。 原来是专题模拟 反转链表 2022/11/4 思…

MySQL 记一个调优记录:最大化获取 uid 和 mobile

目录 前言调优过程总结 前言 环境&#xff1a;MySQL 5.6、windows 11 前阵子&#xff0c;有一个 BI 看板跑不起来&#xff0c;每次执行跑了很久&#xff0c;还不一定有结果&#xff0c;急需维护迭代。 经过调试&#xff0c;发现看板的SQL 逻辑中有一个开销非常大的逻辑影响了整…