打开网易新闻 查看精彩图片

一个期货交易软件的启动速度,从5秒压到2秒以内,代价是重写整个进程架构。上周发布的Aurafy用了一个反直觉的选择:把服务器代码塞进Electron主进程,而非传统方案里的子进程。

开发者@kristianfrost在技术博客里坦承,第一版"搞砸了"。子进程方案不仅拖慢启动,还触发macOS代码签名警报——系统把父子进程识别成两个独立应用。改用require()直接加载Express后,问题消失,启动时间从"泡杯咖啡"变成"眨个眼"。

本地优先不是情怀,是风险计算

交易数据有多敏感?盈亏数字、账户规模、甚至你犯过的错。主流交易日志软件默认上传云端,Aurafy偏要反着来:SQLite数据库躺在~/Library/Application Support/aurafy/data/journal.db,用户能备份、能迁移、能一键删除。

代价显而易见——没有跨设备同步。但开发者赌对了一点:期货交易员不会在地铁上写交易日志,他们只坐在多屏工作站前。

技术栈选得克制。服务端Express.js配better-sqlite3,客户端React+Vite+Tailwind,图表用Recharts。数据层全靠TanStack Query做缓存,没上GraphQL,没搞状态管理库。

CSV导入的命名战争

最头疼的不是代码,是行业乱象。Tradovate管Micro Nasdaq期货叫"MNQM6",NinjaTrader写成"MNQ 06-26"——同一合约,两种方言。Aurafy的解析器要自动识别日期格式、标准化合约代码、检测重复导入。整个流程被压缩成三步:拖入文件→预览确认→完成。

屏幕录制功能是意外亮点。Electron的desktopCapturer抓画面,getUserMedia收麦克风,Web Audio API混音,最后塞进MediaRecorder。摄像头浮窗是个透明无边框的BrowserWindow,alwaysOnTop属性让它像Loom的气泡一样悬在所有应用之上。

SQLite配置藏着魔鬼细节。WAL模式(预写式日志)让读写不互锁,synchronous = FULL确保每笔写入落盘——交易数据丢不起。

这个选择让Aurafy成为Electron生态里一个少见的样本:不做PWA替代,不追跨平台统一,而是把桌面环境的特权用到极致。本地文件系统访问、原生屏幕录制、毫秒级启动——这些在浏览器里要么不可能,要么需要层层权限申请。

当SaaS订阅制成为默认答案,一个"买断制+零云依赖"的工具能走多远?