偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

移動混合應(yīng)用Hybrid App開發(fā)實戰(zhàn)

移動開發(fā)
近年來隨著移動設(shè)備類型的變多,操作系統(tǒng)的變多,用戶需求的增加,對于每個項目啟動前,大家都會考慮到的成本,團隊成員,技術(shù)成熟度,時 間,項目需求等一堆的因素。因此,開發(fā)App的方案已經(jīng)變得越來越多了。曾經(jīng)有一段HTML5的小浪潮,無數(shù)的人參與或者看到過一個討論:原生開發(fā)還是混 合開發(fā),又或者是Web開發(fā)?到底最佳實踐是怎樣的,筆者認為只有實踐過的人才會知道。尤其是在這個充滿各種變數(shù)的移動互聯(lián)網(wǎng)時代。

【引言】近年來隨著移動設(shè)備類型的變多,操作系統(tǒng)的變多,用戶需求的增加,對于每個項目啟動前,大家都會考慮到的成本,團隊成員,技術(shù)成熟度,時 間,項目需求等一堆的因素。因此,開發(fā)App的方案已經(jīng)變得越來越多了。曾經(jīng)有一段HTML5的小浪潮,無數(shù)的人參與或者看到過一個討論:原生開發(fā)還是混 合開發(fā),又或者是Web開發(fā)?到底***實踐是怎樣的,筆者認為只有實踐過的人才會知道。尤其是在這個充滿各種變數(shù)的移動互聯(lián)網(wǎng)時代。

【摘要】筆者將從Hybrid App的開發(fā)現(xiàn)狀出發(fā),闡述Hybrid App的優(yōu)缺點,同時對比Hybrid App與Native App的各自特性,***探討一下Hybrid App的新思想方向。

Hybrid App現(xiàn)狀分析

Web App

毫無疑問Web App就是成本***,最快速地解決方案了。尤其是近兩年非常流行的響應(yīng)式設(shè)計,Web App市場提供了非常好的實踐場地。最近典型的Web App***案例是Sun天氣應(yīng)用了,其細節(jié)處理讓人贊不絕口。

一般來說,擁有下面特點的就是一個Web App了:使用瀏覽器運行;純Web前端架構(gòu),很多重要手機特性無法訪問,例如聯(lián)系人以及Push notification之類的;Single Page App;銷售渠道多限于瀏覽器。

Hybrid App

所謂的Hybrid App其實會有不同的分支。而且會和Native應(yīng)用有重合的地方。下面就說三種不同的解決方案。

方案一:使用PhoneGap、AppCan之類的中間件,以WebView作為用戶界面層,以Javascript作為基本邏輯,以及和中間件通訊,再由中間件訪問底層API的方式,進行應(yīng)用開發(fā)。這種架構(gòu)一般會非常依賴WebView層的性能。

方案二:使用Adobe Air、RubyMotion、Appcelerator或者是Xamarin這種非官方語言的工具,打包成原生應(yīng)用的方式開發(fā)。為什么筆者會將它們定義 為Hybrid App,主要是它們并沒有很單純地使用原生提供的語言進行開發(fā),而是通過對開發(fā)者提供友好的開發(fā)工具,并折中地把這種開發(fā)語言轉(zhuǎn)換成原生語言,最終打包出 整個應(yīng)用,所以也屬于混合應(yīng)用范疇。

方案三:在開發(fā)原生應(yīng)用的基礎(chǔ)上,嵌入WebView但是整體的架構(gòu)使用原生應(yīng)用提供,一般這樣的開發(fā)由Native開發(fā)人員和Web前端開發(fā)人員 組成。Native開發(fā)人員會寫好基本的架構(gòu)以及API讓W(xué)eb開發(fā)人員開發(fā)界面以及大部分的渲染。保證到交互設(shè)計,以及開發(fā)都有一個比較折中的效果出 來,優(yōu)化得好也會有很棒的效果。(當(dāng)年Facebook Three20就使用該方案)

因此,Hybrid App有以下的特性:

  1. 開發(fā)時可能不采用或者大部分不采用原生語言,但是卻有所有原生應(yīng)用的特性;
  2. 架構(gòu)方案會和原生有出入,基本由工具而定;
  3. 具有跨平臺特性;
  4. 一般開發(fā)相對原生開發(fā)的方式要簡單。

