uniapp本地存储详解

news2024/11/17 17:28:36

uniapp本地存储详解

前言

在开发uniapp应用时,我们常常需要使用本地存储来保存一些数据,比如用户登录信息、设置项等,使得应用能够在设备上保存和读取数据,以便提供更好的用户体验和离线功能支持,本文将简单介绍uniapp中的本地存储相关API使用方式。

存储原理分析

为了更好地理解uniapp本地存储,先简单介绍一下计算机的存储原理。计算机的存储系统通常由主存储器(RAM)和辅助存储器(硬盘、固态硬盘等)组成。

主存储器

主存储器是计算机中用于临时存储数据和指令的地方。它以字节为单位进行存储,每个字节都有一个唯一的地址。主存储器具有快速的读写速度,但容量有限。数据在主存储器中存储时,会被划分为连续的存储单元,可以通过地址访问。

辅助存储器

辅助存储器通常具有更大的容量,但访问速度相对较慢。常见的辅助存储器包括硬盘和固态硬盘。数据在辅助存储器中以块的形式存储。块是存储器中最小的可读写单位,通常具有固定的大小(如4KB)。当需要读取或写入数据时,计算机会按照块的粒度进行操作。

存储格式和字节对齐

数据在存储器中以二进制形式表示。不同的数据类型(如整数、浮点数、字符等)在存储器中占用的字节数不同。为了高效存储和访问数据,计算机要求数据按照字节对齐的方式存储。字节对齐指的是数据存储的起始地址必须是其数据类型大小的整数倍。

uniapp 本地存储

1. uni.setStorage(OBJECT)与uni.getStorage(OBJECT)

uni.setStorage(OBJECT)

将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个异步接口。
在这里插入图片描述

示例代码

uni.setStorage({
	key: 'storage_key',
	data: 'hello',
	success: function () {
		console.log('success');
	}
});
uni.getStorage(OBJECT)

从本地缓存中异步获取指定 key 对应的内容。
在这里插入图片描述

示例代码

uni.getStorage({
	key: 'storage_key',
	success: function (res) {
		console.log(res.data);
	}
});

2. uni.setStorageSync与uni.getStorageSync

uni.setStorageSync(KEY,DATA)

将 data 存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。
在这里插入图片描述

try {
	uni.setStorageSync('storage_key', 'hello');
} catch (e) {
	// error
}
uni.getStorageSync(KEY)

从本地缓存中同步获取指定 key 对应的内容。
在这里插入图片描述

示例代码

try {
	const value = uni.getStorageSync('storage_key');
	if (value) {
		console.log(value);
	}
} catch (e) {
	// error
}

3. 获取存储信息uni.getStorageInfo与uni.getStorageInfoSync

uni.getStorageInfoSync()

同步获取当前 storage 的相关信息。
在这里插入图片描述

示例

try {
	const res = uni.getStorageInfoSync();
	console.log(res.keys);
	console.log(res.currentSize);
	console.log(res.limitSize);
} catch (e) {
	// error
} 
uni.getStorageInfo(OBJECT)

异步获取当前 storage 的相关信息
在这里插入图片描述

示例代码

uni.getStorageInfo({
	success: function (res) {
		console.log(res.keys);
		console.log(res.currentSize);
		console.log(res.limitSize);
	}
});

4. 移除 uni.removeStorage与uni.removeStorageSync

uni.removeStorage(OBJECT)

从本地缓存中异步移除指定 key。
在这里插入图片描述

代码示例

uni.removeStorage({
	key: 'storage_key',
	success: function (res) {
		console.log('success');
	}
}); 
uni.removeStorageSync(KEY)

从本地缓存中同步移除指定 key。
在这里插入图片描述

示例代码

try {
	uni.removeStorageSync('storage_key');
} catch (e) {
	// error
} 
uni.clearStorage()

清理本地数据缓存。

示例

uni.clearStorage();
uni.clearStorageSync()

同步清理本地数据缓存。

示例

try {
	uni.clearStorageSync();
} catch (e) {
	// error
}

