精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

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

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

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

Hybrid App現(xiàn)狀分析

Web App

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

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

Hybrid App

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

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

方案二:使用Adobe Air、RubyMotion、Appcelerator或者是Xamarin這種非官方語言的工具,打包成原生應(yīng)用的方式開發(fā)。為什么筆者會將它們定義 為Hybrid App,主要是它們并沒有很單純地使用原生提供的語言進(jìn)行開發(fā),而是通過對開發(fā)者提供友好的開發(fā)工具,并折中地把這種開發(fā)語言轉(zhuǎn)換成原生語言,最終打包出 整個(gè)應(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è)計(jì),以及開發(fā)都有一個(gè)比較折中的效果出 來,優(yōu)化得好也會有很棒的效果。(當(dāng)年Facebook Three20就使用該方案)

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

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

Native App

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

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

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

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

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

優(yōu)點(diǎn):

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

缺點(diǎn):

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

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

優(yōu)點(diǎn):

  1. 利用自己熟悉的語言,進(jìn)行應(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ā)出來的程序運(yùn)行高效。大部分這種架構(gòu)的應(yīng)用,其實(shí)還是非常依賴底層的東西的,而且包括界面的東西,都是使用原生的API,效率就當(dāng)然要比類似于PhoneGap這種架構(gòu)要好了;

缺點(diǎn):

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

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

優(yōu)點(diǎn):

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

缺點(diǎn):

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

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

因?yàn)榉桨溉械乃枷牖旧暇褪窃鷳?yīng)用的開發(fā)思想了。這里要做的對比應(yīng)該不算大,因此筆者不會做太多的闡述介紹兩者的不同。但是如果是偏重Web架 構(gòu)的,或者是以方案二這種透過特殊工具開發(fā)的,就和原生開發(fā)有對比了。這次筆者暫時(shí)會以方案一拿來討論。討論中主要會以架構(gòu),代碼管理上來討論,當(dāng)然也會 說到部分細(xì)節(jié)。

架構(gòu)討論:

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

從工具上看:

Angular.js

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

Require.js

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

Jade Template Engine

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

Jquery Mobile

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

PhoneGap.js或者Cordova.js

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

PhoneGap Plugins

PhoneGap的插件能夠幫助你快速地抵達(dá)手機(jī)的其他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)頁文件的目錄,非常簡單。下面就用一句話來說說整個(gè)應(yīng)用的運(yùn)作過程吧:

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

就是如此簡單。

看完了簡單的PhoneGap應(yīng)用后,筆者們來看看簡單iOS應(yīng)用在開發(fā)時(shí)候的代碼目錄吧。思路上還是非常相似的。在這里面,筆者不會深入代碼部分去討論具體的實(shí)現(xiàn)以及細(xì)節(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強(qiáng)調(diào)面對對象編程, 且Objective-C中強(qiáng)制要求將類的(interface)與實(shí)現(xiàn)(implementation)分為兩個(gè)部分。類的定義文件遵循C語言之慣例以 .h 為后綴,實(shí)現(xiàn)文件以 .m 為后綴。所以你會看到大量的類文件在里頭,整個(gè)工程就是有不同的類構(gòu)成的。(當(dāng)然可能這么描述不太準(zhǔn)確,但是便于大家理解)

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

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

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

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

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

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

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

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

Hybrid App的新思想

這兩年多以來,因?yàn)槭袌龅牟煌渤霈F(xiàn)了不一樣的需求,各個(gè)技術(shù)都有了新的發(fā)展。對于Hybrid App來說,其實(shí)都有了一些新的解決方案。為了解決問題其實(shí)最終思想都會被還原成以下幾個(gè)點(diǎn)上:

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

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

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

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

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

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

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

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

跨平臺是一個(gè)"幌子"

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

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

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

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

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

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

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

2013-12-16 15:07:59

NativeHybrid開發(fā)移動(dòng)

2013-03-19 09:08:42

Hybrid App

2014-12-25 16:07:32

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

2013-10-09 09:10:28

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

2013-09-04 15:07:06

移動(dòng)應(yīng)用設(shè)計(jì)

2014-12-17 10:12:06

HybridAppFramewor頁面布局

2014-12-08 10:03:47

IonicHybrid混合應(yīng)用

2013-01-24 09:16:23

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

2015-10-08 20:06:30

AppCanHybrid混合開發(fā)

2017-02-15 10:22:23

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

2014-12-17 11:09:39

Hybrid AppWebView裝載頁面

2017-11-20 20:06:59

