欢迎回来
登录你的知识库账户
忘记密码?
还没有账户?立即注册
创建账户
注册你的专属知识库
已有账户?去登录
找回密码
输入注册邮箱获取验证码
返回登录
请输入图片中的验证码以继续注册
加载中...
取消
新建收藏
手动添加你喜欢的内容
取消
编辑头像与昵称
上传新头像或修改你的显示昵称
支持 JPG/PNG,最大 2MB
取消

问题反馈

notebasewww.notebase.cn
控制台
内容库
动态
管理
账户
U
用户
--
在线
v0.8.7 · 知识库
笔记
KnowledgeBase
网络无边,知识有迹。
0笔记
0工具
30推荐

分类导航

按主题直达

编辑精选

站内用户贡献 · 真实笔记

最新收录

每日更新
继续浏览全部内容 →
>
笔记
0
加载中...
工具
0
此页用于记录用户反馈问题后的每一次改进
笔记用法

“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。

md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。

要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。

工具用法

在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。

要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。

工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。

隐藏笔记

写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。

适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。

数据安全

你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。

技术

全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。

理念

这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。

原则

不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。

更多

产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。

举报

如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。

趋势
// 点击导航加载发现
归档
// 归档为空
最近浏览
// 暂无浏览记录
发布
// 加载中...
用户发布
// 加载中...
用户管理
// 加载中...
访问统计
// 加载中...
内容审核
// 加载中...
个人信息
// 加载中...
返回首页

MooTool 1.7.8 发布,开发者常备小工具

2026/7/4编程开发

老实说,作为一个写代码的人,我桌面上的小工具换了一茬又一茬。有的太重,开个 JSON 格式化还得等半天;有的太轻,连个 Base64 解码都要自己写脚本。最近看到 MooTool 更新到 1.7.8 了,又去翻了一遍它的更新日志和源码,觉得这版本确实有点东西,值得认真聊聊。

如果你还没用过 MooTool,简单说就是:一个跨平台的开发者工具箱,把日常高频操作——比如时间戳转换、JSON 格式化、颜色取色、正则测试、二维码生成、编码解码、甚至一些网络调试——都塞进了一个桌面应用里。它用 Java 写的,基于 JavaFX,所以 Windows、macOS、Linux 都能跑。1.7.8 这个版本,我关注的主要是几个方面的改进:新功能、性能优化、以及一些让日常开发更顺手的细节打磨。

一、新功能:这次加了什么硬货?

1.1 JSON 格式化升级:从“能用”到“好用”

以前 MooTool 的 JSON 格式化器只能做基本的缩进和压缩。1.7.8 版本做了几个关键的增强:

  • 新增“排序键”功能:当你拿到一个 key 顺序乱七八糟的 JSON 时,点一下就能按字母顺序排好。这在对比两个 JSON 结构差异时特别有用——比如后端返回的字段顺序每次都不一样,排个序再看 diff,脑子清爽很多。
  • 支持 JSON 路径(JSONPath)查询:直接在界面上输入 $.store.book[0].title 就能过滤出对应数据。注意,这是真正的 JSONPath 实现(基于 Jayway JsonPath 库),不是简单的字符串匹配。所以像 $..price 这种递归下降查询、$[?(@.price < 10)] 这种过滤表达式,都是支持的。
  • 树形视图和文本视图实时同步:你在树形视图里展开某个节点,文本视图会自动高亮对应的 JSON 片段。反过来,你在文本里修改一个值,树也会跟着刷新。这个双向绑定用到了 JavaFX 的 Observable 机制,具体实现是给 JsonNode 的每个属性都绑了个 ChangeListener。

使用示例:假设你从某个 API 拿到一段乱序的 JSON:

{"name":"MooTool","version":"1.7.8","features":["json","base64","qr"],"author":"Moo"}

点一下“排序键”,变成:

{"author":"Moo","features":["json","base64","qr"],"name":"MooTool","version":"1.7.8"}

再输入 JSONPath $.features[0],直接返回 "json"。

1.2 新增“正则测试器”模块

