Electron应用性能优化:从启动到运行
James Park | 2026-08-05T10:25:00 | JavaScript, Frontend
Electron应用启动慢、内存占用高?分享preload、lazy require和V8 snapshot等优化技巧
# Electron应用性能优化:从启动到运行 用Electron做了个桌面工具,启动要6秒,内存占500MB。老板说"这不行"。优化了一周,启动2秒,内存200MB。 ## 1. 启动优化:Lazy Require ```javascript // 优化前:启动时加载所有模块 var xlsx = require('xlsx'); // 300ms var sharp = require('sharp'); // 200ms var sqlite3 = require('better-sqlite3'); // 150ms // 优化后:用到时才加载 function getXlsx() { if (!_xlsx) { _xlsx = require('xlsx'); } return _xlsx; } var _xlsx = null; // 导出Excel时才加载xlsx模块 function exportExcel(data) { var xlsx = getXlsx(); // ... } ``` ## 2. Preload脚本优化 ```javascript // preload.js - 只暴露必要的API var ipcRenderer = require('electron').ipcRenderer; // 不要暴露整个electron模块! contextBridge.exposeInMainWorld('api', { // 只暴露具体方法 readFile: function(path) { return ipcRenderer.invoke('read-file', path); }, saveFile: function(path, data) { return ipcRenderer.invoke('save-file', path, data); } }); ``` ## 3. 窗口创建优化 ```javascript // 先创建窗口再加载内容,用户感知更快 var win = new BrowserWindow({ show: false, // 先不显示 backgroundColor: '#fff' // 设置背景色避免白屏 }); win.once('ready-to-show', function() { win.show(); // 内容准备好了再显示 }); ``` ## 4. 内存优化 关闭不用的窗口时设置`win = null`让GC回收,渲染进程用`requestIdleCallback`做非关键任务。 最终效果:启动时间6s->2s,内存500MB->200MB。