Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

librime-lua 177 配合 librime 1.11.0+ ,在 Lua 脚本里加载大体积字典文件后,输入法卡顿严重 #384

Open
1 task done
HuangJian opened this issue Jan 10, 2025 · 8 comments

Comments

@HuangJian
Copy link

HuangJian commented Jan 10, 2025

Describe the bug
macOS系统上,手动升级 /Library/Input Methods/Squirrel.app/Contents/Frameworks/librime.1.dylib 至 v1.11.0 以后版本后,文字输入极其卡顿。

定位到关联的 Lua 代码,是我的「汉译英」插件加载了一个 8MB 的字典文件。
如果把这部分加载字典的 lua 代码注释掉,就观察不到明显的卡顿。

存在该问题的 librime 版本有 v1.11.0、v1.11.2、v1.12.0;v1.8.5 和 v1.9.0 没有明显卡顿。
librime-lua都是177版本,且 Rime 配置和 Lua 代码都是一样的。

Expected behavior
手动升级至最新版本 librime,性能表现不弱于 v1.9.0.

Screenshots
https://github.com/user-attachments/assets/e27849d9-6e27-4ba5-86ca-a7aba4c45ef4

Flavor(please complete the following information):

  • Squirrel

Package:

  • OS: macOS 12.7.6
  • Squirrel v0.16.2: 这是 macOS 12 能使用的最后 Squirrel 版本

Additional context

  • 不确定该问题是从 v1.11.0 还是 v1.10.0 开始出现的。
    • 因为替换为 v1.10.0 的 dylib 时,虽然输入不卡顿,但是 lua 插件并未生效。
  • 所有测试均只手动替换 dylib,~/Library/Rime 的内容都未改动。

rime/librime#970

@hchunhui
Copy link
Owner

请问 177 是指什么版本?我看到截屏中“汉译英耗时”并没有显著变化,但感受却不一样。我能想到的可能性是 #308 ,因为这从时间上看是发生在 librime v1.9 发布之后,并且新加的 gc 确实有可能是耗时操作。但这个猜想与同一个 librime-lua 版本的描述相冲突。

@HuangJian
Copy link
Author

HuangJian commented Jan 11, 2025

librime-lua 版本号读取的代码在这里 (忘记在哪儿抄的了😅)

换上 #207 上的代码,得到的版本号是 200

local function Version()
  local ver
  if Opencc and Opencc('s2t.json').convert_word then ----------- 构造
    return 200
  elseif rime_api.regex_match then

@hchunhui
Copy link
Owner

了解了。那么这个 177 的含义是功能而不是特定的 git commit。有条件的话可以尝试在最新 commit 上去掉上面提到的改动,如果就不卡了说明猜测是正确的。

@HuangJian
Copy link
Author

了解了。那么这个 177 的含义是功能而不是特定的 git commit。有条件的话可以尝试在最新 commit 上去掉上面提到的改动,如果就不卡了说明猜测是正确的。

正如您所估计的,把 lua_->gc(); 注释掉后,在我的应用场景下的性能表现就和之前版本一致了。

LuaTranslation::~LuaTranslation() {
//  lua_->gc();
}

@shewer
Copy link
Contributor

shewer commented Jan 12, 2025

把gc 做成 option 如何
vars_get vars_set 加入 enable_gc

LuaTranslation {
   public:
      bool enable_gc() :const { return enable_gc_;} 
      void set_enable_gc(bool enable_gc) : enable_gc_(enable_gc) {};
    private:  
       bool enable_gc_ = true;
}
LuaTranslation::~LuaTranslation() {
 if(enable_gc_)
     lua_->gc();
  }
}

@hchunhui
Copy link
Owner

做成 option 并不解决问题。要是关掉 gc,那么内存又会暴涨了。应该是调用 gc 时传一些参数,让它步进式运行而不是全量运行即可。但是我还没研究明白怎样设定。

@HuangJian
Copy link
Author

做成 option 并不解决问题。要是关掉 gc,那么内存又会暴涨了。应该是调用 gc 时传一些参数,让它步进式运行而不是全量运行即可。但是我还没研究明白怎样设定。

FYI: 我编译的关掉 gc 的版本,并未观察到内存暴涨的情况。

  • 连续高强度输入文字时, Squirrel 进程的内存占用一直在 96~108 MB 区间。
  • 奇怪的是,长时间未启用输入法时,其内存占用也一直停在 100+ MB。
  • 使用环境:mbp 2015, macOS 12.7.6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants