App開發的新趨勢

来源:http://www.cnblogs.com/wjiaonianhua/archive/2016/06/22/5605809.html
-Advertisement-
Play Games

移動開發這些年,移動開發者人數越來越多,類似的培訓公司發展也很快,不過伴隨著的是移動應用的需求這幾年發展更為旺盛。要開發好的App,純原生開發肯定是最佳選擇。但是這麼多年發展,原生開發的難度並沒有降低多少,特別是作為一個需要長期運營的App,需要原生人員的長期跟進,人員成本很高。另外,從蘋果和And ...


移動開發這些年,移動開發者人數越來越多,類似的培訓公司發展也很快,不過伴隨著的是移動應用的需求這幾年發展更為旺盛。要開發好的App,純原生開發肯定是最佳選擇。但是這麼多年發展,原生開發的難度並沒有降低多少,特別是作為一個需要長期運營的App,需要原生人員的長期跟進,人員成本很高。另外,從蘋果和Android的崛起開始,為了支持截然不同的二個操作系統,相當於二套開發人員開發二個功能完全的App,可想開發效率的低下。

一直以來,程式員對移動跨平臺的追求就沒有停止努力,跨平臺是為了提高開發效率,隨著帶來的必然是性能的降低。但從軟體發展的歷史看,部分損失某一方面的性能來換取效率的提高還是非常值得的。
就好像我們用c語言替代彙編,損失了掉的那些運行效率基本是可以忽略不計的,我們換來的是開發效率大幅提高,相對於彙編語言而言C語言同時也部分解決了跨平臺跨設備的問題(至少不用再考慮對特定寄存器的編程了)。
同樣當歷史發展到大量用Java替代C語言開發的時候,我們損失掉了c語言的Native設備的開發能力的同時,所換來的多線程開發、分散式開發、跨平臺開發能力的增強,也完全符合www時代發展的需要的。

天然的,移動開發的程式員首先想到的H5和Webview,這是最容易實現的跨平臺方案。在H5的路上移動開發者們做了很多努力。純原生開發我們暫時不提,光從跨平臺來說,發展的歷程可以大概分3個階段:

1. 純H5方式

由於web應用已經在PC應用上占了半壁江山,最早的時候大家想著直接使用手機的系統瀏覽器載入一個網址,這最容易實現,顯然問題很多,性能就不提了,其它方面,比如不同的瀏覽器適配很難,瀏覽器的安全性限制了大部分手機上的設備無法使用,存儲本地都受限制。但是這種方式並沒有消亡,它有一定的適應範圍。特別是隨著微信的崛起,這種方式已經應用很廣了,微信承載了一個統一跨平臺的瀏覽器功能,而且能調用不少原生功能。很多想長期運營的App都會有微信的入口,而且通常是先做微信推廣,再做App。

以上的方式還有一個明顯的缺陷就是應用的差異性,桌面上沒有App的圖標,大家都從瀏覽器或微信入口,對於一個長期運營的想有一定知名度的應用來說肯定無法接受。
接下來移動開發者的想法就是用一個有自己圖標和入口的原生的App的殼載入一個原生的Webview組件,然後載入網頁,同時通過js和原生的橋接技術來實現html和原生功能的調用。這種技術的代表是phonegap技術,它影響了國內很多移動開發者和公司,有不少框架和技術都是基於或學習它。在它被改名之前,我們也完整下載和研究過它的代碼。
這個時期的應用特點是:
* 整個核心就一個webview,裡面頁面的切換都是本地網頁或web網頁的跳轉
* 沒有任何原生ui的參與,所有ui都是靠webview的標簽。有一些簡單原生ui可以以視窗的方式調用起來。
* 整個應用的邏輯都是靠html里的js來驅動。
* 能調用原生的一些基礎功能,比如攝像頭,存儲,資料庫等等。

這種方式起初還是有一定市場的,主要是開發效率非常高,很多已有的PC端的網站改吧改吧就出來一個跨Andoid和iOS的應用。但是這樣的應用只能說勉強能用,稍微複雜一點就連用都不能用了。性能和體驗問題是最主要的,更何況早期Android 2.x時代,iOS4.x,5.x時代手機的性能也不高。

2.H5和Native的混合 (Hybrid)
手機的性能越來越好,H5也越來越流暢,但是隨之而來的是好的原生App越來越多,H5在很多方面還是無法替代原生。於是越來越多的原生功能和H5混合在一起,形成了Hybrid開發的模式。
這裡我要說跨平臺的發展分了二種思路或二個方向:
* 原生為主,更多的加入H5的元素,我們暫且稱之為Native/H5
* H5為主,更多的加入Native的元素, 我們暫且稱之為H5/Native

