Xiaoyifang/goldendict 加载图片词典比较慢,不知能否优化?

GoldenDict-NG 使用的现代浏览器,支持的 CSS3 样式更多,会更美观,但受词典质量的影响很大。GoldenDict 官方原版和 MDict 因为浏览器比较古老,在加载网页时遇到 CSS3 样式很多就直接忽略了,所以渲染会更快。

比如这个现代汉语规范词典,查询或翻页大概需要1、2秒一次,不清楚为什么慢,应该不是css和html的问题吧

链接: https://pan.baidu.com/s/1Dy9CWKxhAI_RroM89HwnXA 提取码: arc3 复制这段内容后打开百度网盘手机App,操作更方便哦
–来自百度网盘超级会员v4的分享

翻了大概 100 页,首次加载或者翻页每次都在 400ms 以内完成,首次加载图片用时 180-250ms,第二次加载相同图片是 40-50ms,没有到 1-2 秒的情况。

深色模式下时间会拉长到 700-800ms 完成。是不是开了深色模式?

没开启深色模式,就正常白色,很奇怪 xiaoyifang 版在我电脑上就是很慢(我电脑不垃圾,i7-12标压)

GoldenDict_gxprGzfe0O

Goldendict-ng 23.07.25-alpha.20230730.f7e43479
Qt 5.15.2 Visual C++ Compiler 192930151 windows winnt 10.0.22621 x86_64-little_endian-llp64
Flags:USE_XAPIAN MAKE_ZIM_SUPPORT USE_ICONV MAKE_CHINESE_CONVERSION_SUPPORT

我的情况跟你这一模一样,能明显感受到图片是逐渐显示出来的。

我认为是浏览器的差异,大图加载慢。我把 goldendict 内置的静态资源请求,全部屏蔽了,只保留词典的资源请求,测试对结果影响不大,整个加载时间只减少了 80-100ms,从400ms下降到了300ms。

浏览器的差异啥意思,是跟Win系统当前默认浏览器有关吗。还有就是如何屏蔽,也想试试看,大佬能指点下吗

和系统没关系,GD 官方原版用的浏览器是 QtWebkit,xiaoyifang 的版本用的浏览器是 QtWebEngine,前者比较古老,大概相当于2012年的浏览器,而后者是现代浏览器,封装的 Chromium。

你先打开一个词条,然后在GD的网页里,右键审查元素,切换到 Network 面板,勾选 Disable cache。
然后点击GD的历史面板的词条,可以随意切换词条,此时Network面板,会显示加载的资源文件。在资源名称上右键,选择 Block request URL,即可屏蔽资源。再切换一次词条,可以看到资源屏蔽成功。

加载图片很慢

和你相同的图片,这是我的加载时间。

也许是硬盘的差异。我硬盘用的PCIe 3.0的接口,可能你是SATA的接口。不知道谁用的PCIe 4.0的接口,也可以来截图看看。

我就是PCIe 4.0的SSD,应该不是文件读取的问题

我的是M.2接口SSD固态硬盘

如果电脑上有VPN的话,不妨把VPN禁用试试看,之前发现VPN会拦截本地的流量从而造成资源加载缓慢

你的硬盘比我的还好,可能还有其他原因,按楼上说的关了代理看看。

VPN的开关没感受到影响,但发现一个奇怪的事:图片加载速度与GoldenDict的窗口大小有关,全屏的状态下图片的加载速度在300ms以内,正常查词窗口大小状态下速度则在600ms左右

进到我知识盲区了,这个问题要咨询 @xiaoyifang@slbtty 。关键还是 522kB 的图片,耗时 719ms 加载,我觉得很不正常。另外速度有问题的请求都来自 bres 和 qrc 两个协议,而 gdlookup 的请求保持了和官方原版一样的速度。

官方版是不是就没有问题?

对,试了下官方QT5版,除了文字太小没自适应4k屏外,加载速度快出天际(20ms以内)

1 个赞

试了一下,这个 mdx 词典的图片在我的电脑上需要 70ms~100ms https://github.com/goldendict/goldendict/files/12767768/test.zip 同样的一张图片改成 DSL 耗时差不多 test_dsl.zip (1.9 MB) ,应该和词典格式没有关系。

用类似 GD 的 bres:// 那样注册一个 url handler 单纯读取图片数据传递给 QtWebengine 而不做其它任何事情,需要 5~20ms ,这部分时间没有办法 GitHub - SourceReviver/qt_webengine_custom_schema_load_img

我觉得加载图片速度确实有问题,而且有不小的优化空间,但是具体哪里出问题了需要分析一波代码。

1 个赞