注意事项

  • uni.setStorageSync和uni.getStorageSync都是同步方法,调用后会阻塞线程,所以在使用时需要注意不要在UI线程中频繁调用这些方法,以免影响应用性能。
  • uni.setStorageSync保存的数据大小不能超过10MB。
  • uni.setStorageSync保存的数据只能在当前小程序中访问,不能跨小程序或跨设备访问。
  • 如果要保存的数据较大或者需要长期保存,建议使用uni.setStorage和uni.getStorage方法,这两个方法是异步方法,不会阻塞线程。在实现上,它们可能会使用文件系统缓存等技术来提高读写效率。
  • H5端为localStorage,浏览器限制5M大小,是缓存概念,可能会被清理
  • App端为原生的plus.storage,无大小限制,不是缓存,是持久化的
  • 各个小程序端为其自带的storage api,数据存储生命周期跟小程序本身一致,即除用户主动删除或 超过一定时间被自动清理,否则数据都一直可用。
  • 微信小程序单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。
  • 支付宝小程序单条数据转换成字符串后,字符串长度最大200*1024。同一个支付宝用户,同一个小程序缓存总上限为10MB。
  • 百度小程序策略详见、字节跳动小程序策略详见
  • 非App平台清空Storage会导致uni.getSystemInfo获取到的deviceId改变
  • 除此之外,其他数据存储方案:
    H5端还支持websql、indexedDB、sessionStorage
    App端还支持SQLite、IO文件等本地存储方案。

总结

当我们调用对应方法时,uniapp会将数据以键值对的形式存储在本地存储中。具体实现中,uniapp会将键值对转换成字节流,并将字节流写入到设备的存储器中。这个过程涉及到计算机底层存储原理的数据存储和字节对齐。在读取数据时,会根据指定的键,从本地存储中读取相应的数据。根据键的索引或哈希值,定位到存储器中相应的数据块,并读取字节流。然后,将字节流转换为相应的数据类型,供应用程序使用。调用uni.removeStorageSync方法,将指定键的数据从本地存储中移除。计算机会找到相应的数据块,并将其标记为可覆盖的状态,从而释放存储空间。

结语

以上就是uniapp提供的各种本地存储方式及其底层实现机制的简单罗列和使用示例,uniapp的本地存储的逻辑涉及到计算机数据的写入、读取、文件系统管理、磁盘块分配等底层技术。在实际开发中,我们应该根据需求选择合适的方法进行本地存储操作,并尽量减少对本地存储的频繁访问,以提高应用性能。

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

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

相关文章

python编程——编译器与解释器

作者:Insist-- 个人主页:insist--个人主页 本文专栏:python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注。 目录 前言 一、编译器与解释器的介绍 二、编译器与解释器…

JDK1.8下载安装(优雅)

bug虐我千百遍,我待bug如初恋。 这里使用的环境是win11 64位系统,应该适配win8-win11 一、下载 这里提供两种下载方式,官网下载和第三方下载,区别就是下载速度不同 1. 官网下载 (1)官网下载:…

智慧物流货运系统源码 货运平台的功能介绍

网络货运平台源码 网络货运平台的功能 网络货运是指利用互联网平台,通过物流配送的方式进行商品销售和物流运输的一种新型商业模式。这种模式将传统的货运模式与互联网技术相结合,通过网络平台进行交易、物流配送和结算等一系列商业流程,从而…

用户画像如何创新破局数据驱动增长 | 数据增长

用户画像即用户信息标签化,就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后,完美地抽象出一个用户的商业全貌,是企业应用大数据技术的基本方式。例如:通过收集用户的人口属性、行为属性、消费习惯…

面向初学者的数据科学|要学习的内容概述

面向初学者的数据科学|要学习的内容概述 数据科学家是21世纪最性感的工作。每个人都想变得性感。该领域开始变得竞争激烈,提高了就业标准。 因此,仅仅知道如何使用不同的工具是不够的,求职者需要能够抓住基本的概念和技术,然后应用…

VMware Cloud Foundation 5.0 发布 - 领先的多云平台

VMware Cloud Foundation 5.0 发布 - 领先的多云平台 高效管理虚拟机 (VM) 和容器工作负载。为本地部署的全栈超融合基础架构 (HCI) 提供云的优势。 请访问原文链接:https://sysin.org/blog/vmware-cloud-foundation-5/,查看最新版。原创作品&#xff…

DEMO:F4帮助 收藏夹功能

货铺QQ群号:834508274微信群不能扫码进了,可以加我微信SAPliumeng拉进群,申请时请提供您哪个模块顾问,否则是一律不通过的。进群统一修改群名片,例如BJ_ABAP_森林木。群内禁止发广告及其他一切无关链接,小程…

