当前位置: 首页 > news >正文

抓包历史为什么从 sql.js 迁到原生 SQLite

原文出处:本文首发于 DevPeek 官网博客
原文链接:https://devpeek.ypgao.com/blog/dev-build-log-sqljs-to-better-sqlite3/
作者:DevPeek 团队
转载说明:欢迎转载,请注明出处并保留原文链接。


DevPeek 是面向联调的抓包与 Mock 工具。从 v1.1.4 起,抓包记录会写到本地,重启应用也能看近期历史;脚本改过的请求头、响应体也会一并保存。后来协作消息、调试页里的 Network 记录、重发历史,也都需要长期留着。

这篇开发实录想讲清楚一件事:我们为什么把抓包历史的存储,从跑在 JavaScript 里的 sql.js,换成操作系统级的原生 SQLite。

我们遇到的坑:代理挂久了,人比电脑先扛不住

DevPeek 不是「抓几个包就关」的工具。很多人会让代理开着,手机或 WebView 一直走流量,列表里堆几千条请求,调试页还要翻上午抓过的包。

一开始,我们选了sql.js——一种常见于网页里做本地存储的纯 JavaScript 版 SQLite。接入快、不依赖系统原生组件,早期功能少的时候够用。

联调场景一忙起来,坑就暴露了。

现象:越抓越沉,像「该重启了」

如果你用 DevPeek 时遇到过下面几种情况,很可能就是同一类问题:

  • 代理从上午开到傍晚,电脑越来越卡,任务管理器里 DevPeek 占的内存慢慢往上走。
  • 列表里请求一多,翻页、搜索、点详情偶尔顿一下;Mock、断点还在跑,整机像被拖住。
  • 心里默认「联调结束关一下就好」——工具本该在后台默默干活,却像挂久了就得重启

根因在我们这边:sql.js 把整库放在内存里。每来一条抓包、每改一次请求详情,我们都要把越堆越大的整份数据库拷贝一遍再写回磁盘——相当于每隔一小段时间,把越堆越厚的笔记本从头到尾复印一次。

抓包越多、每条请求的 Header/Body 越大,复印就越慢、内存峰值越高。代理同时还要解密 HTTPS、跑 Mock、拦断点,卡顿就叠在一起了。

列表看起来能分页、能筛选,但底层仍是「内存里攒一大坨、周期性整库落盘」——和「直接往硬盘上的数据库文件里追加一条」不是一回事。功能继续加(参数转换、页面调试、协作同步)之后,这不是小优化能抹平的,而是存储方式选错了。

我们怎么改的:换成原生 SQLite,为「挂一整天」

我们一次性把抓包、协作等存储,从 sql.js迁到原生 SQLite——就是操作系统里那种真正的本地数据库,DevPeek 通过原生模块直接读写磁盘上的文件。

动机很单纯:性能和内存。希望 DevPeek 可以连续跑一整天,内存也完全没压力

改完以后,写入方式变了:

以前(sql.js)现在(原生 SQLite)
数据主要在哪内存里越堆越大在本地数据库文件里
怎么保存隔一会儿整库拷贝写盘来一条记一条,改哪里写哪里
挂一整天内存容易往上走,偶尔卡内存曲线平稳,列表跟手

改完以后,代理开着跑一天,列表照常翻、Mock 照点,不用为了「怕卡」而习惯性重启 DevPeek

工程上,原生组件打包、发版会多费些事——我们愿意付这个成本,因为 DevPeek 的定位就是长时间陪联调,不能在存储层掉链子。

改完之后,你能感知到的变化

  • 历史保留更多:单库可保留的抓包条数,从早期的约 1200 条提高到5000 条(仍会自动删掉最旧的,避免无限膨胀)。
  • 各功能各存各的:抓包、协作、调试 Network、重发历史分开存,互不相拖。
  • 长时间联调更放心:这是这篇开发实录最想说的——我们踩过的坑是「挂久了内存和卡顿」;换存储之后,才敢说 DevPeek 适合在后台挂一整天

若你以前某版 DevPeek 有过「越用越卡、只能重启」的体验,欢迎升级后试一下长会话;若仍有问题,到 GitHub Discussions 说说你的使用场景(大概挂多久、列表多少条),我们对照排查:
https://github.com/GYPengDev/devpeek/discussions


相关链接

  • DevPeek 官网与下载:https://devpeek.ypgao.com/
  • 抓包与过滤文档:https://devpeek.ypgao.com/docs/capture/
  • 本文原文:https://devpeek.ypgao.com/blog/dev-build-log-sqljs-to-better-sqlite3/
http://www.jsqmd.com/news/1356750/

相关文章:

  • GIS矢量数据处理:分散要素合并技术全解析
  • IEEE39节点Simulink建模与电力系统仿真实践
  • 智慧景区小程序开发实战:技术架构与性能优化
  • Unity中实现MuJoCo式位置控制:KV参数调优与插件开发实战
  • 2025届学术党必备的十大降重复率助手推荐
  • 蕉岭脱硫系统铜镍管件/海水循环铜镍合金管/铜镍带材联系方式-欣茂安钢业 - 企业推荐官【认证】
  • 昆泰芯 KTH5761|2.8~5.5V/-40~85℃三轴高精度数字 3D 线性霍尔 DFN2×2.5 微型封装
  • 工业气缸HD 6600 TK 50-28在严苛工况下的应用与优化
  • 生产级Java代码的线程安全与内存管理实战
  • Docker部署AiShort:构建私有提示词管理平台,提升AI协作效率
  • 医学论文解读:Reliable Multi-Prototypical Contrastive Learning for Semi-Supervised Heterogeneous and Multi-
  • fre:ac音频转换器终极指南:从技术原理到实战应用深度解析
  • PCIe CAN接口卡实战指南:从选型、部署到集成开发
  • 多智能体协作视频理解:基于“先猜后验”框架的长视频分析技术解析
  • 别只盯着640 TOPS:从SA8775P到SA8797P,高通真正升级的是整车计算架构
  • SolidWorks_标准零件库15_标准件与配置表
  • 自演化智体概览:在通往超级人工智能的道路上,应该演化什么、何时演化、如何演化以及在哪里演
  • 【STM32入门项目】DHT11温湿度监测与声光报警系统
  • 做了8年BI报表,2025年底我第一次怕:AI十分钟搭的大屏,我以前要熬两天
  • Flux模型+Krea风格+深度图ControlNet:AI图像生成全流程实战指南
  • Markdown语法详解
  • HashMap遍历性能优化:entrySet vs keySet深度解析
  • 从ReAct到Multi-Agent:AI智能体架构演进与实战指南
  • 12 万条消息撑爆 chrome.storage.local:浏览器扩展的本地存储到底该选谁
  • 支付宝前端团队集体转型Agent开发!程序员的下一个黄金赛道已揭晓,你还在等什么?!
  • Kubernetes Pod核心概念与实践指南
  • 深入解析Protobuf编码原理与性能优化实战
  • 拒绝“唯准确率论”:一文读懂机器学习评估的七大流派
  • FAB英语的重要性:外资厂的隐形门槛
  • PCA算法解析:从原理到实践的数据降维指南