Native App

Native App毫無疑問是最可靠的方案。但是學(xué)習(xí)成本,人才成本,開發(fā)效率以及照顧不同平臺的特性去考慮,都成為了開發(fā)人員心目中的一道坎。至于說這道坎是不可逾 越的還是一道讓你提高的坎,筆者覺得完全取決于你自己?;诜N種因素的考慮,估計很多人就會選擇折中的方案到了Hybrid App的開發(fā)行列當(dāng)中,包括筆者自己也是這樣過來的。

下面更多的內(nèi)容都將圍繞Hybrid App開發(fā)展開討論。

Hybrid App在開發(fā)當(dāng)中的優(yōu)點和缺點

在Hybrid App的開發(fā)過程中,幾種不同的方案筆者都有經(jīng)歷過。當(dāng)然也經(jīng)歷到了Native App的開發(fā)階段。在如此糾結(jié)復(fù)雜的過程中給了筆者不少的經(jīng)驗,下面筆者也會就自身的經(jīng)驗和大家分享這些方案當(dāng)中的優(yōu)缺點。對于初入行的朋友,筆者是從 Web前端入行的,畢竟門檻較低,而且能夠快速地培養(yǎng)自己的信心以及對代碼的感覺。深入后就開始接觸到移動開發(fā)這塊了。所以會先從Hybrid App的***種方案說起吧。

方案一(Web架構(gòu)為重)

優(yōu)點:

  1. 全Web開發(fā),一定程度上有利于Web前端技術(shù)人員快速地構(gòu)建頁面樣式;
  2. 有利于在不同的平臺上面展示同一個交互層;
  3. 便于調(diào)試,開發(fā)的時候可以通過瀏覽器的方式進行調(diào)試,工具豐富。

缺點:

  1. 雖然說你可以專注在界面以及交互開發(fā)上了,但是這頁會成為一個缺點,比如說要仿造一個iOS的默認設(shè)置界面,就需要大量的html以及css代碼了,而且效果不一定和iPhone上面的界面一樣好;
  2. 正因為這是跨平臺的開發(fā),所以還是這句話:兼容是前端的痛。了解過在Android機器上面的Web開發(fā)就知道這個痛了。比如前些年在Android設(shè)備上面寫圓角,border-radius:10px,在Android的設(shè)備上面會出現(xiàn)毛邊。
  3. 便于調(diào)試其實是在Web界面層的。但是實際上做Hybrid App開發(fā)的時候,你會遇到需求,進入手機的底層請求,做某些處理。比如說如果該應(yīng)用有Push Notification服務(wù)的話,你就需要到底層,獲取Push Notification發(fā)生時的數(shù)據(jù),以及做相應(yīng)的交互處理。當(dāng)然類似PhoneGap這類框架,已經(jīng)有很好的插件機制去幫助你解決類似的問題,當(dāng)然還 有Game Center之類的插件,具體的話可以到Github去關(guān)注PhoneGap官方的賬戶,資源非常豐富;

方案二(編譯轉(zhuǎn)換方式)

優(yōu)點:

  1. 利用自己熟悉的語言,進行應(yīng)用開發(fā),比如RubyMotion,就是使用Ruby語言去做iOS開發(fā),開發(fā)起來的話,代碼量是數(shù)量級地下降啊。
  2. 部分開發(fā)工具提供跨平臺的功能,讓你的應(yīng)用能夠快速地發(fā)布到不同的平臺上面。比如Mono社區(qū)的Xamarin,就是典型的例子了。使用C#語言,能夠把你的應(yīng)用發(fā)布到iOS,Android以及WinPhone市場上面;
  3. 開發(fā)出來的程序運行高效。大部分這種架構(gòu)的應(yīng)用,其實還是非常依賴底層的東西的,而且包括界面的東西,都是使用原生的API,效率就當(dāng)然要比類似于PhoneGap這種架構(gòu)要好了;

缺點:

嚴重依賴于其工具廠商提供的工具包,調(diào)試的時候就要有全套的工具。當(dāng)然一般來說這些廠商都會以收費的形式發(fā)布他們的工具,相應(yīng)的也有客服提供技術(shù)支 持。遇到系統(tǒng)升級,第三方sdk升級,開發(fā)工具出現(xiàn)bug等,那么就要等待工具廠商解決了。相當(dāng)于把風(fēng)險壓在對方身上了,自己卻要承擔(dān)責(zé)任。

