现在, 你还那么在意应用的大小吗?

这篇文章是我的朋友, AlarmoneBlurone 的开发者刘志鹏写的一篇随笔, 我在征得他的同意之后转发到锋客.

前些日子我在微博发起了一个投票, 想调查如果一个人在应用商店遇到一个新应用, 又恰好看到了这个应用的 APK 包大小, 第一反应是什吗么. 投票给了两个选项:

这个应用质量应该比较高, 下载试试.

本来还想试试, 一看这么大算了.

结果很有意思, 大家的选择几乎是一半对一半, 有超过 45% 的人选择了后者. 这让我想起来以前看《软件随想录》这本书上令我印象深刻的一个章节. 摘录如下:

从最早的时候一直到大概 1999 年, 程序员都极其关注软件的效率问题. 在这段时期中, 内存空间总是不够大, CPU主频也不够高. 到了 20 世纪 90 年代后期, 一些像微软和苹果这样的公司开始注意到摩尔定律 (其实他们只比别的公司早了一点点). 他们认识到, 不必太在意软件的效率问题和内存占用…… 只要把很酷的功能做出来, 然后等着硬件升级就可以了. 微软公司首次发布 Excel 的 Windows 版本时, 80386 电脑还非常贵, 实际上没什么人买得起, 但是微软公司很有耐心. 只过了几年, 80386SX 出来了, 兼容机的价格下降到 1500 美元, 你只要买一台, 就能运行Excel.

由于内存的价格直线下降, CPU 速度每年都在翻番, 所以作为一个程序员, 你就面临选择. 你可以花六个月用汇编语言重写程序的内循环 (Inner Loop), 你也可以休假六个月, 去一支摇滚乐队当鼓手. 不管是哪一种选择, 六个月后你的程序都会运行得更快. 实际情况是没有程序员喜欢用汇编语言编程.

所以, 我们都不怎么关心软件的效率或优化问题.

不过有一个例外, 那就是在浏览器的 Ajax 应用程序中使用 JavaScript 语言. 因为这是当前几乎所有的软件开发工作的方向, 所以这是一个重大的问题. 眼下的许多 Ajax 应用程序有一百万行甚至更多的客户端代码. 现在的瓶颈已经从内存和 CPU, 转移到了带宽和编译时间. 你必须想尽办法进行优化, 这才能使复杂的 Ajax 程序有良好的表现.

但是, 历史正在重演. 带宽正在变得越来越便宜, 即使这样, 还是有人在考虑如何对 JavaScript 进行预编译 (Precompile).

有一些程序员将大量的精力投入到优化工作, 要将程序变得更紧凑, 更快速. 某一天, 他们醒来后发现, 这种努力基本上是百忙一场. 如果你喜欢用经济学家的口吻夸夸其谈, 那么你至少可以说, 这种努力“不会带来长期的竞争优势”. 从长远的观点来看, 那些不关心效率, 不关心程序是否臃肿, 一个劲往软件中加入高级功能的程序员最终将拥有更好的产品.

这篇文章应该比较老了, 但“历史正在重演”, 我们完全可以把它联系到当前的移动设备应用的现状上来. 过去的五年, 一切从几乎是零开始高速发展. 从 Android 平台来看, 当今还有很多用户在使用 WVGA 分辨率, 1GHz 单核 CortexA8 CPU (甚至不到 1GHz 主频), 以及 512MB RAM 的手机 (比如我们手头最低端的测试机 Nexus S) (NovaDNG 插话: 比如我的 Vision… );与此同时, 也有很多用户在使用 1080P 屏幕, 2GHz+ 主频 CortexA15 架构的四核 CPU, 以及 2GB 甚至 3GB RAM 的手机, 这可能就是投票的结果成一半对一半的原因.

我发起这个投票的原因是, 看到了手头最新开发的 Android 应用闹钟 one² 的 APK 大小和内存占用. 我相信这恐怕会触动一部分使用目前较低端设备的用户的敏感神经. 但同时也是拜此行业设备高速发展所赐, 九月份我们推出的闹钟 one 1.0 时放弃支持 Android 4.0 以下的系统并没有引起太大影响. 这要是在一年前还是我们不敢想象, 也不敢这么做的. 因此, 我们在设计和开发闹钟 one² 的过程中, 并没有刻意去限制 APK 的大小, 或者是为了了节省几 MB 内存占用而绞尽脑汁, 而是把精力放在了提升流畅性和启动速度上. 我觉得内存占用和应用空间大小都会很快不是问题.

我看过不少开发者总是说, 调试, 测试程序一定要用低端的机型, 这样应用适配了这样的机型, 上面的更高配置的也就适配了. 某些程度上, 事实确实如此, 但这同时也是一种限制. 比如说, 这么做的一种后果就是很多应用在 1080P 甚至 720P 设备上表现都惨不忍睹, 因为他们只做了 HDPI 的贴图. 而我们在应用内塞满了 XHDPI, 甚至 XXHDPI 分辨率的贴图, 因此把程序做的体积“感人”. 我们甚至为了适配最新的, 还只有 1% 市场占有率的 Android 4.4 系统做了大量工作 —— 界面上适配了 Translucent Bars 以及全屏界面, 功能上针对 Android 4.4 的对齐唤醒修改了代码. 这是一个 targetSDKVersion=19 (Android 4.4) 的应用, 同时向下兼容到4.0.

归根结底, 我们还是不想为照顾一些低端机型用户而妥协.

我们只做面向未来的应用.

Advertisements

10 thoughts on “现在, 你还那么在意应用的大小吗?

  1. 基本上,如果在商店看到一个预期功能比较简洁的应用,如果发现容量很大,我也不会装,不是因为手机不行,而是因为怀疑程序员的水平……

    Reply
  2. 还好吧~但是用廉价机器的人大有人在~并不是因为新机器太贵~而是因为老机器还可以用~而且效果也不错~不值得换新机器~即便是换了新机器~老机器也会当做备胎来用~尤其是1.6~2.1~2.3的机器~当然~我的意思并不是说这样做不对~而是反映了这么一个显而易见的问题罢了~

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s