行動應用程式爭議
簡介
行動應用程式和 HTML5 是目前最熱門的兩項技術,而且兩者有許多重疊之處。網路應用程式可在行動瀏覽器中執行,也可以在各種行動平台上重新封裝為原生應用程式。由於支援的平台範圍廣泛,加上行動瀏覽器的強大功能,開發人員紛紛採用 HTML5 做為「一次編寫,多處執行」的解決方案。但這真的可行嗎?採用原生應用程式仍有許多好處,顯然許多開發人員也選擇這麼做。本文將探討原生應用程式與網頁的優缺點。
功能豐富度
重點:原生廣告可發揮更多效益
我們可以將行動功能分成兩個層面:應用程式本身的體驗,以及應用程式與裝置生態系統的連結方式 (例如 Android 的小工具和通知等功能)。原生廣告在這兩方面都表現出色。
就應用程式體驗而言,原生應用程式的功能較多。他們可以輕鬆取得滑動事件、多點觸控事件 (適用於支援的平台)。這類事件通常會在按下硬體按鍵時觸發,例如 Android 的搜尋按鈕和音量控制鍵。包括 GPS 和相機等硬體。而且在使用者授權後,部分平台會提供作業系統的完整存取權。請嘗試使用 HTML5 偵測剩餘電量!
不過,這不只是應用程式內體驗。Android 等作業系統提供各種方式,讓應用程式與使用者互動,甚至與其他應用程式互動。首頁上有使用中的小工具。您有通知,通知會顯示在裝置的狀態列中。您也可以使用意圖,讓應用程式宣告自己提供一般服務,其他應用程式有時可能需要這類服務。
反駁:原生功能可以擴增,而且網頁也正在趕上
沒錯,許多應用程式內建功能確實超出 HTML5 應用程式的範圍。無論您的網頁技術多麼精湛,如果應用程式受限於沙箱,且沒有相機 API,就無法拍照!幸好,您不必進入該沙箱。如果網頁應用程式真的需要拍照,您可以建立原生應用程式,內嵌網頁檢視畫面,提供大部分的使用者介面。開放原始碼 PhoneGap 架構的運作方式如下:將原生功能公開為網路服務,填補兩者間的落差,而網路檢視畫面會使用標準網路 API 呼叫這些服務。建構這類混合式應用程式時,您也可以連結至小工具、通知和意圖等平台功能。
混合式應用程式 (原生應用程式加上網頁) 並非理想解決方案。這會增加複雜度,而且只適用於包裝成原生應用程式的網頁應用程式,不適用於透過行動瀏覽器存取的傳統網站。但可能不需要長時間使用。網路標準快速演進,新式行動瀏覽器也緊跟腳步。舉例來說,離線儲存空間、地理位置資訊、畫布圖形和影片/音訊播放功能,在現代智慧型手機中都獲得廣泛支援。甚至開始支援相機 - 從 Android 3.1 開始,您可以使用網路標準拍攝相片和影片。最新版 iOS 瀏覽器支援雙向串流的 WebSocket,以及裝置螢幕方向偵測。
整體而言,行動裝置正在不斷演進。但網路也快速發展。光是桌機瀏覽器,就有五大瀏覽器供應商以飛快的速度演進標準並新增功能。將這些功能移植到行動裝置並不容易,但許多功能已陸續加入行動瀏覽器。
原生應用程式的發展速度很快,但網頁正在縮小差距。
成效
優點:原生應用程式執行速度較快
原生應用程式不必處理網頁執行階段障礙。這些程式碼接近硬體執行,可充分運用 GPU 加速和多執行緒等效能提升功能。
Counterpoint:如今的網頁執行階段速度快得多,而且大多數應用程式不需要這麼快的速度
近年來,網路速度大幅提升,V8 是 Chrome 隨附的 JavaScript 引擎,推出時在網頁效能方面有重大進展,而且自此之後,效能只會越來越快:
繪圖引擎也加快了網頁速度,現在硬體加速也開始普及。請查看硬體加速 Canvas 提供的速度減緩:
此外,新的 Web Workers API 可實現多執行緒作業,現代網頁開發人員也能呼叫各種經過效能最佳化的程式庫,以及經過深入研究的效能最佳化技術。雖然這些工具大多是從電腦版網站開始,但仍適用於行動裝置,而且行動裝置越來越受到重視,例如效能專家 Steve Souders 就專門為行動效能工具建立網頁。
目前並非所有電腦版進階功能都已支援所有行動平台,但趨勢顯示這些功能即將推出。此外,請務必注意,大多數行動應用程式並非尖端 3D 遊戲,而是以資訊為基礎,例如新聞、郵件、時刻表、社群網路等。請在行動裝置上造訪幾個網站,例如 Gmail、Amazon、Twitter,即可確認行動版網站效能十分充足。至於遊戲,2D 畫布已可支援基本遊戲,而 WebGL 也開始出現在行動裝置上,請參閱 Firefox 4。在普及之前,有越來越多架構會將 WebGL 應用程式編譯為可運用 OpenGL 的原生應用程式,例如 ImpactJS。
開發人員體驗
優點:原生應用程式較容易開發
原生應用程式使用穩健的程式設計語言 (例如 Java、Objective C、C++),這些語言專為複雜的應用程式開發而設計,且有良好的記錄。這些 API 從一開始就專為支援現有平台而設計。您可以在桌上型電腦模擬器中輕鬆偵錯應用程式,模擬器會盡可能呈現目標裝置的狀態。
網路開發特別麻煩的地方在於,瀏覽器和執行階段的種類非常多。應用程式執行時,不保證功能 X 可用。即使是,瀏覽器又該如何實作?標準可供解讀。
反駁:網頁通常較容易開發,尤其是要指定多個裝置時
首先來處理核心技術。誠然,網頁標準最初的構想是來自於網頁以文件為主的時代,而非應用程式,而 JavaScript 的建構和部署僅花了 10 天!但事實證明,這些技術比想像中更強大,網路開發人員已學會善用優點並克服缺點,現在也瞭解可擴充設計的模式。此外,標準並非一成不變,HTML5、CSS3 和 EcmaScript Harmony 等技術都致力於提升開發人員體驗。您偏好 C++、Java 或 JavaScript,是宗教辯論的問題,也取決於您的舊版程式碼集。但如今 JavaScript 絕對是值得考慮的選項。
瀏覽器/執行階段片段的另一面是,所有這些環境一開始就存在。您以 Java 開發 Android 應用程式,但為了支援 iOS,必須全面移植到 Objective C。只要開發一次網頁應用程式,就能在 Android 和 iOS 裝置上執行,更別說是 WebOS、BlackBerry、Windows Mobile 等等。實際上,如果想提供正確的體驗,您需要為每個平台調整設定。但對大多數行動作業系統來說,您也必須在原生環境中執行這項操作,因為不同版本和裝置的作業系統都不一樣。
好消息是,網路上一直存在「片段化」問題,而且有許多眾所皆知的技術可以解決這個問題。最重要的是,漸進增強原則會要求開發人員先以基本裝置為目標,然後在可用的情況下,加入特定平台的層級。功能偵測的原則也有所助益,如今我們有 Modernizr 等程式庫支援,可支援回應式網頁設計。善用這些技術,您就能將觸及範圍擴展至絕大多數裝置,包括舊式「功能手機」,甚至是手錶和電視等板型規格,無論製造商和作業系統為何。在 2011 年 Google I/O 大會上,我們展示了多重 UI,以邏輯和標記的通用程式碼集為目標,鎖定不同板型規格 (功能手機、智慧型手機、平板電腦、桌機、電視)。
外觀與風格
重點:原生廣告符合平台的外觀和風格
任何平台的決定性特徵之一就是外觀和風格。使用者期望控制項的呈現方式一致,操作方式也相同。某些慣用語會因平台而異,例如使用者「長按」(持續觸控元素數秒) 時會發生什麼情況?各平台都有這類項目的標準慣用語,您無法透過單一 HTML5 應用程式滿足所有需求。
此外,平台的外觀和風格是由平台的原生軟體程式庫所協調,而該程式庫的小工具會封裝使用者期望的外觀和風格。只要使用原生工具包,就能「免費」獲得許多預期的外觀和風格。
反駁:網頁有自己的外觀和風格,而且你也可以自訂最重視平台的網頁介面
如上一節所述,網頁開發方式是先編寫基本「一體適用」版本,然後逐步強化。雖然強化功能通常是以功能為依據,但您也可以指定最重視的平台來強化功能。這是一種「瀏覽器偵測」方式, 有時會受到網路社群反對,主要是因為市面上的瀏覽器種類繁多。但如果您認為有兩到三個平台非常重要,而且願意付出額外心力,與原生替代方案一較高下,這或許是個不錯的選擇。
就基準版本而言,網頁有自己的外觀和風格,甚至可以說每個行動平台都有自己的「網頁外觀和風格」,這是由預設瀏覽器和網頁執行階段所建立。「網頁外觀」可能適合使用者,而且事實上,這樣做可讓您在桌機瀏覽體驗,以及使用者可能使用的其他裝置上,達到更高程度的一致性。此外,許多成功的應用程式也不太支援原生外觀和風格。遊戲當然也是如此 (您最愛的手遊是否會配合行動作業系統的外觀和風格?),就連較傳統的應用程式也是如此,例如在您選擇的平台上查看較熱門的 Twitter 原生用戶端,就會發現各種使用者介面機制。
爭取曝光機會
優點:更容易找到原生應用程式
近年來,Android Market 和 Apple App Store 等應用程式發布機制大受歡迎,是整個行動產業的主要推動力。任何開發人員都可以將原生應用程式提交至市集,使用者可以透過瀏覽、搜尋和取得建議等方式探索應用程式。此外,如果您的工作做得夠好,閃閃發光的評分和評論將說服使用者按下最重要的「安裝」按鈕。
反駁:其實網頁應用程式更容易探索
可以說,網路是史上最容易發掘的媒體。在不起眼的網址中,我們 (至少在理論上) 為網路上發布的所有內容提供專屬 ID,包括在標準網站上發布的任何應用程式。搜尋引擎可讓使用者輕鬆發掘這類內容,其他網站也能連結至這類內容,包括類似行動應用程式市集的網頁應用程式目錄。事實上,只要在電子郵件和社群網路訊息中加入連結,任何人都能與朋友分享網頁應用程式。您也可以透過簡訊傳送連結,行動裝置使用者只要點選連結,就能在裝置的瀏覽器中啟動應用程式。
目前我們尚未提供使用者可評分及評論應用程式的市集,但這項功能也即將推出。閱讀更多內容…
營利
重點:原生廣告可營利
「6 歲兒童在午休時製作應用程式,以每個 $3 美元的價格售出無數份」。您最近經常看到這類新聞,因此無論是大型或小型開發人員,都想透過行動市場賺取收益,這並不令人意外。行動平台提供多種管道,讓開發人員直接收取應用程式費用。最簡單的方式是支付單筆付費,即可永久解鎖應用程式。部分平台也提供應用程式內付款和訂閱機制,並以一致且安全的機制緊密整合。開發人員可透過這些新式付款方式,將爆紅應用程式轉化為長期收益來源。
除了應用程式付款功能,您也可以透過傳統的網站模式營利,例如廣告和贊助。
反駁:網頁營利一直以來都是可行的,而且機會越來越多
如果沒有充足的商機,網路就不會成為現代產業的引擎。雖然「隨用隨付」機制尚未蓬勃發展,但訂閱型「軟體即服務」解決方案確實已在各種利基市場中成為可行選項。例如 Google 應用程式、37Signals 的一系列產品,以及各種電子郵件服務的進階版。此外,直接付款並非從網頁應用程式獲利的唯一方式。包括線上廣告、聯盟連結、贊助,以及其他產品和服務的交叉宣傳。
不過,網頁程式開發人員看到這些新聞標題,難免會對付款功能感到羨慕。您無法將網頁網址提交至原生市集,因此網頁開發人員該怎麼做?您要做的就是建立原生「包裝應用程式」:針對要鎖定的每個平台,建立只包含網頁檢視區塊的空白原生應用程式。您可以在網頁檢視畫面中嵌入實際應用程式,然後將這些應用程式提交至各個市集 (希望可以開始賺錢!)。目前主要市集可能已有數百甚至數千個以網路為基礎的應用程式,其中有些應用程式的同化程度非常高,我們甚至不知道它們是網頁應用程式。
缺點是必須為每個平台進行交叉編譯。這時,PhoneGap 等現有架構就能派上用場。更棒的是,目前正在開發 PhoneGap Build 和 Apparatio 等網路服務。將這些網站指向程式碼存放區,Android 應用程式、iOS 應用程式等就會隨即產生,供您提交至相應商店。您不需要在電腦上安裝原生 SDK,只要有程式碼編輯器和網頁瀏覽器,就能建構所有這些原生應用程式。
市集是否會直接支援網頁應用程式,而不必耗費資源將其包裝為原生應用程式?目前還不清楚。我們知道 Google 去年推出了 Chrome 線上應用程式商店,雖然只適用於桌機,但這個商店已引起其他瀏覽器供應商的興趣,而且整體而言,這是網頁應用程式目錄的趨勢,包括一些行動裝置專用的嘗試。網路商店的概念仍處於初期階段,但前景看好。
結論
雖然很想在此宣布獲勝者,但目前沒有明確的贏家。部分應用程式適合原生平台,部分則適合網頁。網頁堆疊的發展動能或許更強勁,但就功能和執行品質而言,原生應用程式的發展速度也很快。除非網頁技術在大多數行動作業系統上成為一等公民,否則原生技術永遠是重要的考量因素。
本文提及的其中一項技術是混合式應用程式,這可能是某些開發人員的最佳折衷方案:盡可能使用網頁檢視畫面,無法使用時則採用平台專屬的原生元件。
如果選擇網頁路徑,請留意網頁標準和漸進增強原則。網路技術可針對各種裝置和作業系統進行開發。無論您選擇稱之為「碎片化」或「多元化」,網路都接受這種現象,而開發人員可以從所有既有技術中受益。