方案三(Native架構(gòu)為重)

優(yōu)點:

  1. 這無疑是最穩(wěn)定的Hybrid App開發(fā)方式了,交互層的效率上由Native的東西解決了,而且架構(gòu)上基本就是在App內(nèi)寫網(wǎng)頁,連App Store都是采用了該種方案;
  2. 開發(fā)時分工非常明確,底層的由iOS開發(fā)人員處理,上層的由Web前端開發(fā)人員處理;
  3. 有效的在線參數(shù)配置方式,以便于及時在線替換界面;

缺點:

  1. 團隊至少需要兩個工程師,一個是Web的,一個是iOS的。當(dāng)然如果開發(fā)人員會兩種技術(shù)也可獨立承擔(dān);
  2. 還是運行效率,要權(quán)衡好多少界面采用Web來渲染,畢竟WebView的效率會相對降低,以前Facebook就是因為Web的渲染效率 低下,把整個應(yīng)用改為原生的解決方案。當(dāng)然這里面可以通過優(yōu)化來解決。但是優(yōu)化也是有限度的,如Ruby創(chuàng)始人Matz所說優(yōu)化要恰當(dāng)(包括花的時間,技 巧等),而且有時候的優(yōu)化達到的回報率不一定達到你自己的期望。

Hybrid App和Native App開發(fā)對比

因為方案三中的思想基本上就是原生應(yīng)用的開發(fā)思想了。這里要做的對比應(yīng)該不算大,因此筆者不會做太多的闡述介紹兩者的不同。但是如果是偏重Web架 構(gòu)的,或者是以方案二這種透過特殊工具開發(fā)的,就和原生開發(fā)有對比了。這次筆者暫時會以方案一拿來討論。討論中主要會以架構(gòu),代碼管理上來討論,當(dāng)然也會 說到部分細節(jié)。

架構(gòu)討論:

因為這是偏重于Web開發(fā)的應(yīng)用,這里面就需要開發(fā)人員有很強烈的大型Web前端架構(gòu)思想在里面。提到這里可能馬上浮現(xiàn)在你腦海中的詞語就 是:angular.js,require.js,sea.js,backbone.js等。沒錯,這些工具都能夠幫助你快速地梳理好思路,管理好你的 Web應(yīng)用。對開發(fā)者最友好的,發(fā)揮空間***的非PhoneGap莫屬了。所以筆者就會以PhoneGap應(yīng)用展開討論。(因為類似Sencha也有提供 方案,但是Sencha本身是一個重量級的框架,而且有自己的思想在里頭,加上他本身也提供開發(fā)工具,在這里就不適合討論了。對于開發(fā)者來說可以根據(jù)自己 的需求選擇好工具)

從工具上看:

Angular.js

用于雙向綁定,網(wǎng)絡(luò)請求,視圖管理等工作。

Require.js

javascript模塊化工具,在使用較多的交互對象,PhoneGap插件的時候,你就會發(fā)現(xiàn)一個強大的模塊化工具會在開發(fā)的時候提供極好的幫助。能夠幫助你把整體的代碼,管理得井井有條。

Jade Template Engine

模板引擎。筆者個人比較推薦使用Jade,而且筆者本人也在博客中多次寫到Jade在不同場景下使用的技巧的有關(guān)文章。主要是jade的語法太簡潔了,而且面向JS開發(fā)人員非常友好。如果你還沒有開始使用模板引擎,趕緊加入這個隊列吧,你已經(jīng)落后了。

Jquery Mobile

如果你暫時還沒有一個設(shè)計師,但是又急于構(gòu)造一個應(yīng)用出來。jquery mobile就提供了多套不同風(fēng)格的模板,供你使用,而且還含有不同的交互動畫等。而且也是跨平臺的。當(dāng)然實際場景中,筆者覺得你會花很多時間在寫css 上面,因為設(shè)計總是天馬行空的。當(dāng)然你還有很多工具啦,例如sass,以及l(fā)ess.js等。

PhoneGap.js或者Cordova.js

做Phonegap開發(fā)必須使用的代碼庫,用于和PhoneGap框架通訊?,F(xiàn)在這個庫已經(jīng)改名了,是Cordova。具體為什么改名,得問Adobe咯。