首先我們看Native/H5,這種應用很多,而且是現有市場上的主流,特別是大型的優秀的以內容為主的App,代表是微信,天貓,京東這些App。裡面都大量使用Webview載入大量網頁。因為原生的更新很麻煩,而那些需要大量內容更新的App必然會選擇Webview作為內容承載。很顯然,這種方式並沒有降低多少成本,原生人員還是需要二套,內容頁面還需要一套熟悉web技術等人員。

我們再看H5/Native,國內的代表應該是Appcan,APICloud,wex5等移動開發平臺。這些框架的最早期就是我上面提到的純H5方式,慢慢加上更多的原生因素,比如一個webview改成多個webview,頁面上加入不少原生的ui元素,比如頁面的titlebar使用原生的ui,還有很多,他們一直在努力解決體驗和性能的問題。也有很多App產出了。國外也有很多框架,不少是通過html實現一套和原生樣子很像的ui組件。但是相比Native/H5, 我覺得H5/Native的發展思路不對。
我們來看看它們的區別,我們先來看二個App的截圖:

我使用了Android的開發者模式,可以看到原生UI組件的邊框。我們可以看到他們的差別
* 天貓App的主要/主體頁面是純原生的頁面,頁面上所有大大小小的元素都是原生的UI組件。而下麵的截圖主體部分都是Webview組件,但是加入一些原生UI。
Native/H5的App所有核心的主要的界面都是純原生,就像一棵樹一樣,通常只有到末端的內容頁面是網頁。頁面的跳轉都是原生效果。H5/Native主要的框架界面也是Webview載入Html,很顯然,體驗上和性能上來說H5/Native要差很多。

* Native/H5的主要邏輯都是靠原生來驅動。H5只是負責簡單的頁面展示和很少的邏輯處理。H5/Native所有的邏輯處理都是靠Webview里的html里的js來處理。這一塊,性能相比又差了很多。另外複雜度上高了很多,webview只是原生眾多組件中的一個,由它來支撐和控制整個App基本上很難,很多開發中的坑無法解決。

* 從成本上來說,Native/H5只是稍微降低了一點成本,因為還是需要多套人馬。H5/Native的成本就降低了很多了,因為只需要一套web開發人員。

3. JS/Lua和Native的混合

從上面我們可以看到Native/H5 和H5/Native 中間我們還需要再努力努力再尋求一個中間狀態,就是儘可能的不犧牲性能的基礎上再降低效率和成本。這幾年證明通過webview和H5的方式已經無法再優化了。

從Facebook的React Native開始,一種新的趨勢已經逐漸冒出來,他們的思路是從Native/H5為源頭,但是拋棄webview,保留js。Facebook自己相當於重新設計了一套類似H5的規範,並設計類似一個webview的組件來解析這套規範,包括ui和js代碼。但是這裡的標簽對應的都是可擴展的純原生的組件。
包括國內的阿裡推出的weex和LuaViewSDK,思想上和React Native類似的。

他們的思路就是從原生開發人員的角度出發,儘量擴大跨平臺的範圍,但是又不帶來體驗的下降。這種趨勢應該是正確的發展方向。

不過這幾個技術現在都是一個SDK,也就是並不能實現真正的跨平臺,做不到一套開發人員,一套代碼就能發佈多個平臺。就像React Native的口號是Learn Once,Write Anyway。

我要重點介紹一下國內一個移動開發平臺Deviceone。Deviceone的發展走過我上面提過的所有階段,它經歷是差不多4年,在內部已經有5個大版本的迭代了。總體來說,也是長期追求效率和性能的最優化的一個結果。

