微信小程序中的 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

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

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

javascript 复制代码
  const appId = wx.getStorageSync('appId');

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

相关推荐
前端充电宝2 小时前
uniapp - 基于uniapp+vue3实现自定义增强版table表格组件体验「兼容H5+小程序+App端」
前端·vue.js·小程序·uni-app
我开心就好o2 小时前
uniapp3 手写签名组件(vue3 语法)封装与应用
javascript·vue.js·微信小程序·uniapp·手写签名
然后就去远行吧2 小时前
小程序组件 —— 30 组件 - 背景图片的使用
小程序
V+zmm101342 小时前
婚庆摄影小程序ssm+论文源码调试讲解
java·微信小程序·小程序·毕业设计
程序员徐师兄2 小时前
Java基于微信小程序的私家车位共享系统
java·微信小程序·私家车车位共享·私家车车位共享系统
@_猿来如此2 小时前
基于vue的商城小程序的毕业设计与实现(源码及报告)
vue.js·小程序·课程设计·html5·hbuilder
.生产的驴14 小时前
Elasticsearch 文档批处理 混合处理 批量操作
大数据·后端·elasticsearch·搜索引擎·微信小程序·全文检索·jenkins
jiejianyun85714 小时前
露营小程序搭建有哪些步骤?小程序里面可以找个露营搭子
小程序·notepad++
liuxi_happy14 小时前
【微信小程序获取用户手机号
微信小程序·小程序
竣子好逑17 小时前
uniapp 自定义类微信支付键盘 (微信小程序)
微信小程序·小程序·uni-app