PhoneGap Plugins

PhoneGap的插件能夠幫助你快速地抵達手機的其他API上面,直接使用Javascript來操控這些底層的API。例如調(diào)用Push Notification的相應(yīng)發(fā)生的事件。

從代碼目錄上面看混合應(yīng)用中的Web層:

  1. /js 
  2.           mainView.js 
  3.           settingView.js 
  4.           networkObject.js 
  5.           renderObject.js 
  6.  
  7.      /lib 
  8.           /PhoneGapPlugins 
  9.                push-notification-plugin.js 
  10.                pickerView.js 
  11.           PhoneGap.js 
  12.           zepto.js 
  13.           jquerymobile.js 
  14.           iscroll.js 
  15.           angular.js 
  16.           jade.js 
  17.  
  18.      /css 
  19.           /mainView 
  20.                listItemTemplate.css 
  21.                questionListTemplate.css 
  22.           /settingView 
  23.           /personView 
  24.           /layout 
  25.                navigationBar.css 
  26.                tabButton.css 
  27.           app.css 
  28.  
  29.      /template 
  30.           /mainView 
  31.                listItemTemplate.txt 
  32.                questionListTemplate.txt 
  33.           /settingView 
  34.           /personView 
  35.           /layout 
  36.                navigationBarTemplate.txt 
  37.                tabButtonTemplate.txt 
  38.  
  39.      index.html 
  40.      app.js 
  41.      require.js 

從代碼的目錄上面看,就是經(jīng)典的靜態(tài)網(wǎng)頁文件的目錄,非常簡單。下面就用一句話來說說整個應(yīng)用的運作過程吧:

打開PhoneGap應(yīng)用 ->進入 index.html ->運行require.js ->加載應(yīng)用資源 -> app.js 控制整個應(yīng)用 -> angular.js 進行事件綁定以及視圖渲染 ->視圖渲染的時候會將數(shù)據(jù)和加載好的視圖模板(template目錄下的代碼)處理 ->經(jīng)過jade模板引擎 ->渲染到相應(yīng)的位置上

就是如此簡單。

看完了簡單的PhoneGap應(yīng)用后,筆者們來看看簡單iOS應(yīng)用在開發(fā)時候的代碼目錄吧。思路上還是非常相似的。在這里面,筆者不會深入代碼部分去討論具體的實現(xiàn)以及細節(jié)上的東西。

  1. demoApp 
  2.           /Resource 
  3.                navigationBar.png 
  4.                navigationBar@2x.png  
  5.          /demoApp 
  6.                AppDelegate.h 
  7.                AppDelegate.m 
  8.                /SettingViewController 
  9.                     settingViewController.h 
  10.                     settingViewController.m 
  11.                /MainViewController 
  12.                     mainViewController.h 
  13.                     mainViewController.m 
  14.                /Supporting Files 
  15.                     demoApp-Info.plist 
  16.                     InfoPlist.strings 
  17.                     ... 
  18.           /plugin 
  19.                /AFNetworking 
  20.                     AFHTTPClient.h 
  21.                     AFHTTPClient.m 
  22.                     AFHTTPRequestOperation.h 
  23.                     AFHTTPRequestOperation.m 
  24.                     ... 
  25.           /Frameworks 
  26.                CoreData.framework 
  27.                UIKit.framework 
  28.           /Products 
  29.                demoApp.app 

Objective-C 是一種通用、高級、面向?qū)ο蟮木幊陶Z言。Objective-C是承自Smalltalk的信息傳遞模型(message passing)。Objective-C里,與其說對象互相調(diào)用方法,不如說對象之間互相傳遞信息更為精確。Objective-C強調(diào)面對對象編程, 且Objective-C中強制要求將類的(interface)與實現(xiàn)(implementation)分為兩個部分。類的定義文件遵循C語言之慣例以 .h 為后綴,實現(xiàn)文件以 .m 為后綴。所以你會看到大量的類文件在里頭,整個工程就是有不同的類構(gòu)成的。(當(dāng)然可能這么描述不太準確,但是便于大家理解)

