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

相关推荐
@PHARAOH10 小时前
WHAT - uni-app 条件编译技术
小程序·uni-app·条件编译
hunzi_112 小时前
选择网上购物系统要看几方面?
java·微信小程序·小程序·uni-app·php
芭拉拉小魔仙14 小时前
Uniapp Vue3 小程序接入实时音视频TUICallKit遇到的问题
小程序·uni-app·实时音视频
2305_7978820914 小时前
AI识图小程序的功能框架设计
人工智能·微信小程序·小程序
暮雨哀尘16 小时前
微信小程序开发:开发实践
开发语言·算法·微信小程序·小程序·notepad++·性能·技术选型
幽络源小助理17 小时前
微信小程序实验室管理SSM系统设计与实现
微信小程序·小程序
zoahxmy09291 天前
微信小程序 request 流式数据处理
微信小程序
人人题1 天前
汽车加气站操作工考试答题模板
笔记·职场和发展·微信小程序·汽车·创业创新·学习方法·业界资讯
曲江涛1 天前
微信小程序 webview 定位 并返回
微信小程序·小程序
weixin_440470501 天前
部署Dify接入微信验证反代根目录创建一个文件通过微信小程序验证
微信小程序·腾讯云