【发布时间】:2012-05-24 05:58:53
【问题描述】:
我不明白,为什么 HTML/Web UI 响应比 WinForms/WPF/Android View/Native UI 慢?
与 Web UI 的 CSS、DOM、javascript 事件相比,Native UI 还具有样式、元素嵌套、事件。
事件响应时间包括:焦点改变、下拉、滚动、动画移动、动画大小调整等。
DOM 树插入/替换也很慢,在 android 4.0 的 google chrome 中插入 10000 个字符的 html 将花费 100 毫秒,而解析其模板仅花费 20 毫秒(jQuery 微模板)。
我发现减速事件响应的最大因素可能是:
- 并行 javascript 进程之间的 UI 锁定;
- 渲染引擎太慢,无法处理来自 javascript worker 的新 UI 更改消息,尤其是当浏览器渲染引擎忙于最后一次 UI 更新时(因为第 3 点);
- html 布局方式(例如:css 层叠、内联流布局、响应式布局等)可能会减慢部分 UI 更新速度。
- 解析 html/xml 需要很长时间,提示:Android 视图膨胀严重依赖于在构建时完成的 XML 文件预处理 (http://developer.android.com/reference/android/view/LayoutInflater.html)
HTML 和 CSS 标准的子集可能是 webview 应用程序开发的未来解决方案:
http://www.silexlabs.org/haxe/cocktail/
http://www.terrainformatica.com/htmlayout/
https://github.com/tombenner/nui
http://steelratstory.com/steelrat-products/wrathwebkit
http://trac.webkit.org/wiki/EFLWebKit
https://github.com/WebKitNix/webkitnix
http://qt-project.org/doc/qt-4.8/richtext-html-subset.html
http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/
一堆原生的UI标记语言:http://en.wikipedia.org/wiki/User_interface_markup_language
为什么没有简化的 HTML 标准和简化的 Webcore 布局引擎来替代这些原生 UIML?
也许我们可以在 kivy.org 项目中实现一个子集 html。
PC、安卓浏览器=应用线程+ui线程
iOS浏览器=应用线程+ui数据线程+ui硬件线程(CoreAnimation/OpenGL ES)
在ios浏览器中,应用线程可以直接调用ui硬件线程。
【问题讨论】:
-
您的思考基于哪些事实?你有数字吗?例子?您真的将网页与原生应用进行比较吗?
-
也许是因为 CSS?在我看来,风格应该像编程中的功能一样,一个风格类可以包含另一个类,但它们不应该级联ui元素之间的影响。
-
我试图投票关闭(但不能因为有赏金开放)这个问题太宽泛,将导致讨论,因为起始前提是错误的:“HTML/Web UI 响应比 WinForms/Native UI 慢”,所以问为什么并得到答案是没有用的。我知道一些非常快的网络应用程序和一些非常慢的表单应用程序。
标签: mobile user-interface web response native