這就和豐富的Web前端有很大區(qū)別了,在Web前端開發(fā)里有HTML,CSS,JS三劍客,必須要用好這三個東西才可以把整個應(yīng)用才可構(gòu)建出來。但 是在Native應(yīng)用中,就很單一了。你只需要把握好Objective-C就可以了。因此對于原生應(yīng)用來說,開發(fā)時只要遵守好規(guī)范,即使是一個新手參與 開發(fā),也可以快速地上手,看懂代碼。因為模式已經(jīng)定好,大家使用同一套的API。按著流程走就好了。當(dāng)然學(xué)習(xí)Objective-C需要過程,但是對于擁 有C語言,Java語言經(jīng)驗的開發(fā)者來說,是非常簡單的事情。

當(dāng)然,原生開發(fā)的缺點也很明顯了,就是滿足不了你的跨平臺需求。

從代碼目錄上面看,其實也基本上看到筆者為什么使用多種JS庫以及框架的原因了。主要的目的就是為了構(gòu)建一個可維護的,具有規(guī)范性的Web應(yīng)用。因 為本身Javascript這門語言非常靈活,100個人可以具有100種風(fēng)格,加上沒有專門對于Javascript開設(shè)的課程,在過往都容易存在對這 門語言的誤解?;诜N種的原因,就要約束好一個應(yīng)用的代碼風(fēng)格,架構(gòu)。此外,Javascript本身沒有類的概念,所以在Javascript的面向?qū)?象編程中:Javascript的數(shù)據(jù)和成員封裝很簡單。沒有類,完全是對象操作。這和Objective-C有很大不同。這個時候必須要有一種心態(tài)處理 好整個Web應(yīng)用:就是盡可能地抽象成對象,你的工作就是對象與對象之間存在交流。

另外有一些點是值得開發(fā)者注意的。對于原生應(yīng)用來說,不管是iOS的,還是Android的,都會提供一套原生界面的庫。以O(shè)bjective-C 為例子。如果筆者需要調(diào)用Alert,筆者只需要編寫:UIAlertView * alertView = [[UIAlertViewalloc]init];,就把這個view聲明好了。再去執(zhí)行相應(yīng)的方法,就可以了。但是對于Web應(yīng)用來說,就需要編 寫<div id='alertView'><button>確定</button></div><script& gt;$('#alertView').show();</script>

,一堆的css代碼和html代碼去實現(xiàn)。當(dāng)然你會詢問筆者,直接寫 alert() 不就可以了嗎?要是真這么簡單的話,建議你在iOS的WebView中編寫一下alert,實現(xiàn):title 是提示,內(nèi)容是:alert view,確定按鈕的文字是:好的。你就知道WebView的限制在哪里了。

因此要完成JS在Web App開發(fā)當(dāng)中的***實踐,肯定要學(xué)習(xí)優(yōu)秀的思想和實現(xiàn)方法了。在這篇文章里面,筆者們暫時先不去做這種深入的討論。而是先把例子拋給大家,也許會在下一次討論的時候,再詳細深入以下這兩個項目。

***個是斯坦福的iOS開發(fā)公開課中的例子,使用objective-c實現(xiàn),一個簡單的卡牌游戲。這是經(jīng)典的mvc開發(fā)了。項目地址如下:https://github.com/lbj96347/Stanford-W2013-CardGame,如果您正在使用Mac,那恭喜你,可以馬上編譯這個游戲進行測試以及代碼瀏覽。

第二個是使用JavaScript編寫的例子,實現(xiàn)同樣的需求,做一個簡單的卡牌游戲。但是使用的是HTML+CSS+JS開發(fā)。同樣學(xué)習(xí)了繼承以及mvc的思想。項目地址是:https://github.com/lbj96347/JSMatchismo ,再次恭喜你,不管使用什么電腦,都可以隨時瀏覽代碼以及運行該游戲。

Hybrid App的新思想

這兩年多以來,因為市場的不同,也出現(xiàn)了不一樣的需求,各個技術(shù)都有了新的發(fā)展。對于Hybrid App來說,其實都有了一些新的解決方案。為了解決問題其實最終思想都會被還原成以下幾個點上:

  1. 根據(jù)需求,選擇工具;
  2. 用適當(dāng)?shù)墓ぞ咦鲞m當(dāng)?shù)氖虑椋嗅槍π缘亟鉀Q問題;
  3. 世界是平衡的,對于開發(fā)者來說,做的有用功越多,用戶體驗就越好,反之越差;
  4. 跨平臺是一個"幌子",什么都做得到不代表什么都做得好

