h5做app和原生app有什么区别?

Python015

h5做app和原生app有什么区别?,第1张

1.H5的性能很差,一般经常改的地方可以用H5,比如论坛,咨询之类的,而且限制也是很大,很多效果是没办法做到的。GUI框架的WebView普遍是这样的。如果一个APP全部由H5来做(不太可能,送审很可能被拒),那么会显得非常卡。

2.用iOS SDK,如果实现热更新是比较麻烦的。对于论坛,咨询这种模块,动不动就改版,做起来比较头疼,用H5就很合适了。尤其在APP跨安卓和iOS的时候,这类模块如果直接用H5,那么就很容易共用。

H5网页App开发和纯原生的App的差距主要聚集在以下几个方面:

1、动画

动画有很多种,比如侧边栏菜单的滑入滑出、元素的响应动画、页面切换之间的过场等等,在H5之下的众多实现方法都没有办法达到纯原生的性能。一般这些的话有几种不同的选择:css3动画、javascript动画、原生动画。

css3动画非常的消耗性能,如果某一个元素用到css3动画可能还看不出来,但大面积或过场使用css3动画会让app低端手机体验非常差。最好的选择一般是通过框架调用底层的动画,但不管怎么样等于在原来的代码上包上了一层,性能还是不可避免的受到影响。

比如在一个新页面的载入上,如果调用底层动画要考虑的问题有两个,一个是本身资源页面的渲染问题,另一个是远程数据的获取。即便是这些动画能够很快的响应,但大量的css页面会导致渲染卡顿,滑入时可能会有白屏/机器卡顿的现象。为了解决这些性能问题又必须要用到预加载或模拟动画。即便是这样,滑入滑出的动画在低端的安卓机器上还是有很多问题,如果获取服务端数据处理的方式不合适,卡顿白屏的现象会更严重。具体看下面的数据获取方式。

2、获取服务端数据

首先要接受的是,这里的数据获取都是在资源页面上异步完成的,因为只有这样才能让这些资源页面完成预加载或者渲染。但是异步拿到的数据在填入页面中时可能会涉及DOM操作,众所周知,DOM操作非常消耗性能,如果页面小还好,页面稍大数据稍微复杂一点,频繁的DOM操作会导致明显的闪白。而且最重要的一点是,如果页面加载进来之后数据更新的速度太慢,也会让页面模板等待很长时间,对用户体验又不友好,总不能每次打开都像浏览器一样等待刷新是吧

这个问题如果没有得到解决,H5开发是很难承担大规模数据的页面,在它们之中频繁切换更是难上加难,那么肯定有人也会想到用MVVM的方式,其实我也写过一些基于MVVM的H5app开发,相对来说它们获取数据和更新数据的方式更敏捷更科学,但写的过程中又要注意很多H5独有的问题,这些问题在下面的页面切换里来讲。

3、页面切换

上面我们看到了几种不错的实现方式,比如预加载和模拟动画,甚至有批量的预加载,批量的截图模拟动画等等,虽然看起来很友好解决了不少问题,但事实上如果页面足够多就会引发另一个问题——页面的生存周期。

试想一下,如果引导页或者主页面缓存了5个子页面的资源,在跳转到响应的子页面时又会缓存这些子页面的下级页面资源,如此反复肯定会占据大量内存使APP的体验下降。那么怎么知道那些页面是需要的,最多缓存多少页面,什么时候结束哪些页面的生存周期呢?在我用过的很多H5APP的框架里都没有对这些问题有一个完美的解答,因此在页面较多内容较多的app开发中可能会因这些资源分配的问题降低性能。

这时候我们回过头来再看看MVVM的数据加载问题,实际上不管哪个MVVM框架,写过的人都知道管理这种新型的前端代码最重要的问题是内存的问题,你既要保证代码写的足够优雅没有任何内存泄露问题,也要考虑到在页面生存周期结束时它们的控制器/页面资源是否得到释放,这对全局有没有什么影响,在多个请求时也要合理的分配资源,甚至是复用这些父级页面传过来的缓存资源等等。较小的APP可能并不会有这些问题,如果你想用纯H5来开发大型app,这很可能会浪费你很多时间——而且结果还不会让你满意。

4、Android/iOS的区别

很多人都说纯H5app开发一次编写就能编译Android/iOS两种不同的APP,大大降低了成本。实际上这个观点本身就是值得怀疑的,如果你写过这类APP就能明白我在说什么,它们既不省事,又存在很多BUG,调试时尤其繁琐。举一个很简单的例子,Android和iOS在返回上一页的处理方式上就有明显的区别,iOS的顶部bar在全屏下怎样处理,Android机器出现smart bar怎样处理页面的布局,调用底层硬件时怎样区分不同的场景等等,你需要写一个又一个机型和系统的判断,然后分别在Android和iOS下调试,最后你却发现这并没有卵用,累的要死却什么没学到,只有一堆不知道什么时候会过时的经验。

现在做H5混合APP开发的人很多,但是纯H5却很年轻,很多问题都没有很好的解决,这几个是我在做这些APP时考虑最多的问题。最后说一个很少人注意到的H5优势,大家大谈H5APP时都是快速开发、低成本、多平台等等,但我却觉得它和很多APP开发方式相比有一个不同之处——图文混合的排版。正是这些复杂多变的CSS样式消耗了性能,但是它带来了排版的多样性,能够细致到每一个字宽行高和风格的像素级处理,才是H5的优异之处。

