`

再来谈谈HTML技术在手机开发中的应用.

阅读更多
原文发表于 : 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 .
分享到:
评论

相关推荐

    Struts in Action中文版

    2.2.4. 用 Struts 开发Web 应用......................................................................................42 2.3. 为什么需要框架.................................................................

    struts in Action

    2.2.4. 用Struts 开发Web 应用......................................................................................42 2.3. 为什么需要框架...................................................................

    Java 面试宝典

    一. Java 基础部分............................................................................................................43、Java 中的异常处理机制的简单原理和应用。 .....................................

    net学习笔记及其他代码应用

    30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。 答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。 31.公司要求开发一个继承System....

    iPhone开发基础教程电子书

    首先,对于一个完全没有mac开发经验,甚至从没摸过苹果系统的开发人员来说,首先就是要熟悉apple的那一套开发框架(含开发环境IDE、开发框架uikit,还有开发语言objective-c)。对于有一定编程经验的人来说,学习...

    孙广宇:谈谈HTML5和UniSDP在移动互联网和嵌入式业务的使用

    UniSDP是东软集团基于HTML5构建的统一的跨平台智能设备解决方案,用于支撑移动互联网时代应用和嵌入式业务开发。解决应用开发移动设备终端分裂问题和嵌入式开发成本高、封闭、不智能的问题。使企业在iOS、Android等...

    VB网络编程实例

    ◆ 171.htm 开发网络应用的5个技巧 ◆ 172.htm 利用RAS调用在VB6.0中实现拨号上网 ◆ 173.htm 利用VB提取HTML文件中的EMAIL地址 ◆ 174.htm 枚举出局域网上所有网络资源 ◆ 175.htm 面向...

    C#微软培训资料

    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...

    asp.net知识库

    .NET 2.0 泛型在实际开发中的一次小应用 C#2.0 Singleton 的实现 .Net Framwork 强类型设计实践 通过反射调用類的方法,屬性,字段,索引器(2種方法) ASP.NET: State Server Gems 完整的动态加载/卸载程序集的解决方案 ...

    JAVA面试题最全集

    在Web开发中需要处理HTML标记时,应做什么样的处理,要筛选那些字符(&lt; &gt; & “”) 3.在JSP中如何读取客户端的请求,如何访问CGI变量,如何确定某个Jsp文件的真实路径。 4.描述Cookie和Session的作用,区别和各自...

    ASP开发中数据库文件调用的捷径

     ASP简介 ASP(Active Server Pages)是微软于1996年推出的Web应用程序开发技术,它是一种脚本语言、ActiveX组件及HTML语言等的综合,微软把它描述为”一个服务器的脚本环境,在这里可以生成和运行动态的、交互的...

    java面试宝典

    22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 10 23、String 和StringBuffer 的区别? 10 24、String, StringBuffer StringBuilder 的区别。 10 25、...

    千方百计笔试题大全

    22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 10 23、String 和StringBuffer 的区别? 10 24、String, StringBuffer StringBuilder 的区别。 10 25、...

    最新Java面试宝典pdf版

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    Java面试笔试资料大全

    19、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 90 20.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序...

    leetcode不会-Front-end-Nanodegree:这是我在2020年底Udacity提供的“前端Web开发人员”纳米学位期间记录

    leetcode 不会前端-Web-开发人员-...我想花点时间谈谈在这门课程中获得快乐和成功的一些“软”要求。 让我们暂停一下,讨论一些可以帮助您完成旅程的策略。 我们将涵盖: 有正确的期望 雕刻出时间 主动学习的策略 有

Global site tag (gtag.js) - Google Analytics