APP移動(dòng)Web

2014-12-17 10:43:01

Hybrid App平臺開發(fā)

2011-12-12 10:08:39

jQuery MobiHTML5

2015-05-30 10:04:24

線下公開課51CTO沙龍MDSA

2013-09-13 13:16:05

2016-05-13 15:39:34

混合開發(fā)移動(dòng)

2021-08-13 07:56:11

App移動(dòng)應(yīng)用

2014-12-18 13:40:16

Web AppHybrid AppNative App

2016-01-13 09:37:00

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

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

国产精品www994| 成人看片网站| 91免费精品国自产拍在线不卡| 青青久久aⅴ北条麻妃| 亚洲精品国产熟女久久久| 素人啪啪色综合| 亚洲精选在线视频| 久中文字幕一区| 91成人国产综合久久精品| 伊人久久综合| 久久精品成人欧美大片| 免费a v网站| 欧美v亚洲v综合v国产v仙踪林| 亚洲成人资源在线| 中文字幕欧美人与畜| 天堂中文在线资| 韩国欧美国产1区| 国产成人久久久精品一区| 中文字幕在线有码| 欧美在线观看视频一区| 亚洲国产欧美精品| 国产成人高潮免费观看精品| 成人av电影免费观看| 久久精品女人天堂av免费观看| 羞羞影院欧美| 国产日韩欧美不卡| 国产精品二区二区三区| 一本色道久久综合熟妇| 免播放器亚洲| 91精品国产91久久久久福利| 国产三级国产精品国产国在线观看| 国产aⅴ精品一区二区三区久久| 91精品国产黑色紧身裤美女| 亚洲一区在线不卡| 国产一二在线播放| 一区二区三区美女视频| 裸体裸乳免费看| a中文在线播放| 国产亚洲婷婷免费| 久久综合九色99| 天天综合天天色| 99麻豆久久久国产精品免费| 国产99视频精品免费视频36| 99久久国产免费| 久草在线在线精品观看| 国产精品日韩专区| 国产精品自拍第一页| 午夜在线一区| 欧美亚洲在线观看| 国产又大又黄视频| 亚洲欧美不卡| 国产精品精品一区二区三区午夜版| 亚洲欧美自拍视频| 香蕉成人久久| 国产精品久久久久久久久免费看| 秋霞av一区二区三区| 三级精品在线观看| 国产激情久久久| 自拍偷拍福利视频| 蜜臀国产一区二区三区在线播放 | 亚洲专区在线视频| 国产农村老头老太视频| 国产裸体歌舞团一区二区| 成人做爰www免费看视频网站| 91女人18毛片水多国产| 久久99精品久久只有精品| 成人xxxx视频| 超碰在线人人干| 国产综合精品| 国产精品理伦片| 日产精品久久久一区二区| 国产一级片在线| 国产精品久久看| 青青在线免费视频| 阿v视频在线| 欧美性生交大片免网| 国产免费视频传媒| 亚洲欧美专区| 亚洲福利视频二区| 欧美另类z0zx974| 亚洲草久电影| 午夜精品一区二区三区在线视频 | 欧美日韩国产高清一区二区三区| 亚洲第一天堂久久| 极品国产人妖chinesets亚洲人妖| 亚洲精品一区av在线播放| 亚洲图片另类小说| 一区二区三区在线电影| 97在线视频精品| 羞羞色院91蜜桃| 国产精品66部| 日本最新一区二区三区视频观看| 中文在线字幕免费观看| 色婷婷精品久久二区二区蜜臀av | 中文字幕码精品视频网站| 国产在线精品一区二区夜色| 狠狠色噜噜狠狠色综合久| 在线中文资源天堂| 亚洲成av人片在线观看无码| 91小视频网站| 岛国精品一区| www.亚洲一区| caoporn国产| 国产成人av电影| 亚洲巨乳在线观看| 韩国成人二区| 欧美一区二区三区成人| 亚洲永久精品ww.7491进入| 亚洲色图插插| 国产精品三级美女白浆呻吟| 免费看日韩av| 亚洲乱码国产乱码精品精98午夜| 青青在线视频免费| 日本午夜精品| 色综合色综合网色综合| 亚洲在线免费观看视频| 国产亚洲一区字幕| 男女视频网站在线观看| 国产专区精品| 日韩小视频在线| 国产精品午夜一区二区| 91视视频在线观看入口直接观看www | 最新国产在线观看| 欧美日韩在线视频一区| 国产高潮失禁喷水爽到抽搐 | 99热这里只有精品9| 国产日韩亚洲欧美综合| 精品中文字幕av| 精品久久对白| 国内精品视频在线| 国产高清免费在线观看| 亚洲欧美综合色| 午夜宅男在线视频| 日本黄色精品| 国产精品免费视频久久久| 精品亚洲成a人片在线观看| 亚洲h在线观看| 极品白嫩的小少妇| 欧美成人日韩| 亚洲一区二区三区四区视频| 丝袜美腿美女被狂躁在线观看| 欧美性xxxx极品hd欧美风情| 在线观看国产免费视频| 激情综合中文娱乐网| 97欧洲一区二区精品免费| 国产激情在线视频| 欧美一区二区视频网站| 久久国产在线视频| 成人丝袜高跟foot| 色欲色香天天天综合网www| 精品国产午夜肉伦伦影院| 97在线观看视频国产| 亚洲日本香蕉视频| 色视频成人在线观看免| 一级在线观看视频| 久久99热这里只有精品| 日韩不卡一二区| 91午夜精品| 91国自产精品中文字幕亚洲| 亚洲aⅴ乱码精品成人区| 欧美午夜无遮挡| 午夜精产品一区二区在线观看的| 青青草国产精品97视觉盛宴| 欧美日韩亚洲国产成人| 亚洲国产精品免费视频| 久久久亚洲国产| 清纯唯美亚洲色图| 欧美视频在线观看一区| 男人晚上看的视频| 国产成人啪午夜精品网站男同| 男人c女人视频| 色哟哟精品丝袜一区二区| 国产91精品网站| 美女av在线播放| 精品国产区一区| 一级做a爰片久久毛片| 国产精品污www在线观看| 两女双腿交缠激烈磨豆腐| 在线看片欧美| 亚洲v国产v在线观看| 久久久久久久久久久久电影| 午夜剧场成人观在线视频免费观看| 久久米奇亚洲| 欧美一区二区啪啪| 日本在线播放视频| 综合亚洲深深色噜噜狠狠网站| 日本一区二区免费视频| 日日摸夜夜添夜夜添亚洲女人| 91精品一区二区三区四区| 亚洲精品亚洲人成在线观看| 成人激情电影一区二区| 白浆视频在线观看| 中文字幕日韩综合av| 日本久久一级片| 欧美日韩一级大片网址| 日本三级网站在线观看| 国产精品久久久久婷婷二区次| 国内自拍偷拍视频| 人人精品人人爱| 男人插女人视频在线观看| 日韩国产在线| 久久久久成人精品免费播放动漫| 亚洲成人毛片| 国产成人精品a视频一区www| 欧美韩日亚洲| 中文字幕亚洲欧美日韩在线不卡| 全国男人的天堂网| 欧美精品 日韩| 成人公开免费视频| 亚洲国产一区视频| 欧美精品久久久久久久久46p| 26uuu亚洲综合色| 中国特级黄色片| 久久精品国产亚洲一区二区三区| 欧美一级在线看| 亚洲欧美电影院| 国模视频一区二区| 91成人高清| 日韩av在线资源| 精品人妻久久久久一区二区三区| 国产日韩欧美一区在线 | 国产又粗又大又爽的视频| 一本久久青青| 国偷自产av一区二区三区小尤奈| 国产成年精品| 国产精品偷伦视频免费观看国产| 中文在线аv在线| 国产做受高潮69| 手机av在线播放| 美女av一区二区三区| 日本中文在线观看| 中文字幕日本欧美| 成年人在线看| 一本色道久久综合亚洲精品小说 | 亚洲精品毛片一区二区三区| 黑人巨大精品欧美一区二区三区| 久久国产精品波多野结衣| 亚洲另类中文字| 免费无码毛片一区二区app| 亚洲色图.com| 欧美三级在线免费观看| 亚洲色大成网站www久久九九| av在线免费播放网址| 中文av一区二区| 国产成人精品视频免费| 国产精品天美传媒沈樵| 精品一区二区三孕妇视频| 中文字幕欧美三区| 可以免费看av的网址| 国产精品萝li| 国产一区二区三区在线视频观看| 亚洲视频香蕉人妖| 91成人福利视频| 亚洲成人福利片| 西西44rtwww国产精品| 欧美丝袜一区二区三区| 亚洲大片免费观看| 欧美日韩一区精品| 国产强伦人妻毛片| 日韩精品专区在线影院重磅| 欧美一级视频免费| 国产丝袜高跟一区| 91精彩在线视频| 欧美另类99xxxxx| av剧情在线观看| 国产经典一区二区| 四虎精品在线观看| 国产高清自拍一区| 综合亚洲自拍| 中文字幕一区二区中文字幕| 国内自拍一区| 日韩av片在线看| 青青草国产精品亚洲专区无| 色哟哟在线观看视频| 99麻豆久久久国产精品免费优播| 欧美偷拍一区二区三区| 亚洲人成亚洲人成在线观看图片 | 99久久人妻无码精品系列| 中文字幕av一区 二区| 麻豆chinese极品少妇| 欧美日韩美女视频| 亚洲中文字幕无码av永久| 好吊日在线视频| 国产精品啊啊啊| 亚洲综合在线第一页| 99日在线视频| 成人午夜又粗又硬又大| 欧美老熟妇乱大交xxxxx| 国产精品久久久久一区二区三区| 欧美精品一区二区蜜桃| 色999日韩国产欧美一区二区| 国产日韩欧美一区二区东京热| 亚洲激情电影中文字幕| 午夜视频在线| 7777精品视频| 成人在线视频区| 蜜桃传媒视频麻豆一区 | 国产视频精品久久久| 久草资源在线观看| 1769国内精品视频在线播放| 四虎影视成人精品国库在线观看| 国产尤物91| 亚洲天天综合| 国产麻花豆剧传媒精品mv在线| 国产精品原创巨作av| 90岁老太婆乱淫| 亚洲一二三区在线观看| 国产偷人爽久久久久久老妇app| 精品久久国产老人久久综合| 日韩伦理在线观看| 欧洲成人午夜免费大片| 岛国精品一区| 国产91porn| 激情综合网最新| 懂色av粉嫩av浪潮av| 日本丶国产丶欧美色综合| 色噜噜一区二区三区| 久久国产精品偷| 欧美亚洲黄色| 亚洲不卡一卡2卡三卡4卡5卡精品| 欧美全黄视频| 日本一二三区在线| 国产精品视频线看| 一级黄色在线观看| 国产视频亚洲精品| 国产福利片在线观看| 国产激情美女久久久久久吹潮| 91精品久久久久久久久久不卡| 国产精品igao| 国产日韩欧美一区二区三区乱码| 国产精品乱子伦| 亚洲精品国产美女| 国产精品论坛| 国产一区二区三区四区hd| 国产一区二区三区自拍| 日韩精品――色哟哟| 亚洲精品免费一二三区| 国产男女猛烈无遮挡| 久久九九国产精品怡红院 | 国产成人精品日本亚洲11| 亚洲女同中文字幕| 欧美69精品久久久久久不卡| 亚洲美腿欧美偷拍| 国产v在线观看| 久久91超碰青草是什么| 亚洲天堂av资源在线观看| 免费cad大片在线观看| 福利电影一区二区| 久久精品国产亚洲AV无码男同| 精品国产乱码久久久久久闺蜜| hd国产人妖ts另类视频| 精品国产乱码久久久久久久软件 | 亚洲影院高清在线| 亚洲a一区二区三区| 丰满人妻一区二区三区大胸| 亚洲最快最全在线视频| 少妇高潮一区二区三区99小说| 97涩涩爰在线观看亚洲| 美女亚洲一区| 白嫩少妇丰满一区二区| 国产精品少妇自拍| 99热这里只有精品在线| 欧美高清第一页| 亚洲第一二三区| 亚洲久久中文字幕| 欧美日韩中文| 欧美另类视频在线| 视频一区国产视频| www.涩涩爱| 日韩午夜av电影| 中国字幕a在线看韩国电影| 日本欧美精品久久久| 极品少妇xxxx精品少妇偷拍| 久久国产精品波多野结衣av| 日韩黄色av网站| 欧美成人高清视频在线观看| 国产精品88久久久久久妇女| 成人av资源站| 老熟妇一区二区三区啪啪| 久久综合久中文字幕青草| 国内自拍欧美| 男人天堂成人在线| 亚洲欧美日韩精品久久久久| 天堂av手机版| 国产精品久久9| 国产一区二区三区自拍| 久久精品国产亚洲AV熟女| 欧美电影在线免费观看| 手机av在线| 91大学生片黄在线观看| 91论坛在线播放| 999精品国产| 国产高清视频一区三区| 伊人情人综合网| 国产jk精品白丝av在线观看| 日韩欧美国产午夜精品| 婷婷综合六月| 欧美人成在线观看| 国产精品的网站| 欧美白人做受xxxx视频|