1、用Xcode新建一个工程Bundle identifier不要和手机中已有的的APP重复,然后用自己的证书打包出ipa文件。

2、获取mobileprovision文件先将一中(用自己证书打包的)ipa包进行解压。选中ipa包,右键 ->打开方式 ->解压,解压ipa解压完之后会生成一个Payload文件夹,点进去在文件上右键 ->显示包内容。mobileprovision文件将图中标记的文件拷贝到桌面(或者其他地方)后面要用。以下第三、四、五步中如果之前已经安装过可以跳过。

3、安装Homebrew在终端先后执行下面2命令行安装,等待进度完毕 xcode-select --installruby

4、安装ruby在终端执行下面命令安装ruby,等待进度完毕(输完密码可能在较短时间无反应) brew install ruby

5、安装sigh脚本执行下面安装命令 sudo gem install sigh

6、若出现以下报错:ERROR: While executing gem ... (Errno::EPERM)

7、Operation not permitted - /usr/bin/rougify

8、则安装命令修改为 sudo gem install -n /usr/local/bin sigh

9、使用sigh脚本开始重新签名1、在终端输入sigh resign,回车2、把要签名的ipa文件(路径、包名不要有中文)拖到终端窗口上,回车3、填写用来签名的证书(第一步中的证书)名回车

10、证书名称:在钥匙串的证书上右键->显示简介4、把项目的配置文件.mobileprovision文件(第二步中的文件)拖到终端窗口上,回车 5、好了,resign脚本会自动更改bundel id,签名并重新打包。 完成后提示Successfully signed,新生成的包会自动替换原有文件。

11、安装重签名后的ipa文件

12、最新的iTunes已经不能给iPhone安装APP了,所以我们可以使用各种助手或者iTools进行安装。

13、以上就是使用个人开发者账号上架苹果ipa的方法,同时需要个人开发者账号和iOS企业签名可以咨询微导流平台!

全球范围内App开发者数量有增无减,你选择哪种编程语言来开发App呢?你得研究过跨平台app设计,你得知道一些app开发的常见缺陷。这取决于你的受众和你所选择的平台,然后选择一门合适的语言。

你会选择哪种语言来开发app呢?你选择它的理由是什么呢?

Objective-C

Objective-C被认为是iOS app开发的标准语言,通过苹果的Xcode集成开发环境(IDE)使用Objective-C来开发。

Objective-C具有以下优点:开发的高效能性,可以让你充分利用手机的各项功能。使用Objective-C进行编码可以让app在所有iOS设备上获得相差无几的体验,适配性比较高,比如iPhone和iPad。

不过,Objective-C使用起来也有一些难点,比如不是那么容易学习,使用Xcode可能比普通开发更难一些,更要到的一点是通过Objective-C开发的app很难适用到其他平台上,比如Android phones和Windows phones。

不过,也不用这么悲观,iPhone app可以被写成web app,web app不需要像Objective-C那么精细复杂的语言,你可以使用HTML、 CSS或者JavaScript。另外,web app还可以使用iPhone的某些功能,你可以使用HTML5,针对iPhones的web app可以使用位置功能。但是,目前情况是web app开发比较有限。

Web app开发不能整合设备的核心功能,比如发文本信息,也不能充分使用App Store进行销售和更新。

一些人认为移动web app避免了可扩展性问题,因为它可以跨平台使用。同时,web app也绕开了App store严格的提交和更新审查规则。相比较Objective-C而言,HTML、CSS以及JavaScript学起来更容易些。

JavaScript (Plus CSS和HTML)

JavaScript主要用来进行web浏览器和app的开发,性能方面有待进一步改进和完善。web浏览器开发不完全需要一门新的语言,使用和开发方面没有太大问题,套用一句话说,也就是没有坏的时候不用去修理它。

Node.js

Charlie Robbins(Nodejitsu CEO)说:“我认为你完全没有办法让Google、Apple、 Microsoft、Mozilla以及Opera在开发语言上达成一致,这是需要数百万美元来实行的。”JavaScript是相对比较简单的语言,同时还是一种比较有趣的语言,可以用在浏览器开发方面。最重要的是CSS和HTML可以一起使用,允许结构和归档的分离。

Robbins主要从事Node.js语言的研究,他以前是一个.NET和Ruby程序员,在他看到类似Silverlight和Flex这类程序/项目失败于前端编程的时候,他看到了Node.js的机会。

Robbins开始全职从事JavaScript开发,并且6个月后成立了Nodejitsu公司,为app开发提供高效的云服务。Robbins表示Node.js绕开了通用的开发步骤,使用起来更为简单。他说:“Node.js可以为你提供大部分你想要的实用函数,并且可在NPM (node package manager)中使用,我觉得这是个优势而不是劣势。”

Ruby:一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言

Robbins先前使用过Ruby, 他并不肯定Ruby,他说:“Ruby面临的一个问题是工程师看到函数成为语言的一部分,他们认为使用起来也非常快,他们并未对函数作为语言的执行进行深入挖掘。”

Robbins推荐使用第三方函数来代替,这样可以对app开发有个更综合更全面的理解。他说:“使用第三方函数的时候你会持很重的怀疑心态,你会仔细去看代码,看哪些运行的快哪些运行的慢,最终你对app的运行情况会有更深刻的理解。”

在app开发过程中创建一门新的语言或者提高现有语言的健康竞争能力,开发者需要知道哪种语言适合自己,尤其要明白各种语言的效能和功能。