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

相关推荐
2501_9159214316 小时前
从需求到上架,现代 iOS 开发流程的工程化方法论
android·ios·小程序·https·uni-app·iphone·webview
用户66006766853917 小时前
微信小程序实战:手把手搭建路虎汽车展示小程序
微信小程序
说私域18 小时前
开源AI智能名片链动2+1模式商城小程序在淘宝首页流量生态中的应用与影响研究
人工智能·小程序·开源
jqpwxt19 小时前
启点创新智慧景区小程序系统,景区智能化售票系统,景区购票管理系统
小程序
高林雨露19 小时前
App拉起小程序无法正常返回app 排查坑道
java·小程序
2501_916007471 天前
苹果手机iOS应用管理全指南与隐藏功能详解
android·ios·智能手机·小程序·uni-app·iphone·webview
Gracemark2 天前
H5回调页开发与调试复盘
微信小程序
yogalin19932 天前
微信小程序代码复用技巧
性能优化·微信小程序
求学中--2 天前
进阶实战:构建一个完整的微信小程序博客系统(含云开发与状态管理)
微信小程序·小程序
2501_915106322 天前
全面理解 iOS 帧率,构建从渲染到系统行为的多工具协同流畅度分析体系
android·ios·小程序·https·uni-app·iphone·webview