微信小程序中的 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.pswp.cn/web/65325.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65325.shtml
英文地址,請注明出處:http://en.pswp.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,而實際我們卻應該使用自己…