作者:谷宝剑
链接:https://www.zhihu.com/question/264592475/answer/283852178
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

仅从渲染速度上看,我个人理解目前看还是原生渲染比较有优势。

原生的渲染方式:

view->layout->renderNode ->合成->GPU渲染

webview目前渲染方式:

html->dom tree ->render tree ->render layer + 栅格化 ->合成->gpu渲染。

一个简单的例子,更新一个textview的内容,对于Native来说,需要经历 layout->view->renderNode->合成->GPU,native layout算法比浏览器快,renderNode的更新只涉及textview。对于WebView需要经历:dom tree update->layout->render tree update ->render layer update ->render layer + 栅格化 ->合成->gpu渲染。经历的流程比较多,webview的layout相对原生也会慢一些,更新的节点就不止一个textview这么简单了,涉及更大的栅格化更新。 Native滚动和局部刷新上做的比浏览器好,长列表更是秒杀Webview。

从整体用户体验上看,react-native, weex 这些比webview机制上要有优势。

webview layout->render tree ->渲染是串行执行的,木有batch机制,频繁更新样式会卡顿。所以才有react这样的virtual-dom方案来解决这个batch问题,但串行的机制是木有变的。

react-native weex方案线程分为: JS Thread、DOM Thread、Native Main Thread. JS的执行在JSThread,Dom Layout在Dom Thread,渲染在 Main Thread,并行化做的非常好;天然的batch机制,频繁更新不会导致频繁layout。尤其是Weex,小巧玲珑,做的更好。来个真实的视频大家看区别:

正常List对比普通长列表对比

压力测试长列表压力测试

即使手机性能再提升十倍,只是WebView的应用场景更大一些,始终无法取代原生的高性能优势。从PC端看,QQ 百度网盘等采用duilib方案的发展历程也能印证这一点。

 
https://www.zhihu.com/question/264592475
 

泻药!

不得不说一个事实,跟谁近,跟谁亲!

跟谁近?从源代码到渲染,经过了哪些环节。webview本身其实更像一个容器或者盒子,它是装在在OS里面的一个套件而已,程序(HTML+js)要到OS必须走出这个盒子, 多走了几步,自然比人家慢一些,而且关键还不是多走一步。

跟其他比起来,前端技术栈的性能,简直不可直视。UI层,玩不过native;服务端,执行效率其实没优势(比如高运算量的),优势仅限于异步IO(go和py看了一眼node,跑自己的代码去了)。

RN不是非常熟悉,把 js 的数据结构 map 成 native 的数据结构吧(JNI & JSC?),执行逻辑还是在js线程上。

不知道有一个问题解决了没:JS TO NATIVE 过程中,需要花费大量的时间来做mapping,这点上,如果复杂一点的UI,首次渲染时间的问题怎么破~~~

在现有模式下,不论浏览器怎么优化,也不能跟native媲美,终于有人提出了大胆的假设,在浏览器上跑二进制吧:WebAssembly?

emmmmmmmm, 现在谈这个是早是晚,不清楚。

作者:郑小松
链接:https://www.zhihu.com/question/264592475/answer/283408594
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

