有些硬盘比较小的用户或者是苹果手机容量比较小的的用户可能经常抱怨手机APP或者安装的应用程序太大导致设备空间不够用。特别是微软Outlook为何要1G安装包,而foxmai只要60M,为何同样的竞品APP有的点160M手机空间,有的只占5M? 而且当用户空间不够用的时候,如果你的app在占用空间排行榜上比较靠前的位置,那么你的手机APP就会变成用户要删除的首选目标。
下面为大家简单解释一下为什么有些手机APP或者应用程序总是那么占用空间:
1. 历史原因
为了兼容老版本或者一些旧有的用户习惯,可能会有一些旧的特性包含在里面,但是有的时候可能项目开发周期短,程序员哥哥是不会去动旧有的东西的,因为一旦牵涉到修改代码,成本是很高的。随便去掉一个功能点,需要考虑整个业务流程逻辑是否通顺完整,改完以后还需要QA再进行回归测试,这个过程就好像是从一整栋建好的大厦里面抽掉一些砖块,一不小心就有瞬间崩塌的危险。
2. 为了适应不同的用户群体
比如像office光安装包就1G多,安装完成之后发现各种组件都已经给你装过了,包括什么ppt啊,visio啊各种乱七八糟的组件,excel里面甚至还包含了vbscript这类开发者用到的组件;正常人类只希望用一个文档或者excel的功能,office就会给你安装了这么一大堆东西。
3. 追求炫酷、高大上
有些app为了追求狂拽酷炫屌炸天的界面效果会使用一些精度比较高的资源(图片、音频、视频),让你看起来好像觉得很牛X的样子,但是这些资源图片占用了整个app容量的大头。其实程序的二进制文件在编译出来之后,把符号文件去掉以后执行文件本身就是非常小的,多则几M,少则几百K
4. 第三方库
有些开发者为了图省事,会直接使用一些开源框架,比如做游戏需要用cocos2d, unity3d等,应用程序可能会用到reactjs等,这样子的好处是直接一套代码跨平台,节省了开发时间,提升了开发效率,但是这些第三方库本身是非常大的,因为第三方库它不知道你要用哪些功能,干脆把所有的东西一股脑都给你。
5. 用户数据
当用户使用这些手机APP(应用程序)的时候会产生很多使用痕迹的,有些手机APP(应用程序)就索性直接用完之后扔在某个地方不管了,比如说产生一些日志文件或者一些临时性的配置文件或者是一些数据记录,就跟随地扔垃圾的人一样讨厌,毫无节操可言。
看完上述种种,作为一个PM/RD肯定会有各种理由:我项目周期紧张啊、我的程序员哥哥不甩我啊、占用空间大小的事情只要不影响功能就行了啊、、、等,但是。。。这些都不能成为合理非法大量占用用户使用空间的理由,如何让自己的APP更加轻快,更加好用,这才是我们的终极目标。产品功能再牛X,细节不到位都是白搭;下面给出我自己针对上述问题的一些建议:
1. 解耦你的程序:现在大家都是用的面向对象语言,如果你的程序的类不能拆分成一个最简单的功能,或者类依赖过多的类,肯定是很有问题的,需要程序员哥哥在写代码之前就要考虑清楚该如何做扩展,如何写基础模块,如何写业务模块,哪些功能做成一个单独的模块,模块里面每个类负责最小化什么样的解耦功能;最好把工具类拆分出来,工具类有可能又分为业务型工具类和通用型工具类,说不定可以用到以后的项目中。
类似Chrome的插件模型永远是客户端程序最经典的架构。推荐没事多看看《设计模式》,尽管你可能觉得过时了,不管时代怎么变化,有些基础的思想永远不会变。
2. 动态的加载所需要的库:如果做到了上一点,第二点就很好解决了,因为所有的模块都是热插拔模式的,可以根据用户的需要把一些不需要的功能模块删掉,保持占用空间最小化。
3. 尽量多用绘制库:现在的绘制库都是很牛X的了,各种算法都给你写好了,而且优化的非常好,只要运用得好,就不要去用一些图片去解决问题,经常用图片解决问题的程序员是很懒的,懒得去了解绘制库的用法,只要稍微多了解一下你的绘制库,基本上秒杀各种特效了。
4. 削减第三方库: 很多第三方库都包含了很多用不到的功能,把这些功能都去掉吧,这些东西哪天要用到再加上也是可以的,如果你不会削减证明你根本不了解你的生产环境,这样子是很可怕的;赶紧动起来,去了解你的底层。
5. 尽量把一些重要的用户数据自动上传到云端:比如一些最近的聊天记录,聊天记录中一些图片文件等最好也要存成ID号上传到业务服务器,图片另外用图床存都是可以的。还有一些用户的使用偏好配置等信息也要保存到云端,本地可以留少许的数据;我有一个朋友前两天发朋友圈说自己某信所有聊天信息都没有了,不知道是咋回事,结果各种倒腾了一天终于搞好,但是损失的时间成本和沟通成本是无法估量的,由此可见像这种极端异常情况如果处理好了,带来的价值远远是高于做这些优化所付出的成本的。
最后建议一点,PM在日常开发过程中也需要把这些细节作为整个项目的一个需求去认真的落地,因为只有像这样才能够打磨出真正的精品。