!LibGetFrame-1.0 V201

!LibGetFrame-1.0 V201

底层库,让不同框架插件之间能互相找到对方的 frame(Cell 和 WeakAuras 都依赖它)

副本&团队增益 & 减益单位框架战斗

LibGetFrame-1.0 V201

这个库是干嘛的:帮 WeakAuras 等插件快速找到某个玩家对应的头像框架。团队框架可能是 Cell、ElvUI、Grid2 任何一家,这个库屏蔽差异,统一返回正确的 frame。

V100 苍穹之霜优化版,引入全局遍历和分片扫描,解决原版暴力递归的卡顿问题 V200 意难平重构版,引入反向索引和 EnumerateFrames,查询从 O(n) 降到 O(1) V201 快跑兄弟修复版,修复 V200 的 Bug,进一步减少扫描和查询开销


V201 升级了什么

  1. 查询从遍历改成哈希定位 —— 原来每次查都要把所有框架挨个比一遍(25 人团几十个框架,WA 每帧查几十上百次),现在单位名直接映射到框架,一次命中,复杂度从 O(n) 降到 O(1)
  2. 只扫真框架 —— 原来遍历整个 _G 全局表(十万条),现在用 EnumerateFrames 只遍历框架对象(几千条),扫描量减少 70%+
  3. 永久缓存不变属性 —— 框架名、是否被保护、是否按钮类型这些不会变的属性,查一次存起来,后续扫描直接跳过
  4. 查询结果缓存 + 零内存分配 —— 相同查询直接返回上次结果,忽略列表复用预分配表,不再每次新建,减少垃圾回收卡顿
  5. 自适应扫描预算 —— 帧率高多扫、帧率低少扫,避免扫描抢占帧时间导致掉帧
  6. 修了V200的 3 个 Bug:首次扫描续扫失效、Cell 接口出错丢框架、Cell 篡改全局优先级表

对玩家的实际感受:大团本和战场掉帧减少,战斗间歇卡顿减少,WA 加载后立即可用,用 Cell 的不受影响。

验证版本:游戏内输入 /run print(select(2, LibStub("LibGetFrame-1.0", true))) 返回 201 即可。


直接下载即用,完全不用改 WA 和 MRT。它们内部已经通过 LibStub:GetLibrary("LibGetFrame-1.0") 来取这个库,只要库装在 AddOns 下且被加载,WA 和 MRT 自动用上优化过的版本,原版(如果 WA 自带了老版本)会被 LibStub 的版本比对机制忽略——谁的 MINOR_VERSION 大用谁。