- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人能解释一下为什么 TWebBrowser 控件在 Delphi 的所有 XE 版本(包括 XE5 和可能的 XE6)上运行如此缓慢?要对此进行测试,您需要创建一个新的 Delphi 项目并将 TWebBrowser 控件放入其中。在表单展示事件中,导航到此网站:
http://ie.microsoft.com/testdrive/Performance/setImmediateSorting/Default.html
请在 Windows 7 或更高版本上进行测试。导航完成后,运行 setImmediate test 并观察结果。完成测试需要大量时间。完成此操作大约需要一分钟。
当您打开真正的 Internet Explorer 浏览器并执行相同操作时 - 测试将立即完成(约 200 毫秒)。
一些额外的奇怪信息:
当您在旧版本的 Delphi(准确地说是 Delphi 7)上重新创建此过程时,Web 控件会以应有的速度运行,并且测试会立即完成。但是 HTML5 速度测试仍然会很慢(此页面上的替代测试)。
另一个奇怪的事情是,在 C++ Builder 上可以看到相同的缓慢行为,但在 Visual Studio 产品中却看不到。微软是不是故意放慢了 Embarcadero 产品中的 TWebBorwser 的速度??我无法相信这一点。
我试图用不同的方法来克服这个问题,例如:
最佳答案
我还可以看到所描述的行为(在您的原始帖子和评论中)。我有一些想法,但不一定有答案。
人们应该预料到 WebBrowser 控件和 IE 之间的性能会有一些差异,部分原因是您的 Delphi 应用程序需要内置对 IE 开箱即用支持的某些功能/API 的支持。
例如,WebBrowser 控件触发与 tabbed browsing 相关的通知。 (旧的,但相关),但它本质上并不处理这些通知或更新 UI。您必须响应通知并自己绘制选项卡。默认情况下,IE 是硬件加速的,并使用某些可能不被 Delphi 的 VCL(出于资源/性能)直接支持的 Windows API。 (硬件加速可以解释您已经注意到的一些性能差异。)
(而且,作为记录,我不相信 IE 和 WebBrowser 控件之间的差异列表被记录下来。我当然不记得在投资组合中看到过一个。)
此外,各种功能控件的默认值在 IE 和托管 WebBrowser 控件的应用程序之间有所不同。部分原因源于这样一种想法,即 IE 需要强调性能而不是兼容性,而应用程序通常需要强调兼容性而不是性能。您不妨查看 feature control reference查看您是否需要为您的应用启用其他 FCK。
其次,你的循环很紧,也许太紧了。您有一个请求堆积在较早的请求上,即使使用 setImmediate,您也没有真正留下太多的处理空间。 (IIRC,我们真的不应该为 setInterval 使用任何小于 250 毫秒的时间,而不会有因请求数量过多而导致性能下降的风险。) setImmdiate 中的评论引用页面提供了一些指导,这篇关于 requestAnimationFrame 的文章也是如此。 .
拖动窗口似乎可以提高性能的原因之一可能是由于窗口拖动重绘请求的优先级。它们可能会迫使您的循环保持足够长的时间(甚至中断)以允许其他事件进行处理。很难说不使用调试器跟踪系统。
您是否曾经需要将 application.processMessages() 添加到您的 Delphi 应用程序中,以便让系统有机会处理您已经分配的工作?鉴于您的测试性质,类似的需求可能会发挥作用。
性能测试和计时是一件棘手的事情。您需要确保测试不会强加太多开销,以免干扰您尝试执行的实际工作。
最后,当页面加载到您的项目中时,还有一些关于页面的文档模式的问题。当我第一次开始弄乱您的示例时,我无法让 project4 在 IE5 怪癖模式以外的任何模式下加载 slowtest.html(众所周知的慢)。以下是最终开始为我工作的内容:
<!DOCTYPE html>
<!-- saved from url=(0023)http://www.contoso.com/ -->
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<script type="text/javascript">
...
关于performance - TWebBrowser 仅在 Delphi 中控制性能缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24994040/
我的应用程序使用加载网页的 TWebBrowser。问题是,关闭包含 TWebBrowser 的表单后,使用的内存没有释放。如果我打开和关闭表单,内存只会不断增加。 看到一些关于调用 SetProce
有没有人成功地让 StreetView 显示在 TWebBrowser 控件中? 我想以编程方式构建一个 Url 并让它以简单的 Delphi 形式显示。 到目前为止,这是我对该表格的了解: unit
我正在尝试在控制台/服务类型的应用程序(没有任何窗口)中使用 TWebBrowser。 Navigate 确实在做一些事情,但它从不调用 onDocumentComplete。还有其他方法可以访问某个
我有 TWebBrowser 组件(Delphi 7),并且我从内存流加载了 HTML。页面的 HTML 代码加载良好,页面显示正确。但是,当我尝试单击任何带有地址(href 属性值)的超链接(例如“
两个简单的问题 如何将焦点设置到 TWebBrowser?这样鼠标滚轮就可以滚动显示,而不必先在 TWebBrwoser 显示区域内单击。它有一个不执行任何操作(或似乎不执行任何操作)的 setfoc
我们有 HTML: 当点击链接时 OnNewWindow2被解雇: procedure TForm1.WebBrowser1NewWindow2(Sender: TObject; var ppD
我在更改 twebbrowser 中文本框的值时遇到一些困难。我已经尝试过WebBrowser1.OleObject.Document.getElementById('verification_con
我在 Delphi 应用程序中使用 TWebbrowser 组件,我以编程方式加载其内容: (aWebBrowser.Document as IPersistStreamInit).
我使用 TWebBrowser 来显示 Google map 。问题是它在加载 map 时阻塞了主 ui 线程。是否可以在单独的线程中更新 map ? 编辑: RRUZ你是对的,TWebBrowser
使用 TWebBrower 如何获取撤消或重做状态(CanUndo、Can Redo)? 这总是错误的? Undo1.Enabled := HTMLDocument2Ifc.queryComman
我使用 TWebBrowser 作为用户的编辑器 GUI。我希望能够将 Web 控件插入到文档中。一个简单的例子是复选框。 (如果需要的话我可以详细说明原因)。当我第一次组装 HTML 文档(及其 S
我在 Delphi 10.2 中使用 TWebBrowser 组件,该组件是从 SHDocVW_TLB 类型库导入的。 我想使用此网络浏览器浏览本地文件和受信任环境中的文件。但我注意到,由于安全限制,
来自这个答案 CoInternetIsFeatureEnabled in Delphi2010 有谁知道如何停止滴答声。当我将它放入单独的 pas 文件时,这在 Delphi XE 中似乎不起作用。有
我有一个框架,其中包含一个 TWebBrowser 组件并被我的一些应用程序使用,我需要禁用 TWebBrowser 的默认弹出菜单。 我通过使用 TApplicationEvents 组件及其 On
我正在将 HTML 本地文件加载到 TWebBrowser如下: procedure TForm1.FormCreate(Sender: TObject); begin WebBrowser1.N
如何在 firemonkey 中读取 TWebBrowser 中打开页面的源代码(RadStudio XE7 - Firemonkey for Android) 在 VCL我只是用了WebBrowse
如何知道TWebBrowser是否已经完成页面下载?我的问题是:我不知道我的页面何时完全下载以便可以显示。 我向网络浏览器请求一页,并且我只想在该页面完全下载后才显示响应。 最佳答案 您可以尝试处理
我有一个表单可以接受要拖放的文件,还有一个 TWebBrowser 控件放置在同一个表单上的 TPanel 控件上。 最主要的是,当我在窗体上放置一个文件时,它的路径被添加到一个 TEdit 控件中。
我正在使用以下单元通过显示在非模式对话框中的 TWebBrowser 来显示和打印 HTML 代码。在我的生产程序中,以下代码在 Windows-XP 下工作,但在 Windows-7 下失败(错误消
场景: 带有两个 TTabSheets 的 TPageControl 不可见标签页上的 TWebBrowser WebBrowser->在表单创建期间调用的导航 如果用户只是运行表单并退出,则在应用程
我是一名优秀的程序员,十分优秀!