原生应用 vs HTML 5

标签: 应用 vs html | 发表时间:2013-06-19 01:45 | 作者:keakon
出处:http://www.keakon.net/
这几个月都在开发 知乎日报的后端,让我对移动应用的开发有了更多的认识。

简单来说,我以前一直都认为原生应用才是王道,现在则觉得 HTML 5 才是未来。

不可否认的是,原生应用更快,能使用更完整的 API,但它有个致命的缺点——升级太麻烦。

举例来说,我们筛选出下个版本需要实现的功能,很快就能做出其中的一部分让内测人员体验。而等我们全部做完,已经过去一周多了。然后提交苹果审核,又要等一周。再等个良辰吉日发布,就过去 20 天了。
扯淡的是这期间 iOS 7 测试版发布了,然后各种原生控件都有问题。
与此同时,我们又做出了更多功能,调整了多处细节,还修复了几个 bug——但用户只能再等几十天才能体验到了。
而且还有的用户就是不升级。虽说我能强制要求用户升级,但这毕竟影响用户体验。
更让我不爽的是,新版本可能要使用不同的 API,于是服务器端要维护多个 API 版本;甚至还因为 iOS 和 Android 各自有不同的限制,导致 API 要做出各种妥协。而我把数据都放在了 Redis 里的,每个 API 版本都可能要生成不同的数据,于是得占用几倍的内存…
而在开发网站时,一个功能做好了就能上线,一天更新几十次毫无压力。如果客户端只是个浏览器,那一切都会变得很简单。

再来回顾一下原生应用的优势。
  • 性能好。
    从最新的 测试来看,C gcc : Java 7 : JavaScript V8 在单核 x86 CPU 上的速度比约为 3 : 2 : 1。JavaScript V8 可是和 Go 一样快哦,我好像还没看到有抱怨 Go 慢的。
    没记错的话,在 1、2 年前,JavaScript V8 可是比 C 慢 20 倍的;甚至在一个月前,还是 4 : 1 的样子。因此你可以期待它更快。
    当然,手机大多用的是 ARM,不一定有 x86 的性能。而除了 V8,还有各种 JavaScript 引擎,例如 iOS 的 Nitro。甚至 V8 自己都在频繁更新,至少最新版本比 2 年前快了 6 倍。而手机上除了升级系统版本,不可能频繁更新 JavaScript 引擎。

    此外,JavaScript 是单线程的,但是 JavaScript 引擎在处理 IO 时,还是能通过多线程的方式利用到多核。当然也不排除 JavaScript 未来能直接利用多核,只是目前还有很多依赖 JavaScript 单线程特性的地方,因此设计起来会比较麻烦。
  • API 更完整。
    HTML 5 为了可移植性,只能定义通用的 API,所以必定会牺牲很多独有的功能。
    不过只要 HTML 5 还是未来的发展方向,那么能支持的 API 肯定会越来越多的。或者自己做个代理层,转发调用原生接口。
    而转向 HTML 5,就意味着得放弃很多开源的原生解决方案,慢慢用 HTML 5 去取代。
    总之,办法是有的,只是时间问题。
不过时间问题就是最大的问题,至少我几年内都不想再开发新的移动客户端产品了。

顺便再指出,JavaScript 语言本身还有不少缺点,而 CoffeeScript 也不能解决,我随便列举几个:
  1. 弱类型。例如 [] + {} 的结果是 "[object Object]",{} + [] 的结果是 0。不要问我为什么,我也不知道。
  2. 不区分整数和浮点数。整数溢出后就变成浮点数了,再加上它是弱类型,还能变成字符串。
  3. JavaScript 的 object 不如 Python 的 hash 好用。遍历麻烦就不说了,毕竟还能用 CoffeeScript,关键是 key 只能是字符串。如果拿一个对象作为 key,这个 key 就变成了 "[object Object]"。
  4. 还有些不是 JavaScript 语言本身的问题,而是 DOM API 的设计问题。例如 element.removeEventListener() 必须要传递 listener 函数,不能直接清空一个或所有类型;于是想要注入时,就拿那些匿名函数没辙了。

也别梦想 HTML 5 能直接兼容各种平台,只是平台相关的代码写得少些而已。

总之,我很看好 HTML 5,只是目前仍然太早。过渡期的解决办法就是混合使用(即在性能和体验可接受的情况下,用 Web 页面来做展示),然后等时机成熟,再用 HTML 5 替换原生代码。