没有硬件资源?免费使用Colab搭建你自己的Stable Diffiusion在线模型!保姆级教程...

部署 Stable Diffusion 需要一定的硬件资源,具体取决于要处理的图像大小和处理速度等因素。一般来说,至少需要一台具有较高计算能力的服务器,而对 GPU 的高要求就限制了我们学习和使用SD来生成我们想要的图像。 GPU是深度学习开发的重要硬件条…

C++ 学习 ::【基础篇:16】:C++ 类的基本成员函数:拷贝构造函数(认识、特征、注意点及典型使用场景)及其基本写法与调用

本系列 C 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下: 基础篇:类与对象(涉及C的三大特性等&#…

FastJSON autoType is not support问题解决

概述 产品在使用内部的后台管理系统时反馈的问题。 于是登录平台,发现如下报错详情: 排查 经过分析,不难得知,请求是从gateway网关转发到对应的统计服务 statistics,此服务有个接口/api/statistics/data/overview…

华为OD机试真题 Java 实现【支持优先级的队列】【2023 B卷 100分】

一、题目描述 实现一个支持优先级的队列,高优先级先出队列,同优先级时先进先出。 如果两个输入数据和优先级都相同,则后一个数据不入队列被丢弃。 队列存储的数据内容是一个整数。 二、输入描述 一组待存入队列的数据(包含内…

Java官方笔记4类和对象

创建类 定义类Bicycle: public class Bicycle {// the Bicycle class has// three fieldspublic int cadence;public int gear;public int speed;// the Bicycle class has// one constructorpublic Bicycle(int startCadence, int startSpeed, int startGear) {gea…

李沐动手学习深度学习 2023年Win10 下安装 CUDA 和 Pytorch 跑深度学习(最新)

目录 一、安装Anaconda 1.下载Anaconda 测试是否安装成功 二、安装pytorch 验证pytorch是否安装成功 4.测试 3.配置pycharm 一、安装Anaconda 1.下载Anaconda 可以在官网下载,但是速度较慢,这里我选择了清华镜像源的下载 https://mirrors.tuna.t…

Gradio的web界面演示与交互机器学习模型,Blocks的事件侦听《7》

在第一篇文章我们就熟悉了Blocks的用法,使用Blocks比Interface更加灵活,这节重点关注Blocks里面的相关操作。 1、Blocks标准例子 import gradio as grdef greet(name):return "你好 " name "!"with gr.Blocks() as demo:name g…

简单的汉诺塔,神奇的预言,竟然需要5849亿年???(52)

小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 今日主题 汉诺塔 古印度大梵天传说 Python玩转汉诺塔 递归 汉诺塔 汉诺塔(Hanoi)是一个著名的益智游戏,也称…

规则引擎架构-基于aviator

目录 aviator使用场景ASM 字节码操控框架aviator 表达式例子debug表达式类生成过程b-ca生成的class文件 aviator使用场景 github地址:aviator 使用场景: 规则判断及规则引擎公式计算动态脚本控制集合数据 ELT 等 …… ASM 字节码操控框架 asm实现&a…

【Dubbo】Dubbo架构的演进过程分析

📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于…

Go并发编程 Goroutine、Channel、Select、Mutex锁、sync、Atomic等

本文所有实例代码运行go版本:go version go1.18.10 windows/amd64 1 并发编程介绍 1.1 串行、并发、并行 串行:所有任务一件一件做,按照事先的顺序依次执行,没有被执行到的任务只能等待。最终执行完的时间等于各个子任务之和。…

效率神器!神级ChatGPT浏览器插件分享

大家好,我是卷了又没卷,薛定谔的卷的AI算法工程师「陈城南」~ 担任某大厂的算法工程师,带来最新的前沿AI知识和工具,欢迎大家交流~,后续我还会分享更多 AI 有趣工具和实用玩法,包括AI相关技术、ChatGPT、AI…

初识SpringBoot -- SpringBoot入门保姆级教程(一)

文章目录 前言一、初识SpringBoot1.SpringBoot简介2.用编译器IDEA创建SpringBoot项目3.在官网创建SpringBoot项目4.SpringBoot项目快速启动(前后端分离基本能力)5.了解SpringBoot起步依赖和启动类 总结 前言 为了巩固所学的知识,作者尝试着开…