话说回来,为啥要搞这个《我的猪公主》的绿色下载版本?这事儿说来话长,得从我那台老笔记本说起。我这个人,对那些装了就得写注册表,卸载还留一堆垃圾的软件,那是深恶痛绝。我这个人习惯了,能不碰系统目录的东西,我坚决不碰。
这个“猪公主”项目,是我早些年为了给我老婆管理她那些养宠物数据的软件。说白了,就是个加了自定义界面和提醒功能的数据库。官方版本你知道吗?那安装包得奔着五百兆去,每次升级都得折腾半天。我跑去更新,点进去一看,好家伙,捆绑了仨播放器,俩清理大师,还有个浏览器插件。我直接气炸了。
我老婆就抱怨,说每次打开慢死了,而且她经常换电脑用,老是得重新安装一遍,重新配置环境,烦不胜烦。她就随口一句:“能不能弄个绿色的,一个文件夹带着就能跑的那种?” 我当时正在看球赛,随口答应了,结果球赛看完我就被她盯着了,非让我实现。得,这活儿来了,那就得好好干。
拍桌决定,暴力精简过程
我当时就拍了桌子,跟自己说,不行,这玩意儿必须得纯净,必须绿色。我要的是数据管理,不是一堆广告。我当时手里正好有点空闲,就撸起袖子准备自己干一个简化版本。我找了最基础的压缩工具,打开了官方的安装包,开始剥离。工具用的是我最顺手的,不用安装,直接就能跑的。我当时的想法很简单:只要能跑,越简单越
- 第一步:解压与分析。 我先用7z把那个巨大的安装包暴力解开了。翻进去一看,好家伙,里面确实塞满了各种运行时库,还有几个根本用不上的皮肤文件和多语言包。光是默认捆绑的那个JDK环境,就占了一大半体积。
- 第二步:确认核心依赖。 我检查了核心程序运行的日志。确定了它只需要系统自带的.NET框架,而那些巨大的Java环境和C++运行时是完全多余的,都是官方为了“兼容一切”塞进去的累赘。我保留了核心EXE和必要的配置文件,其他的全部扔掉。我连日志生成器都给简化了,只保留了最基础的报错记录。
- 第三步:制作启动脚本。 为了保证它在任何电脑上都能跑起来,不用操心路径问题,我写了个超级简单的批处理文件(.bat)。这个脚本的作用是,先检测当前目录是不是在临时文件夹,如果不是,就直接启动主程序。它还设定了所有配置文件和缓存文件的路径必须指向当前文件夹内部,不能往系统盘里写。
实现“绿色下载”的灵魂:数据自携带
“绿色下载”的重点就是不能污染系统,数据也得跟着走。官方的版本,数据文件会跑到一个非常隐蔽的系统文件夹里,重装系统或者换电脑,数据就全丢了。我必须解决这个痛点。
我修改了配置文件读取逻辑。我设计了一个结构:把所有配置文件和真正重要的宠物数据文件,都放在程序目录下的一个“Data”文件夹里。程序启动时,1寻找这个“Data”文件夹。如果找不到,就创建一个全新的。这样,用户只要把整个《我的猪公主》文件夹拷贝走,数据就跟着移动了,不用管什么AppData路径或者注册表。完美解决迁移的痛点。
接着就是更新日志的事儿。官方的版本更新,每次都得重新装一遍,非常麻烦。我的“猪公主”更新机制,我决定它必须要是傻瓜式的。我加了个小功能,在启动脚本里判断一下版本号文件。如果我本地服务器(就是我自己的NAS)上有新版本,它就弹个提示。用户点“确认”,程序就自动下载最新的核心文件压缩包,然后覆盖掉旧的核心文件,数据文件和用户设置文件不动。全程无打扰,不跳广告,连进度条都是我用字符简单模拟的。这个版本,我称之为V2.1,也就是这回更新日志的内容,体积被我控制在了不到二十兆。
为什么非要自己造轮子?
可能有人会问,你干嘛非得自己折腾这个?为啥不用官方的云服务?
我跟你们讲个真事儿。我之前待的那个公司,就是搞那些巨型SaaS的,维护起来一团浆糊。我一个老同事,本来是写前端的,因为公司突然要求所有人去学一门冷门语言,他死活不干,觉得浪费时间。结果?公司直接把他调去了运维岗,每天的工作就是拔网线,插网线,重启服务器。人直接崩溃了,三十多岁了,被这么折腾。他找到我,跟我吐槽了三天三夜,只能辞职回家。他走之前告诉我,最可怕的不是技术难,而是你永远不知道你的系统里塞了多少没用的垃圾和多少你无法控制的依赖。
我当时就意识到,越是大型、复杂的系统,它背后的维护成本和扯皮事情就越多。我这个“猪公主”,虽然小,虽然土,但是它功能单一,目的明确:就是给我老婆和几个朋友提供一个干净、可靠的数据环境。我掌握了所有的核心逻辑,不用跟任何人推诿扯皮。想更新就更新,想精简就精简,甚至想把它扔掉都可以。我用最简单、最笨拙的办法,去解决那些被过度工程化的问题。
我现在的乐趣就在于,用最少的资源,实现最大的自由。这个V2.1的“绿色下载”包,体积只有原来的百分之三,启动速度快了三倍。我老婆现在用着也方便,直接在U盘里带着走。这成就感,比写一堆没人看的企业级代码舒服多了。