這也是筆者體驗最深的幾個點。而且你會發(fā)現(xiàn)Hybrid技術(shù)也基本在跟隨這幾個點來走。

根據(jù)需求,選擇工具

如果你使用過Jquery Mobile,你做過過場動畫(就是從一個view去到另一個view),過場動畫在iOS的navigationController中很常見,而且很 簡單,效果很好很流暢。在Jquery Mobile中使用ajax,css去實現(xiàn)了,核心代碼可能就幾十行??赡芨鷌OS里面的差不多(如果包含動畫),但是實際出來的效果卻差強人意。會出現(xiàn) 類似的問題:頁面抖動,感覺不連貫,在部分的設(shè)備下運行緩慢。如果你的應(yīng)用要求的體驗并不是很高,例如一些新聞?wù)故绢悜?yīng)用,更強調(diào)排版。這里小小的體驗差 距,就可以忽略了。(因為英國BBC就是這么干的),但是如果你的應(yīng)用非常強調(diào)體驗細節(jié),這里的解決方案可能就不適合了?;蛟S你要做優(yōu)化,但是優(yōu)化的時間 可能足以夠你去學(xué)習(xí)更多的東西了。這樣的話,你是繼續(xù)選擇用一個不成熟的工具,還是選擇去學(xué)習(xí)一種新的語言呢?所以還是根據(jù)需求而定吧。

另外一個例子。曾經(jīng)有人跟筆者提及到,在使用HTML和CSS編寫應(yīng)用界面時確實很爽,但是效率不咋的。那為什么不嘗試把應(yīng)用內(nèi)容直接搬到 Canvas里面呢?構(gòu)造一套足夠強大的工具,一套足夠彪悍的UI組件,把整個應(yīng)用運行于Canvas中。這種想法是很好的,但是其實里面的短板頁就出現(xiàn) 了,Canvas的性能雖高,但是里面的元素組件多了你可以保證效果高?所有的東西都會依賴于JavaScript,這對于Javascript來說要構(gòu) 造足夠強悍的面向?qū)ο蟮慕M件,也非簡單之事,拋棄了CSS和HTML,意味著內(nèi)部的設(shè)計組件能夠高度定制,松耦合做得非常好。完全是實現(xiàn)了一套新的 xcode和ui庫啊。這就不是在解決一兩個問題了。既然有這么一個工具,筆者為什么不選擇更好的,例如Xamarin。

用適當(dāng)?shù)墓ぞ咦鲞m當(dāng)?shù)氖虑?/h3>

做游戲的朋友估計就深有體會了。為了解決Canvas性能的問題,越來越多的人和應(yīng)用廠商(尤其是瀏覽器廠商),提供一種解決方案就是希望將 Canvas API和系統(tǒng)底層的API打通。意味著你只需要編寫Canvas代碼,實際做渲染的時候使用的是系統(tǒng)底層的東西,整體上提高了性能。例如Ejecta http://impactjs.com/ejecta 這個東西。

對于開發(fā)人員來說用Javascript編寫游戲邏輯以及做各種控制都非常舒服,而且因為用的API相同,放到PC上(放開性能問題),同樣可以運 行。這就真的做到了跨平臺,但是又不缺乏效率。讓筆者感觸最深的就是@大城小胖在做混合應(yīng)用(做游戲)時的做法,小胖的游戲架構(gòu)。JS負責(zé)邏輯,引擎。 JS Binding綁定原生OpenGL,讓原生的來做復(fù)雜的渲染處理。HTML CSS可以處理UI(比如一些Button)。這就是典型的:讓工具去做其擅長的事情。

跨平臺是一個"幌子"

為什么這么說?筆者不是一直希望大家能夠跨平臺么?是的。但是要真的認清這個坎。從IE兼容,到目前多個瀏覽器的亂戰(zhàn),到iOS以及Android 設(shè)備Web上的兼容,這不就是一個歷史的例子嘛??缙脚_不是不好,只是在一個時代里,你能夠達到怎樣的效果,真的是很難估量的。就好比你出國旅游,如果兩 國關(guān)系非常好,而且很多慣例法律一致,對你來說不會造成太多負擔(dān)。但是如果語言不一樣,生活習(xí)慣什么的都不同,你就很難適應(yīng)。同樣是人,你很難在不同的環(huán) 境下生存。真正的跨平臺,就意味著大家求同。這絕對不是一兩天的事情,也非簡單的事情。

