Electron?store及shareObject進程間數(shù)據(jù)交互存儲功能封裝
一、前言
本篇主要介紹electron應(yīng)用存儲功能的封裝,以及electron-store與shareObject的不同使用場景,并包含其原理介紹。
二、存儲方案
1.shareObject
這里先給大家介紹shareObject
,這里所說的shareObject
實際上是global.shareObject
, 它可以用于主進程和渲染進程通信,同時也可以用于渲染進程之間相互傳遞數(shù)據(jù)。
這里還要給大家說明一下,實現(xiàn)進程間的數(shù)據(jù)相互傳遞的,主要是通過global
這一個全局變量來做成的,shareObject
只是一個名詞,用來承載進程間的交互所有變量存儲地址。在你定義的時候也可以不叫shareObject
,取任意名字都是可以的,只不過shareObject
是大家都比較認(rèn)同的一個名字。
這里我們需要再主進程先定義好global.shareObject
,具體代碼如下
// background.js app.on('ready', async () => { // 多窗口數(shù)據(jù)存儲 global.sharedObject = { windowsIdList: [] } })
在渲染進程中使用如下
//main.js // 將sharedObject定義到全局變量window.$_SO中 window.$remote = window.require('electron').remote window.$_SO = window.$remote.getGlobal('sharedObject') console.log('sharedObject', window.$_SO)
之后就是在頁面中存取
// App.vue // 取值 console.log(window.$_SO.windowsIdList) // 賦值 window.$_SO.windowsIdList = [1, 2, 3] console.log(window.$_SO.windowsIdList) // [1, 2, 3]
這里需要注意的點就是在渲染進程中用到的key
都要先在主進程中定義好。否則,在渲染進程中直接使用的話,就會看到undefined
之類的字樣
當(dāng)我們的業(yè)務(wù)變得越來越復(fù)雜,窗口越來越多的時候,我們存儲的字段的會變得越來越多,若都直接放到一起聲明,會變得很復(fù)雜,顯得不夠精簡,因此這里我借鑒了store
的modules
模塊,將不同類型的存儲變量放到不同文件再進行集成,統(tǒng)一注冊變量。組成如下圖所示的文件目錄
我們在根目錄下創(chuàng)建一個electron-config文件夾,用于存放electron相關(guān)的文件。之后在下面創(chuàng)建一個文件夾ShareMoudles,文件夾內(nèi)專門存檔不同類別的存儲變量,如圖所示
最終在ElectronSharedObject.js文件中,將所有ShareMoudles文件夾下變量統(tǒng)籌到一起,代碼如下
// 獲取./ShareMoudles文件夾下所有js文件(不需要再用import引入了) const modulesFiles = require.context('./ShareMoudles', true, /\.js$/) // 構(gòu)建 modules,直接使用 const modules = modulesFiles.keys().reduce((modules, modulePath) => { const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/g, '$1') const value = modulesFiles(modulePath) modules[moduleName] = value.default return modules }, {}) export const sharedObject = { ...modules }
之后我們在background.js中將這些變量初始化到shareObject
中,如下圖所示
// background.js import { sharedObject } from './electron-config/ElectronSharedObject' app.on('ready', async () => { // 多窗口數(shù)據(jù)存儲 global.sharedObject = { ...sharedObject } })
我們在渲染進程就可以在控制臺打印后看到我們初始化的變量,如下圖
2.electron-store
electron-store
是以文件形式緩存數(shù)據(jù),保存應(yīng)用程序或模塊的簡單數(shù)據(jù)持久性-保存和加載用戶首選項、應(yīng)用程序狀態(tài)、緩存等。利用它我們可以實現(xiàn)一些類似7天內(nèi)自動登錄
這樣的功能。
安裝依賴
npm install electron-store //or yarn add electron-store
創(chuàng)建實例文件
// ElectronStore.js import Store from 'electron-store' const electronStore = new Store() // console.log('size', electronStore.size) // 獲取項目總個數(shù) // console.log('path', electronStore.path) // 獲取存儲文件的路徑 // console.log('store', electronStore.store) // 獲取所有數(shù)據(jù)作為對象或?qū)?dāng)前數(shù)據(jù)替換為對象 // console.log('set', electronStore.set()) // 存儲數(shù)據(jù) // console.log('get', electronStore.get()) // 獲取數(shù)據(jù) // console.log('delete', electronStore.delete()) // 刪除某項數(shù)據(jù) // console.log('clear', electronStore.clear()) // 清除所有store數(shù)據(jù) // console.log('has', electronStore.has()) // 檢測是否存在某條數(shù)據(jù) export default electronStore
之后在主進程引入
import ElectronStore from './electron-config/ElectronStore.js' // 我們可以將ElectronStore實例放入到shareObject中,這樣在渲染進程也可以使用 app.on('ready', async () => { // 多窗口數(shù)據(jù)存儲 global.sharedObject = { ElectronStore, ...sharedObject } })
由于渲染進程中我們將sharedObject掛載在了window.$_SO
中,所如下所示使用
以上就是electron-store
存儲方式的使用。
三、后記
以上就是我們在electron應(yīng)用中常用的進程間數(shù)據(jù)交互的方式。其中shareObject
是在應(yīng)用關(guān)閉后,數(shù)據(jù)就消失了,electron-store
則不會消失,會一直存在。這里關(guān)于electron-store
還需要注意一下情況
- 存儲簡單信息,不要存儲復(fù)雜大量信息,容易造成讀取速度變慢。
- 每一次get都是一次i/o操作,所以盡量少操作。
以上就是Electron store及shareObject進程間數(shù)據(jù)交互存儲功能封裝的詳細內(nèi)容,更多關(guān)于Electron store shareObject數(shù)據(jù)交互的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue require.context全局注冊組件的具體實現(xiàn)
本文主要介紹了vue require.context全局注冊組件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05vue路由history模式頁面刷新404解決方法Koa?Express
這篇文章主要為大家介紹了vue路由history模式頁面刷新404解決方法(Koa?Express)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11一文解決vue2 element el-table自適應(yīng)高度問題
在寫公司后臺項目的時候遇到一個需求,要求表格頁面不能有滾動條,所以必須封裝一個公共方法來實現(xiàn)表格自適應(yīng)高度,本問小編給大家介紹了如何解決vue2 element el-table自適應(yīng)高度問題,需要的朋友可以參考下2023-11-11elementui導(dǎo)出數(shù)據(jù)為xlsx、excel表格
本文主要介紹了elementui導(dǎo)出數(shù)據(jù)為xlsx、excel表格,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09vue 實現(xiàn) tomato timer(蕃茄鐘)實例講解
下面小編就為大家?guī)硪黄獀ue 實現(xiàn) tomato timer(蕃茄鐘)實例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07