微信小程序中的 storage(本地存储)和内存是两个完全不同的存储区域

这是一个非常关键且容易混淆的概念

既然 this.globalData.appId = appId 是将 appId 存储在内存中,为什么微信小程序中的 wx.getStoragewx.setStorage(本地存储)中没有 appId,并且您提出了一个非常重要的疑问:storage 不就是内存吗?

关键区别:

您提出的疑问揭示了一个核心概念:微信小程序中的 storage(本地存储)和内存是两个完全不同的存储区域,它们之间有本质的区别。

  1. 内存(Memory):

    • 临时存储: 内存是 临时性 的存储区域,用于存储程序运行时的数据。
    • 快速访问: 内存的读写速度非常快,因此访问内存中的数据效率很高。
    • 生命周期: 内存中的数据随着程序(这里指小程序)的启动而创建,随着程序的关闭而释放。
    • 全局数据: 使用 this.globalData = {} 方式定义的数据, 例如 this.globalData.appId 等, 都是存储在内存中的。
    • 例子:
      • JavaScript 变量 (如 const appId = ... )
      • 小程序实例的全局数据 (this.globalData)
      • 函数调用栈
  2. 本地存储(wx.setStorage / wx.getStorage):

    • 持久化存储: 本地存储是 持久化 的存储区域,用于存储需要在小程序关闭后仍然保留的数据。
    • 读写速度较慢: 本地存储的读写速度比内存慢,因为需要进行文件 I/O 操作。
    • 容量限制: 本地存储通常有一定的容量限制,微信小程序也有限制, 请注意控制存储数据的大小。
    • 生命周期: 本地存储中的数据会一直存在,直到被显式删除或小程序被卸载。
      • 删除: 可以通过 wx.removeStorage 来删除本地存储。
      • 清空: 可以通过 wx.clearStorage 来清空本地存储。
    • 例子:
      • 用户登录状态
      • 用户设置信息
      • 缓存的 API 响应数据

storage 和内存的本质区别:

特性内存 (Memory)本地存储 (Storage)
类型临时存储持久化存储
读写速度非常快较慢
容量有限,受设备限制有限,受小程序限制
数据生命周期随程序运行而存在,随程序关闭而释放除非被删除或者小程序卸载,一直存在

为什么本地存储中没有 appId

  • 您没有显式地使用 wx.setStorage API 存储 appId:
    • 您只是将 appId 存储在了内存中,通过 this.globalData.appId = appId 赋值,并没有将 appId 使用 wx.setStorage API 存储到本地存储中。
  • 本地存储中只保存了您明确调用 wx.setStorage 存储的数据:
    • 微信小程序只会在您调用 wx.setStoragewx.setStorageSync API 时,才会将数据存储到本地存储。

总结:

  • 内存和本地存储是完全不同的概念: 内存是临时的,本地存储是持久的。
  • 您只是将 appId 存储在了内存中: 使用 this.globalData.appId = appId, 并没有存储到本地存储中。
  • 本地存储需要显式调用 wx.setStorage 您需要使用 wx.setStoragewx.setStorageSync API,才能将数据存储到本地存储。

如何将 appId 存储到本地存储?

如果您希望将 appId 存储到本地存储,您需要在设置 this.globalData.appId 的同时,显式地调用 wx.setStoragewx.setStorageSync

