原生App实际上是一种基于智可以手机本地操作系统如Android、IOS和Windows Phone并且用原生程序编写运行的第三方移动应使用程序。
H5是一系列制作网页互动效果的技术集合,即H5就是手机端的web页面。
纯原生的App的开发和H5网页App差距主要聚集在以下几个方面:
1、动画
动画有很多种,比方侧边栏菜单的滑入滑出、元素的响应动画、页面切换之间的过场等等,在H5之下的众多实现方法都没有办法达到纯原生的性可以。一般这些的话有几种不同的选择:css3动画、javascript动画、原生动画。
css3动画非常的耗费性可以,假如某一个元素使用到css3动画可可以还看不出来,但大面积或者过场用css3动画会让app低端手机体验非常差。最好的选择一般是通过框架调使用底层的动画,但不论怎样样等于在原来的代码上包上了一层,性可以还是不可避免的受到影响。
比方在一个新页面的载入上,假如调使用底层动画要考虑的问题有两个,一个是本身资源页面的渲染问题,另一个是远程数据的获取。即使是这些动画可以够很快的响应,但大量的css页面会导致渲染卡慢,滑入时可可以会有白屏/机器卡慢的现象。为理解决这些性可以问题又必需要使用到预加载或者模拟动画。即使是这样,滑入滑出的动画在低端的安卓机器上还是有很多问题,假如获取服务端数据解决的方式不合适,卡慢白屏的现象会更严重。具体看下面的数据获取方式。
2、获取服务端数据。
首先要接受的是,这里的数据获取都是在资源页面上异步完成的,由于只有这样才可以让这些资源页面完成预加载或者者渲染。但是异步拿到的数据在填入页面中时可可以会涉及DOM操作,众所周知,DOM操作非常耗费性可以,假如页面小还好,页面稍大数据略微复杂一点,频繁的DOM操作会导致显著的闪白。而且最重要的一点是,假如页面加载进来之后数据升级的速度太慢,也会让页面模板等待很长时间,对使用户体验又不友好,总不可以每次打开都像浏览器一样等待刷新是吧。
这个问题假如没有得到处理,H5开发是很难承担大规模数据的页面,在它们之中频繁切换更是难上加难,那么一定有人也会想到使用MVVM的方式,其实我也写过少量基于MVVM的H5app开发,相对来说它们获取数据和升级数据的方式更敏捷更科学,但写的过程中又要注意很多H5独有的问题,这些问题在下面的页面切换里来讲。
3、页面切换
上面我们看到了几种不错的实现方式,比方预加载和模拟动画,甚至有批量的预加载,批量的截图模拟动画等等,尽管看起来很友好处理了不少问题,但事实上假如页面足够多就会引发另一个问题——页面的生存周期。
试想一下,假如引导页或者者主页面缓存了5个子页面的资源,在跳转到响应的子页面时又会缓存这些子页面的下级页面资源,如此反复一定会占据大量内存使APP的体验下降。那么怎样知道那些页面是需要的,最多缓存多少页面,什么时候结束哪些页面的生存周期呢?在我使用过的很多H5 APP的框架里都没有对这些问题有一个完美的解答,因而在页面较多内容较多的app开发中可可以会因这些资源分配的问题降低性可以。
这时候我们回过头来再看看MVVM的数据加载问题,实际上不论哪个MVVM框架,写过的人都知道管理这种新型的前台代码最重要的问题是内存的问题,你既要保证代码写的足够优雅没有任何内存泄露问题,也要考虑到在页面生存周期结束时它们的控制器/页面资源能否得到释放,这对全局有没有什么影响,在多个请求时也要正当的分配资源,甚至是复使用这些父级页面传过来的缓存资源等等。较小的APP可可以并不会有这些问题,假如你想使用纯H5来开发大型app,这很可可以会白费你很多时间——而且结果还不会让你满意。
4、Android/iOS的区别
很多人都说纯H5 app开发一次编写就可以编译Android/iOS两种不同的APP,大大降低了成本。实际上这个观点本身就是值得怀疑的,假如你写过这类APP就可以明白我在说什么,它们既不省事,又存在很多BUG,调试时尤其繁琐。 举一个很简单的例子,Android和iOS在返回上一页的解决方式上就有显著的区别,iOS的顶部bar在全屏下怎么解决,Android机器出现smart bar怎么解决页面的布局,调使用底层硬件时怎么区分不同的场景等等,你需要写一个又一个机型和系统的判断,而后分别在Android和iOS下调试,最后你却发现这并没有卵使用,累的要死却什么没学到,只有一堆不知道什么时候会过时的经验。
现在做H5混合APP开发的人很多,但是纯H5却很年轻,很多问题都没有很好的处理,这几个是我在做这些APP时考虑最多的问题。最后说一个很少人注意到的H5优势,大家大谈H5 APP时都是快速开发、低成本、多平台等等,但我却觉得它和很多APP开发方式相比有一个不同之处——图文混合的排版。正是这些复杂多变的CSS样式耗费了性可以,但是它带来了排版的多样性,可以够细致到每一个字宽行高和风格的像素级解决,才是H5的优异之处。
H5的性可以很差,一般经常改的地方能使用H5。
比方论坛,咨询之类的,而且限制也是很大,很多效果是没办法做到的。GUI框架的WebView普遍是这样的。假如一个APP一律由H5来做(不太可可以,送审很可可以被拒),那么会显得非常卡。
使用iOS SDK(软件开发数据包),假如实现热升级是比较麻烦的。对于论坛,咨询这种板块,动不动就改版,做起来比较头疼,使用H5就很合适了。尤其在APP跨安卓和iOS的时候,这类板块假如直接使用H5,那么就很容易共使用。
即便两者之间有很大的区别,即便H5有一大堆的坑和问题,但是依旧不妨碍移动WEB无所不在,移动web是目前唯一的支持各种设施访问的平台,也是唯逐个个可供开发者发布移动应使用的平台,它将各种移动交互与PC系统任务有效的结合在一起。而原生app能充分利使用设施的特性,这一点是它得天独厚的优势。所以,对于一个对于决策者来说,假如你是要做一款体验更好的产品的话,那原生App不妨是最佳的选择。当然假如你想尽快让你的产品占住一席之地的话,力求快速开发、低成本、多平台等等的话,那技术还有很多问题都没有很好处理的H5,也是不错的选择。