那為什么還要跨平臺。業(yè)務(wù)需求嘛。在這里必須就要遵守根據(jù)需求選擇工具,用適當(dāng)?shù)墓ぞ咦鲞m當(dāng)?shù)氖虑椋鶕?jù)實際情況來作開發(fā)。如果可以,筆者覺得很有 必要都了解一遍,這樣的話各種開發(fā)的思想就會影響到你,你就能夠分辨到什么是好什么是壞,做更好的選擇。例如筆者剛剛說到的過場動畫的例子。其實完全可以 使用筆者說的混合應(yīng)用中,方案三,去解決這個問題。你無非就是希望用navigationController做一個漂亮的過場動畫嘛,在iOS中幾句代 碼就實現(xiàn)了。

再說一個例子吧,如果你正在做一個todo-list的應(yīng)用,其實無非就是簡單存儲數(shù)據(jù)以及做一些相關(guān)界面渲染。在使用原生的控件的話,有大堆的代碼要寫,而且還要處理好內(nèi)存問題。但是其實如果使用Web的方式實現(xiàn),比如backbone.js??傮w代碼可能100行左右。就把整個應(yīng)用實現(xiàn)了,包括本地存儲。你要做的事情就是把整個界面搭建得漂亮些。可能就1個小時的工作。但是如果用原生開發(fā),很難保證到一個小時內(nèi)完成,因為調(diào)試編譯都需要時間吧?況且還有界面呢。

所以要認清跨平臺這個"幌子",并非所有的問題都用同一個方法處理。筆者們要融匯貫通嘛!

總結(jié)和筆者的感受

對于做Web App的坑,其實挺多的。這里無法一一表達。但是相信實踐過就會知道如何更好地繞過這些坑(例如筆者說的過場動畫的例子)。那么對于開發(fā)者來說要有堅強的 毅力,努力去實踐,滿足自己永遠不能滿足的好奇心,因為最終的經(jīng)驗會給你帶來不一樣的感受,stay hungry。同時筆者們必須保持一顆學(xué)習(xí)的心,不斷地吸收有營養(yǎng)的思想,學(xué)習(xí)新的知識,不要太容易滿足,stay foolish。每一種語言都會有其中的思想,每一種工具都有自己解決問題的方法論。多嘗試就能夠給自己帶來更優(yōu)秀的架構(gòu),更優(yōu)秀的應(yīng)用,提供給用戶更好 的體驗。當(dāng)然,也會有更好的回報。

責(zé)任編輯:閆佳明 來源: infoq
相關(guān)推薦

2013-12-16 15:07:59

NativeHybrid開發(fā)移動

2013-03-19 09:08:42

Hybrid App

2014-12-25 16:07:32

DHH混合移動應(yīng)用Hybrid App

2013-10-09 09:10:28

移動應(yīng)用開發(fā)NativeHybrid

2013-09-04 15:07:06

移動應(yīng)用設(shè)計

2014-12-17 10:12:06

HybridAppFramewor頁面布局

2014-12-08 10:03:47

IonicHybrid混合應(yīng)用

2013-01-24 09:16:23

移動開發(fā)者移動應(yīng)用開發(fā)

2015-10-08 20:06:30

AppCanHybrid混合開發(fā)

2014-12-17 11:09:39

Hybrid AppWebView裝載頁面

2017-02-15 10:22:23

移動應(yīng)用開發(fā)

2017-11-20 20:06:59

APP移動Web

2014-12-17 10:43:01

Hybrid App平臺開發(fā)

2015-05-30 10:04:24

線下公開課51CTO沙龍MDSA

2011-12-12 10:08:39

jQuery MobiHTML5

2013-09-13 13:16:05

2016-05-13 15:39:34

混合開發(fā)移動

2021-08-13 07:56:11

App移動應(yīng)用

2014-12-18 13:40:16

Web AppHybrid AppNative App

2016-01-13 09:37:00

IDC混合開發(fā)react nativ
點贊
收藏

51CTO技術(shù)棧公眾號