Qt5.14.2下QWebEngineView加载本地HTML页面渲染缓慢是什么原因?
可能的原因
- GPU资源与OpenGL上下文冲突
QWebEngine底层基于Chromium,默认依赖OpenGL完成页面渲染,和你并行运行的OpenGL渲染任务会抢占GPU算力,同时如果两处渲染逻辑存在OpenGL上下文频繁切换、资源竞争的情况,会直接导致WebEngine的渲染指令排队。Qt 5.14.2对多OpenGL渲染场景的调度存在优化不足的问题,这类冲突的影响会更加明显。 - QWebChannel数据传输阻塞
代码中在QWebChannel初始化回调中直接读取my_object.data属性,Qt对象属性的跨端读取为同步阻塞逻辑:如果data对应的JSON字符串体积过大,或是data属性的getter函数内存在耗时操作,会直接阻塞JS线程执行,外观表现为页面渲染长时间卡住。Qt 5.14的QWebChannel未实现大容量数据分片传输,单次传输1MB以上内容就会出现可感知的卡顿。 - 线程优先级调度失衡
如果你的自定义OpenGL渲染任务所在线程的优先级设置高于QWebEngine的内置渲染线程,系统会优先调度你的OpenGL任务,WebEngine的渲染请求长时间拿不到CPU/GPU时间片,就会出现加载耗时极久的问题。 - Qt 5.14.2版本已知缺陷
该版本存在QWebEngine配合QWebChannel使用的已知BUG:将QObject注册到WebChannel后,本地HTML初始化阶段会偶发IPC通信阻塞,部分场景下阻塞时长可达数秒,该问题在Qt 5.15及后续版本中已被修复。 - 沙箱机制额外开销
QWebEngine默认开启的Chromium沙箱会对本地资源访问、跨进程IPC通信增加额外校验开销,在同时运行高负载OpenGL任务时,这部分开销会被进一步放大,拖慢页面加载速度。
内容的提问来源于stack exchange,提问作者Jakob Troidl
相关产品推荐
相关产品推荐

