原文发表于 :
http://tiny4cocoa.com 论坛
@tinyfool 是一个大胖子 是我的一个推友, 是推友, 不是基友!!!
========================================
再来谈谈HTML技术在手机开发中的应用.
作者twitter : @finscn
(注:本文中的HTML是个泛指, 指代HTML+CSS+JS三种常用的web技术)
关于HTML在手机应用中的应用,在 天使@tinyfool 的这篇帖子 <
你在iOS开发中大量用Html5+js么?> 里已经有所讨论, 在这里我想谈一谈我个人的看法.
由于想说的比较多, 而且角度可能更加"非技术"一些, 所以最后还是决定单独,希望大家可以就这个问题展开进一步的讨论.
开始之前,我先开门见山的来表明一下我的态度吧: 我支持在手机应用中利用HTML技术来构建软件的UI.
还有一点要说明,我这里提到的应用并不是跑在浏览器里的B/S应用, 也不是只依赖于HTML的Web Application, 而是利用类似webview的技术开发的native应用.
通常这类应用的结构如下:
图很不专业 大家将就着看一下吧. 其中 HTML CSS JS 主要用来构建UI, 或者是简单的逻辑, 而软件的核心/底层依然仰仗于native.
图中的连线可以理解为"连线的两端互相打交道"(囧, "打交道"...好不专业的用语)
当进行跨平台移植时, 只需要替换 native和js-adapter 部分, 对其他部分只要稍做修改即可.
=================================
虽然我的观点倾向于"挺HTML"派, 但是我依然认同绝大多数"反HTML"派的观点,例如下面这些:
1 HTML依然不足够强悍.
HTML技术再强大, 性能 功能 效果也和native语言有差距,最终的产品通常不如使用纯粹的native语言开发的好.
2 HTML带来了更多的技术难题
HTML 浏览器本身的bug,js语言的过分灵活,未知的内存泄漏...这些都是潜在的问题.同时一个软件混入了太多的技术,增加的开发和维护的成本.
3 HTML主要好处也许是跨平台,但是手机应用中跨平台的意义并不大.
为了兼容各种平台,你的应用最后所能达到的效果,往往只会是所有平台中最差的.类似木桶理论.
只有针对每种平台,专门开发,充分发挥自身的特点,才有可能开发出吸引人的应用.
好的应用不应该屈服于平台的兼容问题.
4 使用HTML开发应用,破坏某平台上UI和用户体验的一致性.
=================================
下面再来说说"挺HTML"派常见的观点:
1 从纯技术的角度来讲, HTML简直就是为UI而生.
HTML本身是构建UI的非常出色的技术,它很好的实现了数据 展现 结构 行为的分离, 并且...(省去几千字,关于HTML的好处和意义被说过太多次了 不啰嗦了)
2 HTML技术如今已经很强大,效果很出色.
其实单独来看性能和效果,HTML已经不输native了,只是在过去,性能上去了,效果就要打折,效果上去了性能就要打折.不过随着现在软硬件技术的提升,HTML技术单就表现效果来讲,已经足够用.
3 HTML技术可以更好的实现跨平台.
抛开那些纯技术的问题不谈(反对观点中的 2,支持观点中的1 ,确实没什么好谈的), 可以看出两种观点主要纠结在"最终效果"和"跨平台"上.
=================================
现阶段,HTML效果肯定不如native,这个我是认同的,但是根据我的使用经验,从效果来讲,html5确实已经够用了.
换言之,目前我用过的itouch和android非游戏类应用(我有下载 和 试用软件强迫症.累计用过的非游戏类itouch软件大概有200个左右,android上的只多不少)中, 大概有一半甚至更多的软件的UI是完全可以用HTML来实现的, 例如一些个人管理类软件(日历/日记/财务/计划等等),网站客户端(微博/大众点评/街旁/人人网等等),学习类软件(英语/日语/辞典等等),还有其他一些软件甚至简单的小游戏(安卓菜市场/系统优化/音乐播放/数独/记忆力游戏等等).
下面只来说一说"如果一款软件的UI层,既可以用native语言来实现,也可以用HTML来实现时,那么要怎么选择", 那些无法或难以用HTML实现的,例如输入法 绘图软件一类的就不讨论了.
在决定一款移动设备的软件,是否使用HTML技术时, 我觉得可以从下面几点来考虑.
1 这款软件是否要真的追求在不同平台下的极致体验?
换言之,如果这款软件,在iphone(android)下,不能充分发挥iphone(android)的特性,就无法使用或难以推广吗?
我觉得,大多数情况下,答案是否定的.
2 这款软件是否需要在不同平台上 提供一致的用户体验?
我觉得 大多数情况下,答案是否定的.
对于绝大多数软件,如果它希望提供跨平台版本, 那么它肯定希望在所有平台里 用户的体验都差不多.
事实上 大多数软件也确实是这么做的, 不同平台上的差异往往只是体现在菜单设置页面等部分,而软件的主体UI其实是差不多的.
3 这款软件是否有要成为某一平台上杀手级应用的野心?
这我不好说,也许每一个软件的作者都有如此大的野心,那么也许确实需要针对某一个平台做极致的优化.
不过话说回来,杀手级应用与否 往往在创意, native与否不是关键.
4 很多软件没有跨平台,是不是跨平台就真的没有意义.
很多优秀的手机软件,目前都只有iphone版或者只有android版.
他们不跨平台的因素,我觉得主要是:
a) 技术问题. 某个人只会java或者只会objective-c, 想跨也跨不了.
b) 跨平台的成本和收益不成比例. 例如iphone的移植到android,由于android盗版严重,赚不到钱,索性就不移植了.
c) 开发者的个人喜好.
而不是"跨平台没必要".
5 这款软件的首要任务是什么
先来思考一个问题, 如果某银行要开发一款网银客户端,那么对于它来说:
a) 为现有客户快速的提供在各种移动设备上好用的网银客户端
b) 开发一个NB的网银客户端,超级好用,超级漂亮,让更多的人因为喜欢我们的网银客户端而爱上我们银行,成为我们银行的客户...
这两点哪个更重要?哪个优先级更高?
再换个角度
银行本身 是否希望自己的网银在各种移动设备上,提供统一的UI 一致的UE?
再举个例子,从企业应用来看. 现在很多公司的内部OA或管理系统也要支持移动设备,那么对于这些应用的移动客户端而言
a) 为现有员工快速的提供在各种移动设备上好用的办公系统
b) 开发一个NB的办公系统,超级好用,超级漂亮,让更多的人因为喜欢我们的办公系统而热爱我们的公司热爱工作...
这两点哪个更重要?哪个优先级更高?
也许有人会说,都重要,好的客户端可以提高用户的使用效率,为公司为用户创造无形的价值.
这种说法我认同, 但是问题是, 难道我们的应用的UI真的复杂到"必须用native语言才能开发好"吗?
用native开发好之后,在未来进行跨平台移植的时候 所耗费的成本真的不重要吗?
以上两个例子也许不恰当(银行有钱,他们完全可以找两家公司 一家开发个iphone版,一家开发一个android版...),
但是不管怎样,在设计一款软件时,非功能性上的"首要任务"是我们必须明确的一个问题.
那天和天使@tinyfool 闲聊时,他说过一段话: "你开发跨平台软件的目的,是为了吸引更多的用户, 可如果为了跨平台 而让软件的质量降低,反而会让你失去更多的用户.我们还不如针对一个平台,把一款软件做精做强."
同一天,盛大的android大拿何晓杰也说过一段话:"用HTML技术实现跨平台,对于开发者来讲是方便了一些,但是如果基于这种技术实现的跨平台方案不够好用,却会给用户带来困扰.开发人员不能为了自己方便,而让用户麻烦."
这两段话我觉得很有道理, 但是也许更适合那种"纯粹的HTML应用",而对于我在文章开头提到的那种软件架构似乎并不存在太大的问题.
而且,换个角度来想一想:
a) 如果我的软件"开发跨平台版本目的,并不是为了吸引更多的用户",而只是为了服务于现有的用户呢? (例如前面网银和企业OA软件的例子)
b) 如果用HTML来跨平台并不会降低该软件的质量,并不会给用户带来什么麻烦呢? (对于很多不是很复杂的软件,例如我前面提到的一些小软件个人管理类软件,网站客户端等等)
6 如果软件不需要跨平台, 是不是用HTML技术构建UI就完全没有必要了?
7 对于开发人员来说, 使用HTML技术太复杂了 怎么办?
这个我觉得看个人技术能力吧.用擅长并可行的技术 比用优秀但不擅长的技术更有价值.
=================================
由上面提出的问题,以及我的看法不难得我的观点: 如果我们开发的应用并不一定要"针对某一个平台做精做强","好用且跨平台"如果是我们的需求,那么利用HTML技术来构建软件的UI(前提是有这个技术能力),也许是一个不错的选择.
当然 我提出的这几个问题 未必全面未必有代表性,我的观点也很主观(我本人擅长并且喜欢HTML CSS JS这些web技术), 说的不对的地方还望大家指正.
凌乱的 不系统的说了这么多, 除了想表达一下自己的看法之外, 更多的是想听一听大家的意见和建议.
另外 ,我知道, "反问句"在很多场合下是一种很没礼貌且充满挑衅的句式,不过请相信我,本文中的反问句真的只是为了表达我的一些困惑,
或者是希望引起大家的思考. 没有丝毫的不敬. 如有冒犯,还请海涵.
最后补充一点,虽然我支持在手机应用中使用HTML技术, 但是我却不喜欢senchaTouch jqmobile 一类的移动设备UI框架.
理由很简单,他们的方向似乎有些极端.
我一直期待手机上能够出现一个类似 jquery的轻量级框架(而不是jqueryUI或者jqmobile一类的),
只需要提供构建UI所必须的基础函数,而不要强大到提供一整套的UI.
=================================
FAQ:
问 : 为什么我要叫 @tinyfool 为 天使@tinyfool ?
答 : 因为每当我沮丧 悲伤 彷徨 无助的时候, 一看到 @tinyfool的大胖脸,心情就能好起来, 于是他就成了我的 治愈系小天使.
所以 我叫他 天使@tinyfool .