UI系统的核心在于渲染机制:效率与生命--原生渲染为何比webview渲染快?的更多相关文章

  1. 高级UI晋升之View渲染机制(二)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 优化性能一般从渲染,运算与内存,电量三个方面进行,今天开始说聊一聊Android ...

  2. UGUI的优点新UI系统三效率高效果好

    UGUI的优点新UI系统三效率高效果好 通过对批处理(batching).纹理图集(texture atlasing)和新的canvas组件的支持,新UI系统提供了一个经过优化的解决方案,使得开发者添 ...

  3. Android渲染机制和丢帧分析

    http://blog.csdn.net/bd_zengxinxin/article/details/52525781 自己编写App的时候,有时会感觉界面卡顿,尤其是自定义View的时候,大多数是因 ...

  4. Unity4.6新UI系统初探(uGUI)

    一.引言 Unity终于在即将到来的4.6版本内集成了所见即所得的UI解决方案(视频).事实上从近几个版本开始,Unity就在为这套系统做技术扩展,以保证最终能实现较理想的UI系统.本文试图通过初步的 ...

  5. 理解WebKit和Chromium: Chromium WebView和Chrome浏览器渲染机制

    转载请注明原文地址:http://blog.csdn.net/milado_nju ## 数据对比 前面介绍过Chromium WebView的时候,说过有关ChromiumWebView同Chrom ...

  6. ASP.NET Core的路由[2]:路由系统的核心对象——Router

    ASP.NET Core应用中的路由机制实现在RouterMiddleware中间件中,它的目的在于通过路由解析为请求找到一个匹配的处理器,同时将请求携带的数据以路由参数的形式解析出来供后续请求处理流 ...

  7. iOS 视图,动画渲染机制探究

    腾讯Bugly特约作者:陈向文 终端的开发,首当其冲的就是视图.动画的渲染,切换等等.用户使用 App 时最直接的体验就是这个界面好不好看,动画炫不炫,滑动流不流畅.UI就是 App 的门面,它的体验 ...

  8. 路由系统的核心对象——Router

    路由系统的核心对象--Router ASP.NET Core应用中的路由机制实现在RouterMiddleware中间件中,它的目的在于通过路由解析为请求找到一个匹配的处理器,同时将请求携带的数据以路 ...

  9. (转)[Unity3D]UI方案及制作细节(NGUI/EZGUI/原生UI系统) 内附unused-assets清除实例

    转载请留下本文原始链接,谢谢.本文会不定期更新维护,最近更新于2013.09.17.   http://blog.sina.com.cn/s/blog_5b6cb9500101bplv.html   ...

随机推荐

  1. PyInstaller把Python脚本打包成可执行程序教程

    一.说明 一直以来都有把.py文件打包成.exe文件的想法,但总是不够强烈,每次拖着拖着就淡忘了. 昨天帮硬件部门的同事写了个脚本,然后今天下午的时候,他问有没有办法把脚本打包成可执行文件,这样方便以 ...

  2. [转帖]什么是IOC(控制反转)、DI(依赖注入)

    什么是IOC(控制反转).DI(依赖注入) 2018-08-22 21:29:13 Ming339456 阅读数 20642   原文地址(摘要了部分内容):https://blog.csdn.net ...

  3. APS.NET MVC + EF (00)---C#基础

    命名参数 命名参数是把参数附上参数名称,这样在调用方法的时候不必按照原来的参数顺序填写参数,只需要对应好参数的名称也能完成方法调用. static void Main(string[] args) { ...

  4. mvc_1_ex_stu_manage

    Mvc第一遍结束综合练习:带权限的学生管理系统程序的设计应该根据功能来进行.先来设想一下本练习的程序功能:学生信息管理.登录用户区分权限.出错应该给出提示.由此可以设想,完成以后的程序是下图的样子:主 ...

  5. Unity PhysicsScene测试

    应该是unity 2018.3中加入的功能,对象可以放置于不同的物理场景中. 一个Scene对应一个物理场景(PhysicsScene),若想放入独立的物理场景测试创建一个Scene即可.见下图gif ...

  6. [转]解决ubuntu16.04 ‘E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) ’ 问题

    当运行sudo apt-get install/update/其他命令时,会出现如下提示: E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不 ...

  7. 题解 POJ 2559【Largest Rectangle in a Histogram】(单调栈)

    题目链接:http://poj.org/problem?id=2559 思路:单调栈 什么是单调栈? 单调栈,顾名思义,就是单调的栈,也就是占中存的东西永远是单调(也就是递增或递减)的 如何实现一个单 ...

  8. kylin2.4.1订单案例详细构建流程

    一.Hive订单数据仓库构建: hive表创建可以在命令行中直接完成,也可以在Hue中完成,本文在Hue中的完成,如下图: 下文的样例文本文件下载地址:https://files-cdn.cnblog ...

  9. kvm第一章--概念

  10. vue学习整理

    1.webpack+vue自定义路径别名 vue-cli 用的是webpack,也可以使用webpack自定义别名这个功能,自定义别名这个功能当你在多层文件夹嵌套的时候不必一层一层找路径,直接使用自定 ...