H5、React Native、Native應用對比分析離上次在北京開源中國盛典已經(jīng)快一個月了,有點想念@oschina的小伙伴了。我必須承認oschina是國內(nèi)最大的同性社交網(wǎng)站,這也是無可爭議的事實,但是,我真想的是妹子?。。。弁敌Γ?。從上次演講后,有一些同學陸陸續(xù)續(xù)問我演講的PPT在哪,還有不少同學希望看到[手稿],這學習精神,在下實在是佩服啊。有著這么熱情的小伙伴,我激動不已啊,所以在此公布[手稿],方便大家可以將[PPT]和[手稿]雙手齊下,:)。2015年,我們要一起努力完成以前吹過的牛逼..... 下面是[多圖預警],請考慮切wifi,土豪請無視我,也可拿紅包砸我,:) ---------------華麗麗的分割線,主題開始--------------------- “存在即合理”。凡是存在的,都是合乎規(guī)律的。任何新事物的產(chǎn)生總要的它的道理;任何新事物的發(fā)展總是有著取代舊事物的能力。React Native來的正是時候,一則是因為H5發(fā)展到一定程度的受限;二則是移動市場的迅速崛起強調(diào)團隊快速響應和迭代;三則是用戶的體驗被放大,用戶要求極致的快感,除非你牛x(例如:12306最近修改手機號需要用戶自己發(fā)短信接收驗證碼)。 以下簡單的介紹下H5、React Native、Native的含義: 最近三四年間,國內(nèi)外的前端與全棧開發(fā)者社區(qū)都在堅持不懈地追尋使用JavaScript與HTML、CSS技術(shù)體系開發(fā)App內(nèi)場景的核心工程技術(shù)。這種技術(shù),在國內(nèi)很多公司與團隊中,被通稱為H5?!b 這段是取自@童老師給小二我新書作的序,沒有斷章取義的意思。很清楚,H5并不是狹義的HTML5新標簽和API,而是工程化的“In App” technology。 iOS/Android ——原生應用(都懂得,不解釋)。 React Native —— React & Native ,應運而生! 一、React Native的出現(xiàn)React Native的出現(xiàn),似乎是扛起的反H5的旗子。就像當年Facebook放棄H5,全部轉(zhuǎn)向Native一樣。這一點,我們需要認同和保持高度的清醒。那么,React Native是否又是在吞食Native的領(lǐng)地呢?技術(shù)的發(fā)展,是用戶風向標的導向起的作用。任何一門技術(shù)的出現(xiàn),都是當時用戶需求的體現(xiàn)。 我們應該從以下幾點看待React Native的出現(xiàn)。 '鑒往知來'——從過去的教訓中總結(jié)經(jīng)驗,從用戶的角度開拓未來,用戶更希望產(chǎn)品迭代和穩(wěn)定尋求一種平衡 HTML5 vs React Native ? HTML5 : React Native 二、3款應用效果注:以下所有對比均在iOS平臺下 三、工程方案為了評估3種方案的技術(shù)優(yōu)勢和弱勢。我們需要開發(fā)功能大致相似的App。這里,我們使用了“豆瓣”的API來開發(fā)“豆搜”應用。該應用能夠搜索“圖書”、“音樂”、“電影”。想當年,豆瓣以“圖書評論”走紅,尤其是12年當紅!豆瓣是一個清新文藝的社區(qū),一個“慢公司”。最近有一則網(wǎng)傳消息,注意是網(wǎng)傳——“傳京東投1.5億美元控股豆瓣”。今天,不聊豆瓣,我們要聊一個工程化的問題。 我們需要將3款App的功能做到一致,同時需要保持技術(shù)要點一致。比如React Native這里使用了TabBar,那么Native我們也必須使用TabBar。簡單而言就是:功能一致,組件 & API一致。我們功能如下圖所示: 1、H5方案 2、React Native 3、Native(iOS) 四、對比分析很多時候,新技術(shù)的采用最希望看到的是數(shù)據(jù),而不是簡單說“用戶體驗棒,開發(fā)效率高,維護成本低”。不過,生活中也有這樣的同學,知一二而能窺全貌。當然,本人生性膽小,也沒有那么多的表哥和隔壁的老王,所以不敢早下定論,不敢太放肆。趙本山在《大笑江湖》中有句名言“May the force be with you”(別太放肆,沒什么用)。因此,從以下幾個方面做一個簡單的對比。 ---------------分析提綱---------------- 1、開發(fā)方式(1)代碼結(jié)構(gòu) 2、性能 & 體驗(1)內(nèi)存 3、更新 & 維護(1)更新能力 1、開發(fā)方式很多人說React Native的代碼不好看,不好理解。那是因為前端工程師都熟悉了Web的開發(fā)方式。怎么解決這個問題呢,可以先看看iOS代碼,斷定不熟悉iOS的同學心里會默念“一萬匹**馬奔騰”。那時候,你再看React Native,你會覺得使用React Native開發(fā)App是件多么美好的事!OK,我們先來看下三者在開始“一款簡單App”的代碼結(jié)構(gòu)。 (2)UI布局 //JSX 而Native布局就有種讓你想吐的感覺,尤其是iOS的布局。這里不是指采用xib或者Storyboard,而是單純的代碼,例如添加一個文本: UILabel *publisher = [[UILabel alloc]init];publisher.frame = CGRectMake(bookImgWidth + 10, 50, 200, 30);publisher.textColor = [UIColor colorWithRed:0.400 green:0.400 blue:0.435 alpha:1];publisher.font = [UIFont fontWithName:@'Heiti TC' size:13];publisher.text = obj[@'publisher'];[item addSubview:publisher]; 總結(jié):React Native既綜合了Web布局的優(yōu)勢,采用了FlexBox和JSX,又使用了Native原生組件。比如我們使用一個文本組件。 (3)UI截面圖 當然,我們就會想,能夠完全調(diào)用原生組件呢?那樣性能是否更好? (4)路由/Navigation getCurrentRoutes() - returns the current list of routesjumpBack() - Jump backward without unmounting the current scenejumpForward() - Jump forward to the next scene in the route stackjumpTo(route) - Transition to an existing scene without unmountingpush(route) - Navigate forward to a new scene, squashing any scenes that you could jumpForward topop() - Transition back and unmount the current scenereplace(route) - Replace the current scene with a new routereplaceAtIndex(route, index) - Replace a scene as specified by an indexreplacePrevious(route) - Replace the previous sceneimmediatelyResetRouteStack(routeStack) - Reset every scene with an array of routespopToRoute(route) - Pop to a particular scene, as specified by its route. All scenes after it will be unmountedpopToTop() - Pop to the first scene in the stack, unmounting every other scene 相對Native而言,這些接口更Native還是很相似的。 //iOS UINavigationController //相對Web而言,不用自己去實現(xiàn)路由,并且路由更加清晰 [self.navigationController pushViewController:detail animated:YES]; '豆搜' WebApp路由(基于AngularJS)如下: '豆搜' React Native版本導航如下: '豆搜' iOS版本導航代碼如下: 總結(jié):React Native封裝的導航控制更容易理解。 (5)第三方生態(tài)鏈 2、性能 & 體驗我們都很關(guān)注一款App性能。因此測試和體驗App的性能很重要。以下測試,都是基于相同的case。 我們再來看下Hybird App的情況。App已啟動,占用內(nèi)存35~55M;同樣,跑了2min以上,結(jié)果如下圖: 最后,看下React Native的情況。App啟動占用內(nèi)存35~60M,同樣跑2min以上,結(jié)果如下圖: 總結(jié):React Native和Web View在簡單App上相差不大。二者主要:內(nèi)存消耗主要是在網(wǎng)頁數(shù)據(jù)上。 (2)CPU 總結(jié):CPU使用率大體相近,React Native的占用率低于Native。 (3)動畫 (4)安裝包體積 React Native: Native React Native框架包大小 相比快速迭代和熱更新,比Native多了811KB一點都不重要,我們將圖片素材、靜態(tài)資源線上更新緩存起來即可減少很多體積。 (5)Big ListView & Scroll 性能 (6)真機體驗 總結(jié):Native/React Native的體驗相對而言更流暢。 3、更新 & 維護(1)更新能力 (2)維護成本 總結(jié):React Native 統(tǒng)一了開發(fā)人員技術(shù)棧,代碼維護相對容易。 五、綜合1、開發(fā)方式(1)代碼結(jié)構(gòu): React Native更為合理,組件化程度高 2、性能 & 體驗(1)內(nèi)存:Native最少;因為React Native含有框架,所以相對較高,但是后期平穩(wěn)后會優(yōu)于Native。 3、更新 & 維護(1)更新能力: H5/Hybird > React Native > Native React Native定制難度相比Native有些大;但是具備跨平臺能力和熱更新能力。 說了這么多,最后個人建議: 一個新的App完全可以采用React Native開發(fā),這樣成本會低很多。 關(guān)于演講: PPT: http://www.oschina.net/doc/24007 視頻:http://www.oschina.net/question/865233_2145334 (這個演講在移動專場下半場開場) 六、圖書 & 工作機會最后說一下圖書《React Native入門與實戰(zhàn)》吧。這是一本[難產(chǎn)]的家伙,15年寫的比較順利,最后因為北京霧霾,印刷廠偶爾停工,一直在難產(chǎn)。前段時間,圖書發(fā)往各地書店,到店比較遲,我猜測是因為霧霾,找不到高速出口~~目前該書由人民郵電出版社圖靈原創(chuàng)出版,已經(jīng)開賣了。本書主要是希望帶領(lǐng)大家一起進入React Native開發(fā)領(lǐng)域,針對每個API和組件都有詳細的案例,同時為了更好的實戰(zhàn),最后3章以實際案例(通訊錄App,LBS App,基于豆瓣OpenAPI的搜索 App)給出,供大家參考。覺得入門是完全沒問題的,后期大家可以一起交流,爭取豐富國內(nèi)React Native社區(qū)。 《React Native入門與實戰(zhàn)》各網(wǎng)站購買地址: 京東:http://item.jd.com/10089810271.html (目前應該都有貨了,微信有同學傳照片給我看了,鐵粉哈) http://item.jd.com/11844102.html (京東自營,貨源需要跟客服確認哦) 互動:http://product./4904552 (已經(jīng)有貨) 天貓:https://detail.tmall.com/item.htm?spm=a220m.1000858.1000725.21.rc0yeu&id=525484671101&cat_id=2&rn=4690ef5b4e06412ffae4d1cc4f4dcc9a&user_id=1020536390&is_b=1 (天貓這家賣的還可以,不知道為啥京東看不到數(shù)據(jù),京東應該才是技術(shù)買書的最愛啊,聽說也預售了不少呢)
[工作機會] 說了這么多了,都晚上11點30了,困,最近離公司遠?。粚α耍行枰紤]上海工作機會的同學可以聯(lián)系我,前端、H5、Node.js等都要,Android、java都可以推薦哦。目前負責前端團隊,具體問題的可以郵件(wlhmyit@126.com)或者私信給我。以后可以一起裝逼一起擼代碼。 |
|
來自: 俊在晴空 > 《Mobile開發(fā)》