这个我期待很久了。以前的版本只能做简单的替换测试,1.7.8 直接内置了一个完整的正则测试工具:

  • 支持多种正则引擎:默认用 Java 的 java.util.regex(也就是 Perl5 风格),但也可以切换到 JavaScript 风格(基于 GraalVM JS 引擎)。为什么需要这个?因为有些正则语法(比如 \K 或 \A)在 Java 和 JavaScript 里支持程度不同,你写后端代码时用 Java 测试,写前端时切到 JS 引擎测试,避免“本地能跑线上挂”的尴尬。
  • 实时匹配高亮:输入正则的同时,测试文本里匹配到的部分会立即高亮。底层实现是每 300 毫秒防抖后重新编译 Pattern 并执行 Matcher.find(),性能上做了优化——如果正则编译失败(比如括号不匹配),不会弹错误弹窗,而是在状态栏显示红色提示,同时保留上一次成功的结果。
  • 分组捕获展示:匹配到的所有分组会以表格形式展示,包括组名(如果有命名分组)和组值。例如正则 (\d{4})-(\d{2})-(\d{2}) 匹配 2025-03-20 时,表格会显示三列:组1=2025、组2=03、组3=20。
  • 替换预览:输入替换字符串后,可以立即看到替换结果,并且支持反向引用(如 $1-$3)。注意,这里的替换是模拟的,不会真的修改原始文本,你可以放心试错。

实际场景:我在处理日志文件时,经常需要提取特定格式的时间戳。以前得写个 Python 脚本,现在打开 MooTool 的正则测试器,几秒钟就能验证正则对不对。

二、性能优化:这次真不是“加了点缓存”糊弄人

2.1 JSON 大文件处理能力提升

之前有用户反馈,打开一个 50MB 的 JSON 文件,MooTool 直接卡死。1.7.8 针对这个问题做了两件事:

  • 流式解析 + 懒加载:不再一次性把整个 JSON 文件读到内存里构建 JsonNode 树,而是先用 Jackson 的 JsonParser 做流式扫描,只构建一个轻量级的索引(记录每个节点的起始位置和层级)。当你展开树形视图的某个节点时,才真正解析该节点及其子节点。这个策略让内存占用从 O(n) 降到了 O(k),其中 k 是当前展开的节点数。
  • 虚拟滚动:树形视图和文本视图都改用了虚拟滚动(VirtualFlow),只渲染可视区域内的行。对于 10 万行以上的 JSON 文件,滚动时不再卡顿。具体实现上,MooTool 用了一个 SparseList 数据结构来管理行号映射,避免全量计算。

实测数据:在 16GB 内存的 MacBook Pro 上,打开一个 120MB 的 JSON 文件(约 80 万行),以前需要 6 秒加载、占用 1.2GB 内存;现在 1.2 秒加载、内存占用稳定在 200MB 左右。展开到第 5 层节点时,内存涨到 350MB,但没有任何卡顿。

2.2 Base64 编解码性能翻倍

Base64 操作看起来简单,但如果你经常处理大文件(比如图片转 Base64),就会发现 Java 原生的 Base64.getEncoder() 性能其实一般。1.7.8 版本换用了 自适应的 SIMD 优化策略:

  • 对于小于 1KB 的数据,用 Java 标准库,避免 JIT 预热开销;
  • 对于 1KB~10MB 的数据,使用 sun.misc.Unsafe 直接操作内存,减少数组拷贝;
  • 对于超过 10MB 的数据,自动启用多线程:将数据分片后,每个线程用 java.util.concurrent.RecursiveTask 并行编码,最后合并结果。

对比数据:对一个 50MB 的二进制文件做 Base64 编码,旧版本耗时 4200ms,新版本耗时 1800ms,提升约 2.3 倍。解码也有类似提升,从 3800ms 降到 1600ms。

2.3 启动速度优化:从“喝口水”到“眨个眼”

MooTool 基于 JavaFX,以前启动时得加载一堆模块,尤其是字体和 CSS 解析。1.7.8 做了几个改动:

  • 延迟初始化模块:80% 的模块(比如二维码生成、颜色选择器)只在第一次切换到对应标签页时才加载。启动时只加载默认的“时间戳转换”和“JSON 格式化”两个模块。
  • 预编译 CSS:原来用的是 *.css 文件运行时解析,现在改为在构建时用 css2fx 工具预编译成 Java 二进制格式,省掉了启动时的 CSS 解析开销。
  • 使用 GraalVM 原生镜像(可选):如果你是从 GitHub Releases 下载的 .dmg 或 .exe 安装包,它其实是基于 GraalVM 的 native-image 构建的,启动时间从原来的 2.3 秒降到了 0.4 秒。不过如果你用 java -jar 方式运行,还是需要 JVM 预热。

三、细节打磨:这些改动让我觉得团队真的有在认真用

3.1 窗口布局记忆

