App生存环境之宿主环境
终于开始说一些技术性的话题了,从这里开始的一些技术细节的东西,以前我也没有太刻意的注意过。为了写这个也是刚刚看了一点资料,如果有纰漏,恳请指出。
一个App生存的宿主环境主要分成两个部分,一个是硬件环境。一个是软件环境。在IOS的生态圈中,这两个环境相对于Android来说是比较封闭的,但是,得益于封闭。整个系统的兼容性和稳定性远远高于Android。没有那么多的碎片化的设备,没有那么多的硬件配置,没有那么多的私自改造的Api,也没有让人痛苦不堪的各种大小的屏幕。你的App在部署到用户机器上的时候,能够为用户带来视觉和交互上高度的一致性。你的App要么生活在Iphone中,要么生活在Ipad,或者itouch中。但是都是活在一个叫做IOS的系统中。
先从硬件讲起吧,先看个图(有图有真相)。
从这张图中我们能够非常直观的看到几乎所有运行IOS系统的硬件性能指标。这些硬件性能,决定了你的App的性能上限。对于专门开发App的应用层程序开发者来说,可能对硬件的性能指标已不是很关心了。而且,在这张图中我们也能够看出,最近几年,IOS设备的硬件性能也是突飞猛进。越来越人觉得硬件再也不是什么限制性因素。因而也多少有点被忽略的意思,但是对应用层的开发者来讲,可能不需要知道,CPU的具体的排线和实现原理,也不需要知道内存颗粒的实现技术。但是程序打交道的几个主要部件的性能我们还是需要关注一下的。按照冯诺依曼的模型,有四个主要部件的性能还是得多多少少知道一些。
CPU:程序运行的地方,是设备的运算核心和控制核心。你的App变成指令后就是在这里活动。苹果主要使用基于Arm架构的处理器。在最初的设备中,还只是单核的Arm处理器,后来变成了2核处理器。多核能够为你的App带来更好的并发性能。当然,随着处理器本身性能的提升,单位时间内你的App能够做的事情也越来越多。本来一分钟内,你的app可以数100个数,到了Iphone5上后,就可能能数1000个数了。
内存:App在运行时存储自身和所需要资源的地方。打个比方,就像是App的弹药库,但又不止是弹药库。是你的App的临时性记忆存储体。他的容量越大,也就意味着单位时间内能够load进来的数据量就越多。随着数据量的增多,程序的性能就会越好。不用浪费很多的时间去低速存储设备后,龟速的Loading数据。
I/O:数据持久化的地方。永远记录着一些App让它记住的东西,直到因为某些非人力无可抗拒的因素被毁掉,比如恶心的快递暴力分拣。他时你的App的后勤。
屏幕:这可是脸啊。如同看一个妹子,你先看到就是这张脸。而IOS设备的屏幕,也是apple一直标榜的。不过说真心话,iphone的大猩猩屏的确刚刚的。色彩丰富,而且抗摔。题外话了。言归正传,对于应用层的开发来见。我们在幕后做的所有的努力都是为了,最后我们的App是以怎样的形象展现的在用户面前的。然而,关于界面元素的布局,大小,图案,配色等等关键性因素却是由UI来决定的。而我们能够做的,就是尽最大的努力,还原UI的设计。从开发层面讲,需要我们关注的可能只是屏幕大小了。其他的一些细节指标,没有太大的关注价值。
说完了硬件,那么再说说软件。那个当然得从最核心的操作系统——IOS说起。IOS与Mac OS一样都是以Darwin为基础的。而Darwin是以FreeBSD为基础构建起来的微内核结构操作系统(那个继续这么一个名词一个名词解释下去,真的没完了,关于微内核和宏内核的区别,还是自己Google吧)。所以IOS也是一个类Unix操作系统。如果你以前是Linux用户,在IOS设备越狱之后,你会灰常开心的发现,各种命令行都能用,什么ls了,ln了。而且,有大神级任务,在越狱的Iphone上跑LAMP,这才是真正的“移动”互联网啊。知道了IOS其实也是一个类Unix操作系统后,我们就能干很多比较高端的事情了。比如事情一些比较底层的系统命令来提高程序性能。最近网上一个比较火的开源图片缓存库FastImageCache就使用了memsy和mency(https://github.com/path/FastImageCache)。以前看过一个大神的微博说,性能就在那里,只要你死扣IO,死扣CPU死扣一切,性能就来了。
操作系统是我们的程序与硬件之间的中间层。它为我们屏蔽掉了那些繁琐的硬件操作,只给了我们简单明了的函数接口。同时也是我们的App运行时最为关键的虚拟环境。他更像是IOS硬件设备的一个地方官,而我们的App就是其中的一个子民。App的生老病死以及一切都是受到IOS的管辖的制约。IOS给你的App分配资源,也会在你的App贪得无厌的消耗了过多资源之后对其执行死刑。所以,要时刻记住,生活在这个圈子里的不只有你自己的App,还有一个至高无上的操作系统。其实,app与操作系统打交道,也是通过那些一定订好了的函数接口。app虽然有生命周期,但是他不是智能的。他知道的所有事情,都是程序员写死在里面的。
而关于IOS操作系统的更多的细节,可以参加apple 官网。