我是做Android的,我给大家说说原因吧。Android软件大主要是以下几方面造成的。 1 Android界面功能的实现难度。Android相对于apple在某些方面实现起来很困难。比如Android的广告推送。苹果有自己的服务器可以用,而谷歌的服务器却不能用。咋办,于是有了n 种办法,有的人会用第三方比如百度。但更多的公司会自己实现。广告推送是与盈利挂钩的,这是一个很重要的功能。一个广告推送就会让app 多产生七八个类,几百行甚至几千行代码。但这不是最重要的,最重要的是因为这个功能太重要了,以至于每一个Android APP都会有。而这个功能因为需要推送,所以这个功能需要后台24小时运行。这导致无数个pushService在后台运行,他们占用内存,占用cpu 有的甚至索要权限进行电话录制,复制个人信息。 2 android 界面相对于苹果而言,实现有点困难。这种困难从Android出生的那一刻就存在了。一个界面就有一个activity,而n 个界面就有n 个activity。n个activity里面因为某种原因造成代码冗余。于是有了fragment,但是fragment在深度嵌套时会有许多难度而最典型的难度就是传值,页面跳转。这一下字增加了其复杂度。因为要实现会产生很多冗余代码。 3 软件升级。相对于苹果,Android的升级十分的频繁。Java程序最大的特点是可重用性,特别适合二次开发。绝大部分的程序员,在软件升级时,是不会去删除那些不用的代码的。为了兼容老版本,就更不行了。这导致产生庞大的废代码。 4 界面布局文件。界面布局的碎片十分的多,而这些碎片和Java代码是相关的。一个app 页面越多,产生的垃圾布局文件越多。好多公司为了追求速度和程序的可阅读性,是不会主动去删过时的代码和布局文件。 5 图片,图标。APP的代码体积有相当大的可能是图片造成的。图片越多会造成APP体积极速扩张。与媒体相关的视频,游戏变成巨霸就成为无可厚非的事。但是还有一个重要原因就是Android的适配。因为Android手机碎片化严重,为了用户体验,常常需要2套以上的图片,图标。
安迪-比尔定律:软件就是会越来越肿
安迪-比尔定律非常了不得,大名鼎鼎的摩尔定律,在这条铁则面前也得抖三抖。说安迪-比尔定律统治了摩尔定律,似乎也不过分,当然这不会是因为安迪-比尔定律的名字比较长。无论摩尔定律拔高了多少硬件性能,人们都不得不年年掏钱升级新设备,这就是安迪-比尔定律的威力所在。安迪-比尔定律具体指什么?我们一起来看看。
安迪-比尔定律不是定律,它是一个机遇!——by卖硬件的JS
要讲安迪-比尔定律,先得提一下摩尔定律。摩尔定律大家都懂,网上普遍流传的是“芯片每18个月性能提高一倍,价格减半”,这不是原版。戈登·摩尔的原话是晶体管每24个月增加一倍,18个月是时任Intel主管的大卫·豪斯(David House)的说法。细节不要紧,大概意思基本一致。硬件的发展也的确如同摩尔定律所说,性能不断爆发式增长。
24个月的说法拟合度更好,不过在近年的移动平台上套用18个月的说法也并无不可
然而多年过去,事情却不对头,这硬件是涨了,但没感觉变快啊?三年前用电脑干什么活,现在也是基本如此。硬件猛了,但拔高的性能只能让芯片化身暖手宝,用来养电厂,这不坑爹么!转头一看,微软Intel合体的Wintel联盟笑而不语。
这就是安迪-比尔定律的本质。所谓安迪-比尔定律,安迪指的是Intel前CEO安迪·鲁夫,比尔则是大家都知道的比尔·盖茨。这条定律可是把这两位IT大佬狠狠黑了一把啊。安迪-比尔定律的含义就是,安迪给啥,比尔拿啥;Intel产多猛的硬件,微软会用越来越臃肿的系统和软件统统吃掉增长的硬件性能。安迪-比尔定律,实质上所描述的,就是软件臃肿化的问题。
安迪&比尔:别光看啊,快买呀
随着功能的加入和交互的革新,软件做得越来越大,是很正常的事情。然而,软件臃肿化并不是单指软件体积膨胀,重点是软件增加的功能和变大的体积不成比例。安迪-比尔定律的主角是Intel和微软,但其实在整个业界中,软件臃肿化已是尾大不掉。无论是桌面平台还是移动平台,软件臃肿化的迹象都随处可见。
桌面平台&移动平台:难逃软件臃肿化魔咒
◆桌面平台
近年来桌面平台软件臃肿化最令人菊花一紧的,应该当数Windows Vista了。Windows Vista一出,Aero毛玻璃特效亮瞎了无数人的眼,笑开了无数内存卖家的颜(虽然后来很快就哭了)。而同样的历史,也在Windows XP接过Windows 98大旗时上演过(Windows Me那破烂就不提了,Windows 2000隶属Server系列也不提了)。无论是Vista还是XP,都带来了大量革新,遗憾的是,带走的老机器也不计其数。
说真的,当年期盼微软出个Vista+内存同捆套餐的人,不止一两个
除了操作系统外,桌面应用软件的臃肿化也非常明显。以IM软件为例,多年过去,IM的主要功能没有发生什么大变化,还是打字语音加视频,但QQ 2003 10M不到的体积已成绝唱。虽然新版QQ 2013五十多M的体积,看上去似乎不算夸张。但多开几个窗口你会发现,连2G内存都喂不饱QQ。夭寿啦!1G内存都能养活Windows XP了!
◆移动平台
在移动平台上,软件臃肿化甚至要比桌面平台更严重。先来看看以优化效果拔群闻名的苹果,iOS4的体积600M不到,而iOS7体积已经达到了1G多。至于所占资源嘛,瞧着当年行云流水iPhone 4被卡哭的样子,大家应该心里有数。而iPhone 4有什么功能是必须用iOS7才能实现?Siri?Touch ID?高速连拍?对不起,旧机型的标配是旧功能,以及卡顿。
很多新功能都是新设备专属,功能增加和软件的增肥完全不成比例
再来看看以硬件食量闻名的安卓,要不是安卓卡在了32位的瓶颈,恐怕在今年已经把RAM堆到4G了吧?8核+4G RAM,光是论名头,很多PC都没这么夸张,然而这是否就能喂饱安卓?还得打个问号。再加之安卓App受到的限制比iOS平台来得少,开发者们简直像是狂欢一样,拼命往里面添油加醋。安卓App变得重口而滞胃,实在吃不消啊。
吃吧吃吧,越吃肥得越夸张,最后也许动都动不了
可以说,无论是iOS平台还是安卓平台,无论是移动平台还是桌面平台,软件臃肿化现象都非常普遍。通胀是经济发展不可避免的现象,软件臃肿化似乎也在消费电子发展史上,充当了类似角色。为何安迪-比尔定律屡试不爽?软件臃肿化真的不能避免呢?我们一起来看看软件增肥的缘由。
增肥的食粮:软件臃肿化三大缘由
◆硬件需求进化:好钢用在刀刃上,刀刃同样要好钢
前面提到,随着技术进步和用户需求的发展,软件增肥,本来是一件非常正常的事情。想要马儿跑,哪能让马儿不吃草。拿最直观的界面来说,早年的计算机只能够显示最基本的字母,如英文字母以及日文的假名等等,要显示各种汉字,还得增加字库容量;到了图形界面年代,从16色到256色到32位色,每一步进化都需要更先进的硬件铺路。想要用马车把人拉到火星上,未免也太魔法了点。
虽然系统仍保留高效的命令行,但恐怕最令人流连忘返的,还是图形界面的各种吃资源特效
十年前PC可以轻松解码DVD,对1080p的蓝光碟一筹莫展,而现在的手机都能放4K视频了;十年前手机可以听歌拍照,但和现在将随身听卡片机打得掉一地牙的手机相比,完全不是一回事。在未来,3D、全息以及沉浸式体验将会给人们带来另一番新天地。理所当然,这片天地必须要用更强劲的硬件才能撑得起。
◆软件功能过剩:好钢用在刀刃上,刀背也来分杯羹
不知道从什么时候开始,各种软件突然变得很喜欢把奇怪的东西塞进自己里面。一个好好的聊天软件,突然就多出了新闻浏览安全杀毒等功能;一个好好的浏览器,突然就多出了安全杀毒社交聊天等功能;一个好好的杀毒软件,突然就多出了社交聊天新闻浏览等功能。平时装三个软件可以得到三种功能,现在装三个软件得到九种功能,什么你说都是功能重复的?我听不到。总之就是一片顶三片,疗效特好,专治电脑性能过高!
你告诉我,这是一个聊天软件?
目前IT业界正处于从桌面端迁移到移动端、从本地迁移到云端的剧烈转型期,新兴的应用环境层出不穷。受业界大环境的影响,专精于某一项功能的软件变得越来越少,开发者们恨不得用一个安装包就统治了用户的使用环境,为前途和钱途铺好路。在这种指导思想下,打铁的也开始割麦子,煮饭的也开始负责炼钢。想把摩尔定律拔起来的性能都物尽其用,好钢通通用在刀刃上,各种随系统自启的软件应用摇晃着一身肥肉纷纷起身抗议不答应。杀了两三个流氓,还有无数后来人。
◆软件欲求不满:好钢坏钢一箩筐,管他什么顶硬上
现在电脑的性能真的过剩吗?对于某些开发者而言,硬件似乎没有什么过剩不过剩的区别。无论硬件有多高,总有人能够写出榨干性能的软件。这些软件又可以分为两类。
第一类是无论是哪个时代都会出现粗制滥造导致的软件臃肿化。不管硬件性能去到多高,恶劣的代码总能够化神奇为腐朽,这在开放程度高的平台尤为常见。前面提到安卓平台软件臃肿化问题严重,就是着了这方面的魔了。安卓平台没有严格的审核,也没有细密的权限控制系统,入门门槛低,开发者可以放开手脚干。面对完全不稀缺的资源,恐怕懂得珍惜的人不多吧。于是,一堆狂吃硬件资源的安卓App诞生了。
安卓的开发环境,太容易写出垃圾App了
第二类是太过超前的软件,同样没有考虑到当前硬件平台环境。但和第一类不同,这类软件并不是粗制滥造,反而是经过精心设计——但看上去不像是为普通人设计的。以Windows Vista为例,笔者一直认为Vista是一个非常优秀的系统——前提是它不是运行在2006年主流配置为单核CPU和512M RAM的PC上。
实际上,Windows 7大致就是Vista的马甲,两者性能速度硬件需求基本是同一水平,为何两者口碑差距如此大,除了一些细节的不同外,大概还是因为Windows 7诞生于2009年而非2006年吧。
软件臃肿化:真的无药可救?
现代人的体重越来越夸张,以希望国为例,根据统计,美国的肥胖率已经接近三成。肥胖问题在美国每年可以造成约十万至四十万人死亡,并大幅增加医疗支出和其他社会成本,美帝每年需要在肥胖问题上花费1170亿美元,简直水深火热。现在的软件环境,和肥胖问题有异曲同工之处,人们不得不花大力气喂饱软件们贪婪的硬件需求,并直面由软件臃肿化带来的卡顿、停止响应、崩溃等问题,太虐心了。无论是人脑电脑,血管都被注入了时代特有的脂肪。
无论在人类社会还是IT业界,肥胖都已经成为了大问题
人们已经意识到了肥胖化的后果,减肥俨然已经成为了都市生活不可或缺的话题。同样,IT业界也在为解决软件臃肿化而努力。虽然软件臃肿化的大趋势并没有停止,但近年来被安迪-比尔定律折腾得吃不消,狂吃减肥药试图去除软件臃肿化的案例也不少。桌面平台的减肥成功人士代表为Windows,移动平台上则是安卓。一起来围观下,励志励志。
◆减肥励志案例一:微软Windows
Windows Vista的肥胖饱受诟病,微软显然也知道自己的设计有点太超前了。从Windows 7开始,Windows系列投入了轰轰烈烈的减肥运动中。Windows 7是第一款比前代更省资源的Windows系统,意义重大。虽然减肥程度不算夸张,和Vista基本也是处于同一重量级,但加上I/O方面的进步,Windows 7给人的感觉要更加高效。
从Vista到Windows 7,从Windows 7到Windows 8,微软每代都在减肥
微软将减肥运动延续到了Windows 8这一代,Windows 8也成为了第二款比前代更省资源的Windows系统。按现在Windows往平板手机迁移的走向,Windows 9很有可能依然比前代更省资源,希望如此吧。
◆减肥励志案例二:安卓4.4
安卓的臃肿相信毋庸多言了,Google也痛定思痛,这次安卓4.4在优化上下了血本。首先,Google斥巨资2300万美元收购了法国雷恩的一家创业公司Flexycore,这是一家专注安卓优化的公司。然后在安卓4.4中,Google启动了“Project Svelte”(瘦身计划),系统内存需求、运算量峰值大大减少。此外,针对安卓App效率低下问题,Google不再完全依赖Dalvik虚拟机,启动了全新的ART机制,App运行速度大幅攀升。
安卓4.4减肥成功,简直感天动地
安卓4.4的努力效果拔群,有人将安卓4.4移植到了仅有512M RAM和单核CPU的Nexus S中,发现流畅度惊人,符合Google官方声称的“安卓4.4可以流畅运行于512M RAM设备”的宣传。减肥成功的安卓4.4对于用户来说无疑重大利好,也许安卓的硬件大战可以暂缓一下了。
软件臃肿无法停息:为何大家放弃治疗?
从Windows和安卓的例子可以看出,软件臃肿化并不是无药可救,但为何人们往往放弃治疗?我们可以来参考一下从来不会发生软件臃肿化的游戏机平台。游戏机平台的寿命长得惊人,动不动五年以上乃至再战十年。随着时间的冲刷,游戏机上的游戏优化效果甚至会越来越好。06年发布的PS3至今仍可玩到GTA5、Crysis 3等最新大作(虽然效果是差了点),06年的普通PC现在还能换几条柴?
在游戏机平台上,软件索求的资源是稳定的,新游戏并不会比旧的更耗资源
游戏机平台非常封闭,而且在长久的生命周期内硬件性能稳定得接近水平线。对于开发者而言,这一方面迫于严格的审核,必须对游戏成品精益求精,你不能乱来,最多也就搞搞内购;另一方面,稳定不变的硬件利于庖丁解牛,每一份性能该用在什么地方,会越来越了然于胸。游戏机能够在悠长的生命周期内由始至终高效发挥机能,绝缘软件臃肿化,和其独特的平台生态密切相关。
开发环境、平台生态更迭太快,没法让开发者照应到老设备
再回头看看一年一换甚至半年一换的电脑手机,压根没法为开发者提供稳定不变的开发环境,软件应用不得不尾随进化神速的硬件平台更新;同时,就算是审核以严格著称的iOS平台,苛刻程度也没法和游戏机平台相比,更别提门洞大开的Windows和安卓了。微软和Google自然坐拥能够在时代大潮中淡定观望,慢慢打磨代码的人力财力,放长线钓大鱼;但对于更多开发者来说,跟上平台更新的狂潮,用更多手段掌控用户,获取短期利益,才是更好的赚钱大法。至于软件肿不肿……神优化又能怎样?能发大财么?爱玩神优化的话,就让热心的独立开发者自个玩儿去吧。
安迪-比尔定律仍会跟随摩尔定律很长时间
后话
不难发现,更迭越迅速的平台,越容易发生软件臃肿化现象。硬件狂魔安卓的应用比iOS更臃肿,移动平台比近年来放缓更新步伐的桌面平台更臃肿,五年前的PC还能顶用,五年前的智能手机已成弱智矣。不是大家不想减肥,兵荒马乱之中,今天不拼命给自己塞点什么,谁知道明天还有没有机会开饭?摩尔定律作用越明显,安迪-比尔定律的效用也就更大,不得不说这是消费电子发展的怪圈,时代的眼泪啊。
在可预见的未来内,软件臃肿化依然不会停下脚步。摩尔定律和安迪-比尔定律相爱相杀的故事,恐怕还有很长一段历史可继续书写。然而,无法治疗和放弃治疗是两回事。作为一名用户,还是希望开发商们能够静下心来,思考用户体验的本质,让每一份增长的硬件性能都能物尽其用。
手机的硬件和软件是相辅相成的,硬件推动软件,软件倒逼硬件,手机内存随着技术的发展做的越来越大,每GB内存价格也在降低,所以这也推动了手机APP和各类软件可以做的更大,功能更多,毕竟内存太大的话用不了也是浪费,手机软件顺其自然增加功能和界面美观度也是非常正常的。
手机软件因为功能和界面的加强提高内存占用量是正常的,同一款APP我们可以看到数年前的版本和最新版差距非常大,占用的内存量也可能相差好几倍,如果是正常的增加还可以理解,但是问题在于国内大量的APP开发公司对程序的优化工作做的不足,也就是说仗着手机内存容量的大幅度增加,开发者们为了节省时间和成本放松了代码优化工作,这样就会使软件的内存占用不合理的大幅增加。
毕竟不是谁都会频繁更换手机,对于老手机用户来说,很多新版本的软件内存占用过大,尤其是每次更新版本几乎都会增加占用量,但是用起来却没什么差别,这样自然就会导致网友们的吐槽。毕竟操作系统本身不会频繁更新,但是手机上大部分的APP都会三天两头的进行更新,手机越用越卡当然有它们的问题。
也正因为此,国产手机大部分都会配备较大的内存容量,即使是便宜的千元级在存储容量上也不会太吝啬,这就是为了应对大量不注意优化、频繁更新的国产软件,就软件生态环境和优化程度来看,国外普遍做的比国内要好。
不光手机的APP体积在增大,就连手机的系统体积也在增大,并不分国界,也部分是Android还是IOS。
比如iPhone 3G所用的IOS 2.0固件大小仅有225.1MB,而现在iPhone 12所用的IOS 14.5固件大小达到了惊人的5.29GB。
2008年第一部搭载Android系统的手机T-Mobil G1,它的ROM仅有256MB,这意味着256MB的大小既要放下一个Android系统,又要用于安装APP,也要用于存放用户使用过程中所产生的通讯录、图片、缓存等数据,所以那个时候的手机总会提示我们存储空间不足。
现在一个普普通通的APP动不动就几百MB,更别提好几个GB的系统。早期的APP也并不大,比如2011年发布的Android版微信1.0安装包大小仅有457.7KB,而现在最新版的微信8.0.2安装包大小达到了175.1MB,安装包大小增长了将近400倍。
APP、系统体积的飞速增长源于市场和用户的需求
就拿微信来说,微信1.0版本只能发送文字信息和图片,我们常用的语音聊天、视频聊天、附近的人、相册、朋友圈、附近的人、支付功能等等都是后来逐渐随着版本升级而添加上去的。
- 微信2.0:增加了语音聊天、视频聊天、查看附近的人等功能;
- 微信3.0:增加了摇一摇和漂流瓶,还可以发送视频消息;
- 微信3.5:增加了扫描二维码、二维码名片的功能;
- 微信4.0:增加了相册和朋友圈功能;
- 微信5.0:增加了微信支付、订阅号/服务号;
- 微信6.5.3:小程序发布;
- 微信7.0:新增时刻视频;
- 微信8.0:增加了状态、视频号、直播和附近;
软件看似每次升级只是修复一些bug、增加了一些功能,实际上往往增加一个很小的功能,代码量就会成倍地增长,程序每增加一个节点就需要保持和其他节点的联通。
这样一件事情很早就形成了一个定律,就是大名鼎鼎的安迪·比尔定律,硬件厂商每时每刻都在致力于提升硬件的性能,而新开发出来的系统和软件会迅速的消耗这些硬件提升。
这就是软件和硬件的共同迭代,是双赢的局面,软件厂商可以通过更好的硬件支持来实现更多的功能来吸引用户,而硬件厂商也在为卖出更多的硬件设备而偷着乐。
同理如果现在让你使用过去的电脑操作系统、手机操作系统和过去的软件,你不当当会不习惯,还会很抗拒。除了界面颗粒感很强很粗糙外,我们现在习以为常、百试百灵的功能肯定是不存在的。
在这种情况下绝大多数人都持抗拒心态,这就好比一个人收入提升了10倍,他一样会为钱发愁。因为他的消费等级提升了,哪怕提升了只是一点点,他的开销就会提高好几倍,他要开更好的车、住更大的房子、让孩子接受更好的教育,想要再回到过去的生活会很难、很不习惯。
系统、APP的体积越来越大也说明了社会在高速的发展
如果哪一天系统、APP的体积停止不前了,要么是社会资源不足以支持硬件和软件的研发生产,要么是基础科研遇到了瓶颈。反之,系统、APP的体积越来越大从侧面反应出社会在高速发展,即使大规模集成电路操着摩尔定律呈现指数级增长,但很快就被市场和人们消耗了。
以上个人浅见,欢迎批评指正。
认同我的看法,请点个赞再走,感谢!
喜欢我的,请关注我,再次感谢!