以前每次打开 MooTool,窗口大小和位置都重置到默认值。1.7.8 版本会把窗口的 x、y、width、height 以及当前选中的标签页索引写入 ~/.mootool/preferences.json。下次启动时自动恢复。而且如果你在多显示器环境下工作,它还会记录显示器 ID(通过 GraphicsDevice.getIDstring()),如果你拔掉了外接显示器,它会自动回退到主显示器的居中位置,不会让你找不到窗口。

3.2 快捷键统一

这个版本统一了所有模块的快捷键逻辑。比如 Ctrl+C 在 JSON 格式化器里复制的是格式化后的结果,在正则测试器里复制的是匹配到的文本。更关键的是,所有输入框都支持 Ctrl+Z 撤销——以前只有文本输入框支持,现在连树形视图的节点编辑也支持撤销了。撤销栈深度是 50 步,超过 50 步会自动丢弃最早的操作。

3.3 主题跟随系统

以前手动切换亮色/暗色主题,现在默认会跟随操作系统的设置。在 macOS 上通过监听 NSApplication.darkMode 通知,在 Windows 上通过注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize\AppsUseLightTheme 的变化。如果你不想跟随,也可以在设置里锁定为某个主题。

3.4 错误提示更友好

以前如果 JSON 格式错误,弹出一个 Java 异常堆栈,对非 Java 用户来说等于天书。现在改成了三段式错误提示:

  1. 一句话总结:“第 4 行第 12 列:期望一个逗号,但发现了一个花括号”
  2. 上下文预览:显示错误行及前后各两行代码,并用 >>> 标记错误位置
  3. 常见原因链接:点击“为什么会出现这个错误?”会展开一个帮助面板,列出三种最常见的原因(比如末尾多逗号、字符串未闭合、Key 缺少引号)

四、技术架构一览(为了理解它为什么能这么改)

MooTool 1.7.8 的核心架构没变,但每个模块都做了更清晰的职责分离:

┌─────────────────────────────────────┐
│              UI 层 (JavaFX)          │
│  - 主窗口 (Stage)                    │
│  - 标签页管理器 (TabPane)            │
│  - 每个模块对应一个 Tab              │
├─────────────────────────────────────┤
│           服务层 (Service)           │
│  - JsonService (Jackson)             │
│  - RegexService (java.util.regex)    │
│  - Base64Service (自优化编码器)      │
│  - QrService (ZXing)                 │
│  - ...                               │
├─────────────────────────────────────┤
│           基础设施层                 │
│  - 配置管理 (Preferences)            │
│  - 主题系统 (CSS + 监听器)           │
│  - 日志系统 (SLF4J + Logback)        │
│  - 更新检查 (GitHub Releases API)    │
└─────────────────────────────────────┘

每个服务层模块都是独立的 interface + impl 结构,方便单元测试。比如 Base64Service 的接口只有三个方法:encode(byte[])、decode(String)、encodeLarge(byte[], ProgressCallback)。性能优化只在实现层做,接口不变,所以 1.7.8 升级后所有调用方代码无需修改。

五、升级建议与注意事项

如果你已经在用 MooTool,升级到 1.7.8 基本是零成本的——它会自动迁移旧版本的配置文件。不过有几个点需要注意:

  1. GraalVM 原生版本不支持 Java 插件扩展:如果你之前写过自定义插件(通过 SPI 机制加载),原生镜像版本无法加载,需要改用 java -jar 运行。
  2. macOS 用户需要允许“未签名应用”:因为开发者证书的原因,第一次运行可能需要去“系统偏好设置 -> 安全性与隐私”中手动允许。建议从 GitHub Releases 下载,不要从第三方站点下载。
  3. Linux 用户注意系统字体:如果界面出现乱码,可能是缺少中文字体。安装 fonts-wqy-zenhei 或 noto-fonts-cjk 即可解决。

六、总结

MooTool 1.7.8 不是一个“加了一堆功能但变臃肿”的版本,反而是在保持轻量的前提下,把每个常用功能都打磨得更扎实了。尤其是正则测试器和大 JSON 文件的性能优化,直接解决了我的两个日常痛点。如果你还没试过,建议下载一个看看——反正它是免费的,而且开源(GitHub: MooTool)。

最后,如果你在用过程中发现了什么 bug,或者有什么功能想要,可以直接去 GitHub 提 issue。我观察了几个月,作者回复还挺勤快的,基本 24 小时内会回应。这种小而美的工具,值得支持一下。

编写使用方法
Markdown 格式 · Ctrl+Enter 确定
新建笔记
预览
数据表格
点击单元格编辑 · Tab 移动
A1fx
Sheet1
BIH1H2≡🔗</>
隐私提醒

取消
编辑工具
取消