相关 [应用 vs html] 推荐:

原生应用 vs HTML 5

- - keakon的涂鸦馆
这几个月都在开发 知乎日报的后端,让我对移动应用的开发有了更多的认识. 简单来说,我以前一直都认为原生应用才是王道,现在则觉得 HTML 5 才是未来. 不可否认的是,原生应用更快,能使用更完整的 API,但它有个致命的缺点——升级太麻烦. 举例来说,我们筛选出下个版本需要实现的功能,很快就能做出其中的一部分让内测人员体验.

HTML语义化的应用

- - 标点符
HTML语义化就是根据具体内容,选择合适的HTML标签进行代码的编写. 用合理HTML标记以及其特有的属性去格式化文档内容. 便于开发者阅读和写出更优雅的代码,同时让搜索引擎的爬虫能更好的识别. 相比先前网页开发过程中仅关注布局和功能,在开发过程中使用表格布局或DIV+CSS布局,越来越多的人关注HTML语义化,核心是语义化可以带来显而易见的好处:.

Linux应用之Pop VS Geek

- - 笨兔兔
这个世界上有主流的大众流行应用,但也从不缺乏Geeker. 一直以来,在Linux的应用中,总会有不少人向你推荐vim之类的工具. 这事,icebird自己也干过,但我们也不能否认大众应用的巨大作用. 如果没有这些大众应用程序,计算机就根本不可能普及. 然而,这个世界上有主流的大众流行应用,但也从不缺乏Geeker.

GIF vs APNG vs WebP

- - JayXon
GIF 是一个非常古老的格式,1987 年诞生,最后一个版本是 1989 年. (这就是为什么 GIF 文件头的 magic number 是 GIF89a). APNG 相对新一些,是 Mozilla 在 2004 年推出的,十几年的科技进步是不容小觑的,所以 APNG相对于 GIF 的优势十分明显,后面会分析.

HTML 5应用开发商Sencha融资1500万美元,基于HTML 5的云服务应用Sencha.io进入公测阶段

- blueslan - 36氪
HTML 5应用开发商刚刚宣布,公司的基于HTML 5的云服务应用Sencha.io已经进入公测阶段. 这个云服务应用包括4部分,Sencha.io Data、Sencha.io Messages、Sencha.io Login和Sencha.io Development,有了这个服务,应用开发者只需几行Javascript代码就可以实现云储存数据、发送消息、收听留言和部署应用程序功能.

在HTML 5 的 Canvas 中应用卷积矩阵对图像处理

- BeerBubble - 走走停停看看
HTML 5中的 canvas 元素是相当强大的,利用他的 getImageData 方法可以对载入的图像直接进行位图操作. 但是直接对位图进行操作比较麻烦,如果利用卷积矩阵这个工具的话,可以通过几个简单的参数实现复杂的效果. 所谓的矩阵的卷积,就是如下图显示的那样,当计算红色框中的数值的时候,分别先提取周围绿框中8个数字,然后与施加的那个矩阵中对应位置相乘,然后把各个乘积加在一起,就得到了最终的值了.

Opera TV Store正式开放,从此HTML 5 Web应用无处不在

- - 雷锋网
在2011IFA大会上,雷锋网之前介绍过的 Opera展示了 Opera TV Store,本周在 CES上,公司宣布TV Store正式对外开放. Opera TV Store的建立就是为了以一种直观的,屏幕友好的方式让用户享受Web内容及应用,在当中你可以同时打开好几个应用,并将之最小化,就算进行应用外的操作,也能收到应用内消息提醒等.

转 redis vs memcached

- - 数据库 - ITeye博客
传统MySQL+ Memcached架构遇到的问题.   实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:.   1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间.

NOSQL数据库大比拼:Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase

- - 博客园_Ruby's Louvre
话说,尽管 SQL 数据库一直是我们IT行业中最有用的工具,然而,它们这样在行业中超过15年以上的“转正”终于就要寿终正寝了. 现在,虽然关系型数据库仍然无所不在,但它越来越不能满足我们的需要了. 但是,各种 "NoSQL" 数据库之间的差异比当年众多关系型数据库之间的差异要大许多. 这就加大了人们在建设自己的应用是选择合适的数据库的难度.