分享一个我自己开发的 mac 状态栏工具,包含网速内存处理器等实时占用的显示,几乎是这类工具里最简单的了

6 小时 22 分钟前
 monosave

写它的初衷很简单,就想着自己整一个轻量的、够用就行的。

说说它能干啥吧。菜单栏实时显示 CPU 、内存、GPU 、网速,不用打开活动监视器瞄一眼就知道卡在哪。内存占用按应用列出来,吃内存的大户点一下就能让它正常退出把内存吐出来。还能帮你卸载应用,扫本体加关联文件一起丢进废纸篓,删错了还能捞。启动项扫描、电池健康、磁盘占用这些也都有,资源持续飙高还能弹个通知提醒你。

优点这块我自己觉得有几个:

一是轻,Go 写的原生菜单栏应用,跑起来几乎不占资源,开着没啥存在感。 二是全本地,啥数据都不上传,隐私这块比较放心。 三是开源免费,代码都在 GitHub 上,谁都能看明白。

他的适用范围很广,如果过你需求比较复杂可以看看腾讯的柠檬我觉得是这类软件里还不错的选择,然后写这个软件的初衷是 x-status (好像叫这个名字忘记了) 这个工具,感兴趣的也可以看看。

缺点: 只支持 macOS 13+,而且只支持 Apple Silicon ,Intel 的朋友用不了。 卸载是启发式匹配,靠 bundle id 和应用名扫关联文件,特别冷门的 App 可能扫不全,删之前看一眼勾选项比较稳。

https://github.com/xbenduan/vitals

430 次点击
所在节点    分享发现
9 条回复
zstone123
5 小时 17 分钟前
确实挺轻量简洁👍
fds
4 小时 35 分钟前
👍很棒。我加了个剩余磁盘空间显示。另外遇到个报错,分析如下:

问题:启动约 30 秒后弹窗「操作未完成 / context deadline exceeded 」。

原因:loadApplications 在启动时后台扫描 /Applications ,整体限时 30s 。core.ListApplications 对每个 .app 串行做 4 件事,各自开子进程或遍历目录:mdls 取显示名、WalkDir 算包体积、pgrep -f 判断是否运行、sips 转图标。我机器上 200 个应用合计超过 30s ,超时后整份结果被丢弃,错误原样弹到 UI 。

最重要的改进(按价值排序):

1. 超时不要丢弃已扫描结果。ListApplications 在 ctx.Err() 时返回已收集的部分列表,loadApplications 对 context.DeadlineExceeded 只记 log 不弹窗。这是直接消除弹窗的改动。
2. 包体积延迟计算。pathSize 全目录遍历是最大开销(约 11s ),列表阶段不需要。改为选中应用时在后台与关联文件扫描一起算。
3. 运行状态一次性获取。启动时跑一次 ps -axo comm=,内存里按 appPath/Contents/MacOS/ 前缀匹配,替代每个应用一次 pgrep (约 6s )。
4. 后续可选:mdls 改读 Info.plist 的 CFBundleDisplayName ,sips 图标转换延迟到可见时。这两项仍占约 14s 。

效果:1–3 实施后,200 个应用扫描 30s+ 降到 14.7s ,不再弹窗。
fds
4 小时 27 分钟前
后续改进:把列表扫描阶段剩余的两个子进程也去掉了,200 个应用的 ListApplications 从 14.7s 降到约 94ms 。

1. mdls 改为直接读 bundle 。按当前界面语言依次读 Contents/Resources/<lproj>/InfoPlist.strings (中文:zh-Hans / zh_CN / zh ,英文:en / English / Base ),取 CFBundleDisplayName 或 CFBundleName ;没有本地化文件时回退 Info.plist 的同名字段,再回退目录名。howett.net/plist 能解析 .strings 的 XML 、二进制和 OpenStep 文本三种格式,实测微信 / 熊掌记 / 飞书等中文名正确。副作用:原 mdls 返回的是 Finder 文件名(如 Alfred 5 ),现在优先 bundle 显示名( Alfred )。
2. sips 图标转换延迟到首次渲染。AppInfo 去掉 IconPNG ,新增 core.ApplicationIconPNG(ctx, appPath)。UI 层在 applicationImage 首次遇到某应用时标记 pending 并起 goroutine 转换,4 并发、单个 10s 超时,完成后通过 win.Update 写入图标缓存,期间显示头像占位。列表出现不再等图标。

累计效果( 200 个应用):

- 原始:>30s ,超时弹窗
- 保留部分结果 + 体积延迟 + ps 一次性:14.7s
- 再加 Info.plist 读名 + 图标延迟:约 94ms
EvanG
4 小时 14 分钟前
不错,感觉比 istatistica 直观,切来试试
monosave
3 小时 53 分钟前
@fds 感谢建议,回去优化一下
monosave
3 小时 52 分钟前
@EvanG 欢迎体验
monosave
3 小时 52 分钟前
@zstone123 欢迎体验
monosave
3 小时 42 分钟前
@fds 大佬不介意的话欢迎直接提 mr
jdzrjk
3 小时 12 分钟前
好用,谢谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1247657

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX