tisfeng / Easydict

一个简洁优雅的词典翻译 macOS App。开箱即用,支持离线 OCR 识别,支持有道词典,🍎 苹果系统词典,🍎 苹果系统翻译,OpenAI,Gemini,DeepL,Google,Bing,腾讯,百度,阿里,小牛,彩云和火山翻译。A concise and elegant Dictionary and Translator macOS App for looking up words and translating text.
GNU General Public License v3.0
6.4k stars 325 forks source link

🐞 反馈问题:2.7.1 版本 OpenAI 翻译卡顿 #541

Closed wangbiye closed 1 month ago

wangbiye commented 2 months ago

请先确认以下事项:

问题描述

13-inch, 2020, Four Thunderbolt 3 ports 2 GHz 四核Intel Core i5 macOS 14.4.1 (23E224)

使用 2.6.1 和 2.7.1 差别还是挺大的, 感觉 2.7.1 能让电脑都卡顿; 当我输入这些文字的时候, 开启的是 2.7.1 比较卡, 退出之后输入文字都流畅了; 两个版本效果看视频

2.6.1 效果 https://github.com/tisfeng/Easydict/assets/9958811/d275a41a-f0e6-4d3d-a062-79cc684fba9e

2.7.1 效果 https://github.com/tisfeng/Easydict/assets/9958811/06db5807-4806-4d06-8d92-7202fa9afd5d

该问题是否可以稳定重现?

可重现

重现步骤

在我电脑上只要安装 2.7.1 版本就是这种效果

截图

已提供视频

期望结果

达到 2.6.1 的流程效果

解决方案(可选)

No response

设备型号 && 系统版本

13-inch, 2020, Four Thunderbolt 3 ports, macOS 14.4.1 (23E224)

是否愿意提交 PR 解决该问题?

tisfeng commented 2 months ago

对于这种 stream 请求服务,目前 Easydict 界面刷新方式确实比较糟糕,会导致卡顿,但 2.7 版本相比 2.6,好像只是用 Swift 重写了 OpenAI 服务,界面相关的逻辑没有改,按理说接口请求方面应该不会有太大影响。

@Jerry23011 你测试确认一下这个问题。

tianzhuwei commented 2 months ago

我也遇到了这个问题 2.7.1 明显卡顿

Jerry23011 commented 1 month ago

@tianzhuwei 方便发一下你的 Mac 型号和系统版本吗

Jerry23011 commented 1 month ago

对于这种 stream 请求服务,目前 Easydict 界面刷新方式确实比较糟糕,会导致卡顿,但 2.7 版本相比 2.6,好像只是用 Swift 重写了 OpenAI 服务,界面相关的逻辑没有改,按理说接口请求方面应该不会有太大影响。

我用 Instrument 跑了一下,确实有明显 CPU 高占用,在内置 AI 翻译服务中同样可以复现,严重情况下还会直接导致 app 挂起转彩虹圈,但看起来像是 objc 的问题

截屏2024-05-08 22 55 25 截屏2024-05-08 22 48 06

我同样复现了#538 的问题,这个是因为查单词因 result 内容过长没渲染出来导致的

截屏2024-05-08 22 46 39
tianzhuwei commented 1 month ago

@tianzhuwei 方便发一下你的 Mac 型号和系统版本吗

Apple M1 Version 14.4.1 (23E224)

tisfeng commented 1 month ago

不不,目前 OpenAI 翻译这种频繁刷新的 stream 服务会导致 CPU 高占用,甚至界面卡顿,这是已知问题,这个问题比较棘手,暂时没办法完全解决。

但我昨天突然想到了一个优化方案,应该能很大程度上缓解这种卡顿问题,晚上我会发个 PR 测试。

我同样复现了https://github.com/tisfeng/Easydict/issues/538 的问题,这个是因为查单词因 result 内容过长没渲染出来导致的

目前查询窗口界面的刷新方式有缺陷,有时会刷新失败,导致卡在某个位置。如果是偶尔出现这种问题,可以暂时忽略,稍后我们再想办法解决。

tisfeng commented 1 month ago

使用 2.6.1 和 2.7.1 差别还是挺大的, 感觉 2.7.1 能让电脑都卡顿; 当我输入这些文字的时候, 开启的是 2.7.1 比较卡, 退出之后输入文字都流畅了; 两个版本效果看视频

@Jerry23011 你使用相同的接口,分别在 2.6.1 和 2.7.1 版本下,都只开启一个 OpenAI 服务,对比测试看看它们的刷新流畅度是否有明显区别。

我们需要确认是否是 Swift 重写 OpenAI 导致了这个问题。

Jerry23011 commented 1 month ago

我们需要确认是否是 Swift 重写 OpenAI 导致了这个问题。

测试了一圈我觉得不像是 Swift 导致的,我测试用 main 分支 tag 2.6.1 和 2.7.1,在两个版本下 OpenAI 翻译都用 gpt-3.5-turbo 流畅度几乎看不出差别,Instrument 中也同样

我看到 @wangbiye 在 2.7.1 上用的也是 gpt-3.5-turbo 但还是有明显卡顿,这点是我没测试出来的

因为 2.7.1 加入了自定义模型,如果用 gpt-3.5-turbo-16k 就能明显感觉卡顿,进程也会直接挂起

Jerry23011 commented 1 month ago

因为内置AI翻译服务也用的 BaseOpenAIService,我测试了一下各个模型,其中内置的8个模型里前两个都会造成卡顿挂起,但是后几个都不会,我觉得这个可能还和不同服务 stream 的速度有关?一些服务的 stream 速度太快,导致界面刷新速度跟不上 stream 的速度

我在 2.6.1 代码中手动添加了 gpt-3.5-turbo-16k,我的机型上也不会出现卡顿,但是同样是这个模型在 2.7.1 中就会直接导致 main thread 挂起

推测会不会是同样的模型在因为 Swift 重写后 parse 的性能提升所以 stream 速度提升,导致刷新速度跟不上,在一些老机型上更为明显(?)

tisfeng commented 1 month ago

2.7.2 版本已优化了 OpenAI 翻译卡顿问题。