「技术」如何快速开发一款APP?( 二 )


然后React-Native是使用React的DSL然后去渲染出Native的组建的这么方案 。 对于我们来说 , 首先是需要对于Native来说是需要学习前端开发的一些语言 , 但是他因为能使用前端开发的语言 , 绕过WebView同时又提供了一些动态化的能力 , 所以它的实际体验起来是像是与Native一样流畅 。 但是在这个问题上 , 又因为他为了兼容两端的特性 , 所以导致了他在处理的过程中有发生了非常多的问题 , 那么我们在这种问题的解决方案上投入非常多的精力 , 但是解决起来同时也不是非常的顺手 。 但是他的动态性却是我们非常看重的一个东西 , 因为首先它基于它的前端的和模型精简成了一个就flex这么一种模型 。 然后抛弃了原先的一些layout的一些系统的layout的管理工具 。 所以在这种阶段上 , RN是我们延伸出了非常多方案 , 淘宝这边也有像Weex这样的一个方案 , 然后最近Google发布了Flutter这个方案 , 其实算是彻底颠覆了原先的Native的开发模式 。 其实它对于我们来说 , 全从头到脚都是新的 。
像在Android上在IOS上都是基于canvas的一个从Native的角度去看 , 它是基于canvas的方案 , 他在canvas上进行绘制 , 然后同时去接管canvas的一些事件 , 然后在他自己的一个单引擎上去进行执行一些渲染的动作和响应 , 响应用户交互的一些请求 。 对Flutter来说的话 , 首先我们要去学习它的dart语言 , 这是第一个成本 。 dart语言学完之后 , 我们还要去了解它整个Flutter引擎的工作流 , 这是第二个成本 。 之后 , 它对于动态性的支持 , 从官方正式的层面来说 , 目前是处于一种放弃的状态 。 它并不打算说有动态下发的一种能力 , 它基于skia引擎的方案 , skia因为是一个性能良好的渲染引擎 , 所以它的用户体验也是非常不错 。 这是我们这4种能力的一个差别 , 这里是4个能力的对比 。 我们看一下 , 基于H5的一个方案的话 , 提供了这么一个容器加离线包的一个架构 。
「技术」如何快速开发一款APP?
本文插图
在传统的H5页面里面 , 我们只是一个在客户端本身接了一个WebView , 然后提供了几个JS的API , 往后希望我们的html页面再下载到我们本地的时候 , 既能跟服务端进行通信 , 又能获得一些本地的能力 。 但是我们知道它的渲染性能 , 还有像首屏的白屏那种问题都是没有解决的 , 所以说我们为了解决这些问题 , 使得它的体验更加靠近native体验的时候 , 我们就提供了其当前的这种架构 。 我们在这边使用 , 首先第1个解决的问题是在Android上使用UC内核的这么一个方案 , 因为uc内核对于我们来说 , 他能去铺平各个不同Android的版本 , 各种不同机型上的外部必有的差异的一些问题 , 这是我们前端领域中最容易碰到的一个浏览器的兼容问题 。
我们在解决这个问题的基础之上 , 希望赋予容器更多的能力 , 我们首先要去统一掉容器的JS bridge的性能 。 这是当中这一层 , 第3层绿色的这一层的方案 。 我们在这一层去铺平之后 , 那么对于前端来说 , 他只剩下他的业务细节和具体的业务流程 。 我们的容器有包含了一个离线包的拉取 , 离线包对于我们来说是一个解决首屏渲染问题最大的一个抓手 。 我们使用把离线包的整个能力去集合在容器里面的时候 , 搭配我们的像MDS的一个我们这边叫做MDS的一个发布平台 。
搭配发布平台的话 , 我们就能很快的发布我们的离线包到用户的手机上 , 那么在用户去打开我们页面的时候 , 并不需要过多的时间就可以快速的打开我们的页面 。 那么离线包的发布和离线包的更新都在我们的管控之下 。 同时我们可以基于一些算法 , 快速的先去预测用户是否需要快速的打开这项业务 , 如果需要打开这样业务 , 可以提前传到用户的手机上 , 然后用户在打开业务的时候 , 就能快速的使用离线包了 。


推荐阅读