Mobile 为什么HTML/Web UI响应比本机UI慢?

Mobile 为什么HTML/Web UI响应比本机UI慢?,mobile,user-interface,web,response,native,Mobile,User Interface,Web,Response,Native,我不明白,为什么HTML/Web UI响应比WinForms/WPF/Android View/Native UI慢 与Web UI的CSS、DOM和javascript事件相比,本机UI还具有样式、元素嵌套和事件 事件响应时间包括:焦点更改、下拉、滚动、动画移动、动画大小调整等 DOM树的插入/替换也很慢,在android 4.0的google chrome中插入10000个字符的html需要100毫秒,而解析其模板只需要20毫秒(jQuery微模板) 我认为,减速事件响应的最大因素可能是:

我不明白,为什么HTML/Web UI响应比WinForms/WPF/Android View/Native UI慢

与Web UI的CSS、DOM和javascript事件相比,本机UI还具有样式、元素嵌套和事件

事件响应时间包括:焦点更改、下拉、滚动、动画移动、动画大小调整等

DOM树的插入/替换也很慢,在android 4.0的google chrome中插入10000个字符的html需要100毫秒,而解析其模板只需要20毫秒(jQuery微模板)

我认为,减速事件响应的最大因素可能是:

  • 并行javascript进程之间的UI锁定
  • 渲染引擎太慢,无法处理来自javascript工作人员的新UI更改消息,尤其是当浏览器渲染引擎忙于最后一次UI更新时(由于第3点)
  • html布局方法(例如:css级联、内联流布局、响应布局等)可能会减慢部分UI更新
  • 解析html/xml需要很长时间,这是一个提示:Android视图膨胀严重依赖于在构建时完成的xml文件预处理()
  • HTML和CSS标准的子集可能是webview应用程序开发的未来解决方案:

    一堆本机UI标记语言:

    为什么没有一个简化的HTML标准和一个简化的Webcore布局引擎来取代这些原生UIML

    也许我们可以在kivy.org项目中实现一个子集html

    PC,android浏览器=应用程序线程+ui线程

    iOS浏览器=应用程序线程+ui数据线程+ui硬件线程(CoreAnimation/OpenGL ES)


    在ios浏览器中,应用程序线程可以直接调用ui硬件线程。

    如果Web ui完全由客户端的JavaScript实现,那么与WinForms/Native ui的区别将很小

    但是,在大多数情况下,Web UI会向Web服务器触发一些Web请求,然后它必须通过以下步骤来实现与WinForms/本机应用程序相同的效果:

  • 向Web服务器发送HTTP请求(GET/POST/…)
  • Web服务器是侦听一个或多个端口的可执行文件(以外部应用程序或服务的格式)。当它接收到请求时,解析它,并找到Web应用程序
  • Web服务器在应用程序内执行后端(服务器端)逻辑。
    Web应用程序(如ASP.NET)是预编译的。此步骤的时间复杂度可能非常接近Windows应用程序
  • Web服务器将结果呈现为标记并将其发送回客户端
  • 客户端(浏览器)解析结果并在必要时更新UI。 网页中的控件/图像/其他资源在浏览器中呈现通常比Windows应用程序呈现其显示所需的时间稍长
  • 即使Web服务器是本地的,也不能简单地忽略数据解析/格式化/传输所产生的成本

    另一方面,具有WinForms/Native UI的应用程序通常维护一个消息循环,该消息循环处于活动状态并托管在机器代码中。UI请求通常只是触发消息表中的查找,然后执行后端逻辑(上面的步骤2)
    当它返回结果并更新UI时,它可以是简单的二进制数据结构(不需要在标记中),并且不回复要呈现到屏幕上的其他应用程序(浏览器)

    最后,WinForms/本机应用程序通常可以完全控制维护多个线程以逐步更新UI,而Web应用程序无法直接控制该类型的服务器端资源

    更新
    当我们比较Web应用程序和使用相同Web服务的Windows/WPF(或本机)应用程序以部分更新其UI时

    两个UI应以可忽略的速度差进行响应和刷新。二进制和脚本执行以响应和刷新UI之间的实现差异几乎为零。
    两个UI都不需要重建控件树并刷新整个外观。在相同的条件下,它们可以具有相同的CPU优先级、内存/虚拟内存缓存,以及进程/线程级别上相同/关闭的内核对象和GDI句柄数。
    在这种情况下,正如您所描述的,应该几乎没有视觉上的差异

    更新2:
    实际上,Web和Windows应用程序中的事件处理机制是相似的。DOM有事件冒泡。类似地,MFC具有命令路由;Winforms有它的事件流;WPF有事件冒泡和隧道等。其思想是,UI事件可能并不严格属于一个控件,而控件可以通过某种方式声明事件已“处理”。对于标准控件,焦点更改、文本更改、下拉、滚动事件对于Web和Windows应用程序都应该具有类似的客户端响应时间。

    从性能上看,渲染是最大的区别。Web应用程序对“设备上下文”的控制有限,因为网页由外部应用程序(Web浏览器)托管。Windows应用程序可以使用GPU资源(如WPF)实现动画效果,并通过部分刷新“设备上下文”加快渲染速度。这就是为什么HTML5Canvas让Web开发人员兴奋不已,而Windows游戏开发人员已经使用OpenGL/DirectX超过10年了

    更新3:
    每个Web浏览器引擎()都有自己的呈现DOM、CSS的实现;和(CSS)选择器的实现。移动网页中的元素并调整其大小会改变DOM、CSS(树)设置。选择器和渲染性能在很大程度上取决于Web浏览器引擎

  • UI操作可能会使选择器执行不必要的步骤来更新UI
  • 网页没有通知浏览器进行部分呈现的控件
  • 这使得JavaScript控件(一些jQuery UI、,