// app.js
App({globalData: {appId: null},onLaunch: function() {// 获取当前小程序 appidconst appId = wx.getAccountInfoSync().miniProgram.appId;this.globalData.appId = appId;wx.setStorageSync('appId', appId)console.log('appId:', appId);},
});

在其他页面获取本地存储的 appId:

  const appId = wx.getStorageSync('appId');

storage 和内存的区别,以及为什么本地存储中没有 appId.

在这里插入图片描述

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

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

相关文章

【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 1. 二叉排序树的基本概念 2. 二叉排序树节点结构体定义 3. 创建二叉排序树 4. 判断是否为二叉排序树 5. 递归查找关键字为 6 的结点并输出查找路径 6. 删除二叉排序树中的节点 测试说明 通关代码 测试结果 任务描述 本关任务&a…

计算机网络(第8版)第3章课后习题--透明传输

【3-11】 试分别讨论以下各种情况在什么条件下是透明传输,在什么条件下不是透明传 输。(提示:请弄清什么是“透明传输”,然后考虑能否满足其条件。) (1)普通的电话通信。 (2)互联网提供的电子邮件服务。 解 答 : 透明传输是指在数据传输…

Linux(17)——使用 DNF 安装和更新软件包

目录 一、使用 DNF 管理软件包: 1、 DNF 查找软件: 2、DNF 安装软件: 3、DNF 删除软件: 二、使用 DNF 管理软件包组: 1、DNF 显示组信息: 2、DNF 安装组: 三、使用 DNF 查看事务历史记录…

基于32单片机的智能语音家居

一、主要功能介绍 以STM32F103C8T6单片机为控制核心,设计一款智能远程家电控制系统,该系统能实现如下功能: 1、可通过语音命令控制照明灯、空调、加热器、窗户及窗帘的开关; 2、可通过手机显示和控制照明灯、空调、窗户及窗帘的开…

Qt 5.14.2 学习记录 —— 일 新项目

文章目录 1、创建2、查看代码 ---- main.cpp3、查看代码 ---- widgt.h4、查看代码 ---- widgt.cpp和widget.ui5、查看代码 ---- Empty.pro6、运行产生的中间文件 1、创建 左上角的文件,新建文件或项目。如果要写一个GUI程序,应当选择Application&#x…

linux wsl配置 redis远程连接

✅ 1. 修改 Redis 配置文件 在 WSL 的 Redis 配置文件中,找到 redis.conf 或 /etc/redis/redis.conf 文件,编辑以下配置项: ➡️ 更新 bind 配置项 将 bind 127.0.0.1 ::1 修改为: bind 0.0.0.0这样,Redis 将监听所…

Transformer从零详细解读——DASOU讲AI

1. 从全局角度概括Transformer transformer的任务是什么? 进一步细化 进一步细化,注意:每个encoder结构相同,参数不同;decoder同理 原论文中的图如下: 2.Encoder 2.1 输入部分 (1&#xff09…

ARM发布Armv9.5架构:迈向更强性能与灵活性的新时代

2024年11月30日,ARM正式发布了其最新的Armv9.5架构,这是Arm技术发展的又一重要里程碑。从表中信息来看,Armv9.5架构的发布标志着该公司的架构系列在性能、灵活性和可扩展性方面取得了进一步突破。本次发布不仅是技术上的提升,更是…

【Python运维】使用Python与Docker进行高效的容器化应用管理

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着容器化技术的广泛应用,Docker已成为现代软件开发与运维中不可或缺的工具。Docker容器提供了一种轻量级、可移植的方式来部署和管理应用…

分布式系统架构6:链路追踪

这是小卷对分布式系统架构学习的第6篇文章,关于链路追踪,之前写过traceId的相关内容:https://juejin.cn/post/7135611432808218661,不过之前写的太浅了,且不成系统,只是简单的理解,今天来捋一下…

Ubuntu 20.04安装gcc

一、安装GCC 1.更新包列表 user596785154:~$ sudo apt update2.安装gcc user596785154:~$ sudo apt install gcc3.验证安装 user596785154:~$ gcc --version二 编译C文件 1.新建workspace文件夹 user596785154:~$ mkdir workspace2.进入workspace文件夹 user596785154:~…

问题:Flask应用中的用户会话(Session)管理失效

我来分享一个常见的PythonWeb开发问题: 问题:Flask应用中的用户会话(Session)管理失效 这是一个在Flask开发中经常遇到的问题。当用户登录后,有时会话会意外失效,导致用户需要重复登录。 解决方案: 1. 首先&#x…

ansible-性能优化

一. 简述: 搞过运维自动化工具的人,肯定会发现很多运维伙伴们经常用saltstack和ansible做比较,单从执行效率上来说,ansible确实比不上saltstack(ansible使用的是ssh,salt使用的是zeromq消息队列[暂没深入了解]),但其实…

.net core 线程锁,互斥锁,自旋锁,混合锁

线程锁、互斥锁、自旋锁和混合锁是多线程编程中的重要概念,它们用于控制对共享资源的访问,避免数据竞争和不一致性。每种锁有其特定的适用场景和特点。我们来逐一解释它们,并进行比较。 1. 线程锁(Thread Lock) 线程…

【ArcGISPro/GeoScenePro】检查并处理高程数据

数据 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 数字高程模型 (DEM) 是一种栅格,可显示地面或地形的高程。 数字表面模型 (DSM) 是另一种高程栅格,可显示表面的高度,例如建筑物或树冠的顶部。 您需要准备 DEM 和 DSM 以供分析…

【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 一、不同访问属性成员的访问方式 1. public成员 2. private成员 3. protected成员 二、观察构造函数和析构函数的执行过程 1. 构造函数 2. 析构函数 三、学习类的组合使用方法 1. 类的组合概念 2. 实现示例 实验步骤 测试说明 …

xilinx的高速接口构成原理和连接结构及ibert工具的使用-以k7 GTX为例

一、相关简介 Xilinx的高速接口称之为transceivers(高速收发器),这部分的电路是专用电路,供电等都是独立的,根据速率可以分为GTP/GTX/GTH/GTY/GTM等。 Xilinx的高速接口是QUAD为单位的,没一个QUAD由一个时钟COMMON资…

创建型模式4.原型模式

创建型模式 工厂方法模式(Factory Method Pattern)抽象工厂模式(Abstract Factory Pattern)建造者模式(Builder Pattern)原型模式(Prototype Pattern)单例模式(Singleto…

python学opencv|读取图像(二十七)使用time()绘制弹球动画

【1】引言 前序已经学习了pythonopencv画线段、圆形、矩形、多边形和文字的相关操作,具体文章链接包括且不限于: python学opencv|读取图像(十八)使用cv2.line创造线段_cv2. 画线段-CSDN博客 python学opencv|读取图像&#xff0…

rabbitmq——岁月云实战笔记

1 rabbitmq设计 生产者并不是直接将消息投递到queue,而是发送给exchange,由exchange根据type的规则来选定投递的queue,这样消息设计在生产者和消费者就实现解耦。 rabbitmq会给没有type预定义一些exchage,而实际我们却应该使用自己…