QtWebEngine性能问题
1. 概述
Qt的Qt WebEngine模块是基于Chromium项目,但是本人在使用QWebEngineView进行Web端的三维渲染(WebGL)时,经过测试发现性能比不上Chrome。查阅了一些资料,记录一下对这个问题的尝试。
2. 详论
2.1. 图形属性设置
在Chrome中通过地址chrome://gpu查看使用的GPU的情况:

而在Qt的QWebEngineView中同样打开chrome://gpu查看:

可以看到两者的GL_RENDERER是不一样的,原生的Chrome采用的是ANGLE渲染的,而不是像Qt WebEngine那样采用显卡驱动中OpenGL4.6渲染。
根据参考[1],ANGLE是Google的一个开源项目,目的是将OpenGL ES API调用映射到 Vulkan、桌面OpenGL、OpenGL ES、Direct3D 9 和 Direct3D 11中。文中还提到了ANGLE是Windows平台上Google Chrome和Mozilla Firefox的默认WebGL后端:

那么问题可能在于这里,一般会认为使用D3d的性能比OpenGL要高。按照参考[2]中所述,我们可以将Qt的图形属性设置成ANGLE:

具体的代码为:
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
//...
QApplication a(argc, argv);
//...
根据参考[2]中所述,这样会让ANGLE自动选择最合适的图形接口。这时通过chrome://gpu查看如下:

这时的ANGLE已经启用了,并且调用了D3d11。不过很可惜,经过测试,我这边性能并没有提高,并且在后台会报错。
更进一步的,参考[2]中还提到了可以通过环境变量QT_ANGLE_PLATFORM来选择d3d11、d3d9或者warp,来选择具体的图形接口实现。可惜这三种配置对我都没什么效果。
2.2. 硬件加速设置
参考[3]和参考[4]提到了Chromium有一些命令行参数,用于进行硬件加速。例如"--ignore-gpu-blacklist", "--enable-gpu-rasterization", "--enable-native-gpu-memory-buffers", "--num-raster-threads=4"。参考[5]中提到了具体的设置方法:
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--ignore-gpu-blacklist");
//...
QApplication a(argc, argv);
//...
但是很可惜,经过测试,我这边性能还是并没有提高。
2.3. Qt6
在Qt的一篇官方博客,也就是参考[6]中,提到了一些信息:


似乎目前Qt的ANGLE并没有真正渲染到D3D上,相应的硬件加速也没有作用。如果可以,尽量跟进Qt6的最新版,可能会解决这个性能问题。
3. 参考
- ANGLE - Almost Native Graphics Layer Engine
- Qt for Windows - Requirements
- Investigate Chromium GPU flags
- Enable hardware acceleration with QtWebEngine
- Setting arguments for QtWebEngineProcess
- Qt WebEngine in Qt 6
- Qt5: can WebGL work with ANGLE on Windows via QtWebEngine?
- qt QWebEngineView 和 quick 渲染的问题的解决
QtWebEngine性能问题的更多相关文章
- QtWebkits如何向QtWebEngine过渡
QtWebkits如何向QtWebEngine过渡 1. 前言 很遗憾,QtWebkits在Qt5.6以上版本被淘汰了,对于这个接口良且和其他类例如QWebFrame完美结合的组件就这么没了,我只能表 ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- 03.SQLServer性能优化之---存储优化系列
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 概 述:http://www.cnblogs.com/dunitian/p/60413 ...
- SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]
目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...
- 【前端性能】高性能滚动 scroll 及页面渲染优化
最近在研究页面渲染及web动画的性能问题,以及拜读<CSS SECRET>(CSS揭秘)这本大作. 本文主要想谈谈页面优化之滚动优化. 主要内容包括了为何需要优化滚动事件,滚动与页面渲染的 ...
- Web性能优化:What? Why? How?
为什么要提升web性能? Web性能黄金准则:只有10%~20%的最终用户响应时间花在了下载html文档上,其余的80%~90%时间花在了下载页面组件上. web性能对于用户体验有及其重要的影响,根据 ...
- Web性能优化:图片优化
程序员都是懒孩子,想直接看自动优化的点:传送门 我自己的Blog:http://cabbit.me/web-image-optimization/ HTTP Archieve有个统计,图片内容已经占到 ...
- C#中那些[举手之劳]的性能优化
隔了很久没写东西了,主要是最近比较忙,更主要的是最近比较懒...... 其实这篇很早就想写了 工作和生活中经常可以看到一些程序猿,写代码的时候只关注代码的逻辑性,而不考虑运行效率 其实这对大多数程序猿 ...
随机推荐
- Zookeeper 的典型应用场景 ?
Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员 可以使用它来进行分布式数据的发布和订阅. 通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watch ...
- JavaScript的一些实用操作(逐步添加)
1.js代码简洁高效计时 console.time('a'); //记录时间开始 ... console.timeEnd('a'); //记录时间结束 a: 12857.81103515625ms / ...
- Python包装器
def func(): print("func body") def f1(arg): print("f1:",arg) def wrapper(b): pri ...
- poll() 方法和 remove() 方法的区别?
poll() 和 remove() 都是从队列中取出一个元素,但是 poll() 在获取元素失败 的时候会返回空,但是 remove() 失败的时候会抛出异常.
- 在 Spring 中如何注入一个 java 集合?
Spring 提供以下几种集合的配置元素:类型用于注入一列值,允许有相同的值.类型用于注入一组值,不允许有相同的值.类型用于注入一组键值对,键和值都可以为任意类型.类型用于注入一组键值对,键和值都只能 ...
- vue中的全局组件和局部组件的应用
1全局组件 vue框架: https://www.vue-js.com/?tab=all 组件树 solt 内置分发组件 应用见局部组件 2局部组件 2.1局部组件的使用:生子 - 挂子 - 用子 & ...
- scrapy--使用案例
1.scrapy框架 1.1 安装scrapy pip3 install wheel 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twis ...
- python 保存图片被截断
运行如下代码发现横坐标属性值被截断 plt.savefig('D:\\project\\python\\zhifangtu\\a.png') plt.show() plt.savefig('D:\\p ...
- 【C语言】预处理、宏定义、内联函数 _
一.由源码到可执行程序的过程 1. 预处理: 源码经过预处理器的预处理变成预处理过的.i中间文件 1 gcc -E test.c -o test.i 2. 编译: 中间文件经过编译器编译形成.s的 ...
- html简单响应式滚动条置顶
简单响应式滚动条置顶 一般的,让页面出现滚动条的常见方法有: overflow:auto||overflow:scroll 或者overflow-x水平滚动条和overflow-y垂直滚动条 那么现在 ...