Skip to content

Instantly share code, notes, and snippets.

@luojiyin1987
Created May 2, 2025 02:41
Show Gist options
  • Save luojiyin1987/66f0ca905aa4666b547beefe698f08dd to your computer and use it in GitHub Desktop.
Save luojiyin1987/66f0ca905aa4666b547beefe698f08dd to your computer and use it in GitHub Desktop.

先做简单的, 性能提升明显的事 ?

以下是几个简单实施但效果明显的性能优化措施,按照优先级排序:

  1. 窗口加载优化
function createBrowserWindow() {
  win = new BrowserWindow({
    // 其他配置...
    show: false, // 先不显示窗口
    backgroundColor: '#ffffff' // 设置背景色减少白屏
  });

  // 等页面加载完成后再显示窗口,避免白屏
  win.once('ready-to-show', () => {
    win.show();
  });
  
  // 其他加载代码...
}
  1. 禁用开发者工具(生产环境)
if (process.env.NODE_ENV === 'production') {
  win.webContents.on('devtools-opened', () => {
    win.webContents.closeDevTools();
  });
}
  1. 减少IPC通信
// 将频繁使用的数据批量传输,而不是频繁小量传输
ipcMain.handle('get-app-config', () => {
  // 一次性返回所有配置,而不是多次请求
  return {
    redisPort: process.env.REDIS_PORT,
    qdrantPort: process.env.QDRANT_PORT,
    appVersion: app.getVersion(),
    // 其他配置...
  };
});
  1. 使用硬件加速(如果可用)
// 在app.on('ready')中添加
if (!app.isAccessibilitySupportEnabled()) {
  app.commandLine.appendSwitch('enable-gpu-rasterization');
}
  1. 限制内存使用
app.commandLine.appendSwitch('js-flags', '--max-old-space-size=512');

// 添加简单的内存监控
setInterval(() => {
  const memoryInfo = process.memoryUsage();
  if (memoryInfo.heapUsed > 400 * 1024 * 1024) { // 超过400MB
    console.warn('Memory usage high, consider cleanup');
    // 可以触发一些轻量级清理
  }
}, 60000); // 每分钟检查
  1. 优化资源释放
// 确保窗口关闭时释放资源
win.on('closed', () => {
  win = null;
});

// 确保应用退出时所有服务都正确关闭
const shutdownPromise = async () => {
  console.log('Shutting down services...');
  await Promise.allSettled([
    shutdownApiServer(),
    shutdownQdrantServer(),
    shutdownRedisServer()
  ]);
};

app.on('before-quit', async (event) => {
  event.preventDefault(); // 阻止立即退出
  await shutdownPromise();
  app.exit(0); // 确保干净退出
});
  1. 简化CSP策略
win.webContents.session.webRequest.onHeadersReceived((details, callback) => {
  callback({
    responseHeaders: {
      ...details.responseHeaders,
      'Content-Security-Policy': [
        "default-src 'self'; connect-src 'self' http://localhost:* https://localhost:*;"
      ],
    },
  });
});
  1. 启用进程沙箱(增加安全性和稳定性)
app.enableSandbox(); // 为渲染进程启用沙箱

这些优化都是低悬果实,实施简单但能带来明显的性能提升或稳定性改进。实施后应该能看到应用启动更快、更稳定,资源占用更少。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment