tisfeng / Raycast-Easydict

A Raycast Extension for looking up words or translating text in an easy way. Support 48+ languages, support Linguee and Youdao dictionary, support OpenAI, DeepL, Google, Bing, Apple, Baidu, Tencent, Volcano, Youdao and Caiyun translation.
https://www.raycast.com/isfeng/easydict
MIT License
382 stars 21 forks source link

第一次启动查询延迟较长 #20

Closed sihaixianyu closed 1 year ago

sihaixianyu commented 1 year ago

第一次启动查询的时速度比较慢,是不是因为没有保持长连接,等一小段时间后再查询又需要再次建立连接。

tisfeng commented 1 year ago

有这个可能,但不是长连接。整个过程主要分两步,第一步先识别输入的文本语言,第二才是内容查询,到底问题出在哪一步,得看具体情况,比如你具体查询的内容是什么? 哪个服务响应慢? 另外,如果开启了使用系统代理,那的确会很慢。

sihaixianyu commented 1 year ago

一定时间内查询英文单词,该段时间内第一次查询确实比后序查询有明显延迟,我觉得connection establish的可能性大,有时间大佬您check一下?

tisfeng commented 1 year ago

行,稍后我看一下。对了,你开启了哪些服务?是否启用了 Use System Proxy

sihaixianyu commented 1 year ago

插件设置内是没有开启的,所以我判断还是连接建立问题,看看大佬能不能搞成长连接。

tisfeng commented 1 year ago

我明白了。首先,长连接是不可能的 😓,因为这是一个 extension,没法常驻后台,只有等用户使用的时候才能加载运行,技术上行不通。

我初步查了一下,你提到的问题,应该是第一次文本识别速度慢导致。具体代码比较复杂,我这里简单解释一下。

整个过程主要分两步,第一步先识别输入的文本语言,第二才是内容查询

文本的语种识别很重要,否则查询的结果很可能会是错的,所以我对语种识别模块的准确度要求很高,为此引进了多家大厂的文本识别 API,目前包括腾讯,百度,微软 Bing 以及谷歌,结合用户的偏好语言,最终判定输入文本的语言类型。这几家 API 都有着各自的优缺点:

腾讯:优点是响应速度快,对中英文的识别准确度较高,缺点是支持的语言较少,偶尔不准确。 百度:优点是响应速度快,准确度较高,支持语言多,缺点是目前用的是野生 API,可能不稳定。 Bing:优点是响应速度较快,准确度较高,支持语言多,缺点是每 10 分钟要获取一次 Token,这个过程比较耗时,大约 0.5s+(这应该就是你的问题所在了)。 谷歌:优点是准确度极高,支持语言多,缺点是响应速度慢,耗时 1~2s 不等。

目前的策略是,至少要同时命中两家 API 才确定文本语言类型,而腾讯和百度的速度虽然快,但准确度稍微欠缺,所以有时就需要等待 Bing 的请求结果。而 Bing 的 Token 一旦过期,就可能导致查询时间变长。

tisfeng commented 1 year ago

我计划再引入一家语种识别 API,字节跳动旗下的 火山翻译,优点是响应速度快,准确度较高,支持语言多,由于是官方的 API,稳定性也高。 经我初步测试,能较明显地提高文本识别速度,翻译准确度也不错。

sihaixianyu commented 1 year ago

优秀啊,等我毕业了有空也学学JS,哈哈。

tisfeng commented 1 year ago

加油哈,虽然我并不是前端的 😂,我也是今年才刚学的 JS,Easydict 这是我的第一个练手项目 😜

tisfeng commented 1 year ago

你好,最新版本已支持火山翻译,火山语种识别 https://github.com/tisfeng/Raycast-Easydict/releases/tag/2.4.0

目前测试阶段内置了我个人的火山 Access Key ID 和 Secret,但后续可能会移除。

商店版也已提交 PR https://github.com/raycast/extensions/pull/3061