Deviceone的特點是:
 deviceone有一個核心框架,可以理解為類似React Native一樣的SDK,可以解析自定義的ui標簽和js/lua 代碼的功能。差別就是,deviceone定義的ui並不是類似h5,而是把ui代碼和js/lua代碼完全分開成不同的文件。Ui文件通過IDE的拖拽功能來實現,然後通過屬性設置的方式,當然也支持js/lua代碼訪問。我們直觀的看看IDE里可視化ui的圖。

 deviceone並不只是一個能實現跨平臺的原生SDK,在這個框架的基礎上,deviceone對android,ios,windows的移動基礎框架做了抽象,包括移動系統基礎元素Activity,UIViewCotroller之類的,也標準化了事件機制,存儲管理,綁定機制,同步非同步等等基礎結構。目標就是App開發者無需瞭解Android,iOS技術的細節,用一套代碼實現真正的跨平臺,write once,run anyway。

 deviceone並沒有脫離原生開發,只不過把原生開發和App開發者分離了,原生開發者只負責開發和業務無關的組件,比如Button,VideoView之類的。而App開發者不需要理解操作系統的差異,只需要參考組件的一套JS/Lua的API,然後專心整理自己App的業務需求,就能搭建出跨平臺的App。

 deviceone最大的價值就是提供了一套組件重用的規範和標準,而且是跨平臺的組件。我們平常用原生開發很多都是最基礎的代碼重用,組件重用也僅限於單個平臺。而deviceone的組件商店已經積累了快100個跨平臺的原生組件了,是由deviceone官方和一些個人原生開發者開發的,有很多都開源了,大家可以參考。目前正在以收費組件的方式吸引更多原生開發者參與。

 deviceone在現有的很多第三方組件基礎上由實現了跨平臺的封裝。大量的第三方平臺提供了優質的服務,通常原生開發人員只需要集成android和ios都sdk就可以使用,大大簡化了開發人員的。我們在這個基礎上又簡化了一步,一套js的sdk就可以使用。我們已經集成了很多常用的比如百度地圖,極光推送,幾個常用的支付,分享等等。

 deviceone提供了強大的可配置組件雲打包系統,開發者可以在100個組件里勾選自己需要的組件,然後打包成調試App和發佈App。另外提供了很多配置項,儘量簡化開發者的工作。

 deviceone對外正式發佈半年多,已經積累了很多企業應用,最近幾個月逐漸開始積累不少個人應用,感興趣的可以去蘋果的商店和android的市場上搜索一下“慧影時間流”,“納豆-點餐”,“愛搶劵”,“易經造命”體驗一下。這一個月應該又有不少上線應用,請多關註。

介紹了不少,感興趣可以去多關註國內這個優秀的產品,我相信不少移動開發者被國內各種框架的“折磨”失去了對國內移動開發平臺的信心,但是這個平臺值得你花一點時間去研究和體驗。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天在剛申請了博客,一下午都在寫那個隨筆,所以說好的來看c++的也放在了最後,下星期就考試了,這個類的靜態成員是我不是很懂的,在網上 看到一片很詳細的博客考下來回去慢慢看。 在C++中,靜態成員是屬於整個類的而不是某個對象,靜態成員變數只存儲一份供所有對象共用。所以在所有對象中都可以共用它。使用靜態 ...
  • 最近由於項目需要,研究了一下maven的打包,項目要做到 1,生成3個目錄/lib,/conf,/bin目錄 2,把所有的jar目錄編譯、拷貝到/lib目錄(包括maven的jar包和lib目錄下的jar,以及編譯的jar包) 3,把所有的啟動腳本從工程根目錄拷貝到/bin目錄 4,把所有的配置文件... ...
  • 課本源碼部分 第9章 查找 - 雙鏈樹(鍵樹) ——《數據結構》-嚴蔚敏.吳偉民版 源碼使用說明 鏈接☛☛☛ 《數據結構-C語言版》(嚴蔚敏,吳偉民版)課本源碼+習題集解析使用說明 課本源碼合輯 鏈接☛☛☛ 《數據結構》課本源碼合輯 習題集全解析 鏈接☛☛☛ 《數據結構題集》習題解析合輯 本源碼引入 ...
  • 很長時間了,有兩個想要完成的事情,在這裡寫下來,督促自己完成它們。 第一個事情是實現一個模板系統,主要特點: 實現文檔和代碼之間的強聯繫,最外層的模板代碼即文檔 分離關註。不同邏輯部分可以放在不同的文件或代碼段里,即便最終生成的代碼不可避免地混合 跨語言。比如在server端和javascript部 ...
  • 這個模式我在書上(JavaScript設計模式)的那個章節來來回回看了幾遍,有兩個關鍵點並沒有說清楚,導致儘管錶面上是很簡單明瞭,但本質沒有說清,以下是書上的例子。 書中淡解 例子(改前): 例子(改後,命名模式): 我想不明白,憑什麼加上這個方法,就得到了優化,哪裡就解耦了。 當carManage ...
  • 說 明:作者也沒寫過什麼框架,只是分享一些自己的理解,拋磚引玉罷了。如果你寫過一些框架可能會產生一些共鳴歡迎討論,如果你正在寫或正打算寫一個框架可能 會給你一些啟發。本文以為較長可能會分多個篇博客來寫,現在能想到的是主要分為步驟、模式兩部分。如果你覺得好,按一個推薦舉手之勞讓更多的人可以看到。 步驟 ...
  • 二、允許網頁寬度自動調整 "自適應網頁設計"到底是怎麼做到的?其實並不難。 首先,在網頁代碼的頭部,加入一行viewport元標簽。 <meta name="viewport" content="width=device-width, initial-scale=1" /> viewport是網頁默 ...
  • 1、控制橫向和縱向滾動條的顯隱? <body style=”overflow-y:hidden”> 去掉x軸 <body style=”overflow-x:hidden”> 去掉y軸 <body scroll=”no”>不顯 2、表格變色 <TD onmouseover=”this.style.b ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...