999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于前端領域移動端跨平臺方案的研究

2022-08-29 06:59:02岳奎
電腦知識與技術 2022年20期
關鍵詞:跨平臺一致性

岳奎

(四川理工學院,四川自貢643000)

最早的跨端跨平臺解決方案要追溯到PhoneGap 的時代,也叫作Hybird 時代,代表作Cordova,同時期后來也有了基于AngularJS 和Cordova 的增強版Ionic,這些方案都是混合開發(fā)方案。接著迎來了借助原生渲染的方案,先后出現(xiàn)的有React Na‐tive、Weex、uni-app等。之后出現(xiàn)了放棄原生渲染,自建渲染方案的自渲染技術Flutter。本文主要研究跨端方案的演進過程以及各種跨端方案的各自特性。

1 混合開發(fā)時代

混合(hybird)開發(fā)時代的代表作有Apache Cordova[1],其前身就是PhoneGap。它允許開發(fā)者用標準的Web 技術也就是HTTML5、CSS3和JavaScript來做跨平臺開發(fā)。應用在每個平臺的具體執(zhí)行細節(jié)都被封裝了,并借助封裝過原生標準的API去訪問每個設備的功能,比如相機拍照、地理位置定位、傳感器等。

1.1 混合開發(fā)Apache Cordova實現(xiàn)原理以及特點

1.1.1 實現(xiàn)原理

因為是基于Web技術,所以必然依賴于WebView才能進行頁面渲染展示。那么對于Android 來講就是利用WebView 技術,對于iOS 來說就是利用的UIWebView 或者WKWebView。所以Web 和客戶端Native 的通信方式是依賴于WebView 提供的相關接口實現(xiàn)的,對于Android 來講一般常用的相互通信方式是WebView 實例加載Web 的URL 以及Native 注入全局變量(使用addJavascriptInterface[2])到WebView 中,這樣HTML5 就可以全局可見地調(diào)用該方法。對于iOS 來說是利用WKWebview里的evaluateJavaScript 方法直接執(zhí)行即可,那么H5 調(diào)用Native的能力是依靠NA 自身的JavaScriptCore 提供接口出去供H5 來調(diào)用。本質(zhì)上兩端通信還有一個共同的方式就是NA攔截Web的URL(也叫作標準協(xié)議規(guī)范schema)做對應的處理,這是一個比較常用,而且容易自定義的協(xié)議規(guī)范,實現(xiàn)也相對簡單靈活。

1.1.2 混合開發(fā)特性

開發(fā)效率方面,對前端開發(fā)者友好,前端眾多生態(tài)都可以拿來使用,比傳統(tǒng)的Android 和iOS 開發(fā)效率快很多,但涉及Native 的部分,依然需要去熟悉掌握原理。其次是能力受限于橋接層,擴展性低。調(diào)試和錯誤日志不友好。熱更能力方面,因為使用JS,所以是支持熱更。多端一致性方面,因完全依賴于Native的webview層的內(nèi)核渲染,無法媲美原生體驗,涉及宿主問題必然需要開發(fā)者自己處理。性能方面,因渲染依賴于WebView,所以性能不如Native 直接渲染,特別對于長列表渲染[4],性能很差。

綜上所述其實Hybird 方案是一個矛盾結(jié)合體,既要快,又要性能還要完善的生態(tài)。當然開發(fā)者們都看到了此缺陷所以才有了后來大家耳熟能詳?shù)腞eact-Native。

2 原生Native渲染時代

常見的通過Native 渲染的技術目前有React Native、Weex、uni-app,接下來逐個分析相關方案的原理和特性。

2.1 React Native

架構理念是Learn once,write anywhere也就是說掌握了Re‐act 開發(fā),可以同時掌握Web 和App 兩種開發(fā)技能。React Na‐tive[3]用了react 的設計模式,但UI 渲染、動畫效果、網(wǎng)絡請求等功能均由原生實現(xiàn)。開發(fā)者編寫的js 代碼,通過React Native的中間層轉(zhuǎn)化為原生控件來渲染和響應事件,相比ionic等跨平臺應用,極大地提高了用戶體驗。

2.1.1 React Native的框架組成、渲染原理、平臺通信

首先React Native 框架內(nèi)部已提供了很多內(nèi)置組件,如View、Text 等基礎布局組件,一些功能組件如Button、Picker 等,用于列表展示的List 組件和對應Android 平臺和iOS 平臺特有的組件、API 等。同時也提供了編寫與原生平臺交互的接口。渲染這塊主要還是把React寫好的JSX代碼通過ReactElements轉(zhuǎn)換,然后經(jīng)歷React的部分生命周期再由AppRegistry.register‐Component[3]進行注冊,接著通過遍歷dom進行diff算法,但這里是要經(jīng)過消息隊列異步傳遞的,最終把增量的變化傳遞到Na‐tive 側(cè),然后進行渲染真正的Native 組件。平臺通信這塊主要是通過Bridge 來進行通信,所有JS 代碼都是要經(jīng)過JavaScript‐Core編譯,然后給到由C/C++編寫的Bridge橋,當作中間人進行交換通信,再分發(fā)給對應的Android或者iOS宿主。所以這個過程中最消耗性能的其實就是渲染時的消息隊列通信相關的增量變化。大致的架構圖如圖1所示。

圖1 架構圖

2.1.2 React Native特點總結(jié)

開發(fā)效率方面,在Web基礎上引進了React能力,符合前端大趨勢,但涉及與Native 交互的地方就需要開發(fā)者自己處理,這點還是需要對NA比較熟悉,因本地支持熱加載,也有對應配套的調(diào)試dom節(jié)點元素的工具提供,開發(fā)體驗是友好的。動態(tài)化方面,因為用的是react,故可以做線上熱更操作,不過需要結(jié)合三方npm 包或者自研NA 相關的JS Bundle 文件下載、上傳、替換等功能。多端一致性方面,因為是渲染的NA組件,所以可以保證和Native 擁有一樣的用戶體驗,但三方組件依賴性較強,比如版本更新不及時,社區(qū)活躍度不高。性能方面,稍差于Native,但遠好于Hybird,但因為渲染時需要JavaScript 和原生之間不停地進行數(shù)據(jù)通信,在有些場景如拖動可能會因為通信頻繁導致卡頓。其次是因為JavaScript 為腳本語言,執(zhí)行時需要JIT,執(zhí)行效率相比AOT代碼[5]仍有一定的差距。

2.2 Weex

Weex 也是借助NA 來做渲染的一個移動端跨平臺方案。它和React Native 很多方面都很相似,但還是有不同點,比如它使用的是Vuejs 和Rax 這兩個任意一個框架來編寫代碼,同時Weex 的渲染引擎和DSL 語法層是分開的,這點和React Native理念完全不同。因為很多都和React Native 相似,所以這里就簡單闡述。

2.2.1 Weex整體工作流程

首先會把用vue 寫的項目打包成一份JS Bundle,然后部署到服務器,客戶端打開某一個網(wǎng)頁,先下載服務端的JS Bundle,然后在客戶端本地執(zhí)行該JS Bundle。一般會用到JavaScript‐Core 或者V8 引擎去執(zhí)行JS Bundle,JS 執(zhí)行引擎和瀏覽器執(zhí)行過程類似,JS Bundle 的代碼被執(zhí)行,生成VNode 樹進行patch,找到最小DOM 節(jié)點的操作變化,把DOM 節(jié)點的操作轉(zhuǎn)變?yōu)镹ative DOM API 的操作,然后調(diào)用WXBridge[6]進行通信,WX‐Bridge 將渲染指令分發(fā)到Native 渲染引擎,由Native 渲染引擎完成最終的頁面渲染。

2.2.2 Weex的特性

開發(fā)效率方面,和React Native 幾乎沒啥差別,不過本地開發(fā)調(diào)試方面沒有React Native 體驗好。動態(tài)化方面,天然支持動態(tài)化而且還支持拆bundle,React Native當然也支持拆包但需要改造。

2.3 總結(jié)

盡管借助NA 渲染方式相比混合開發(fā)性能高很多,而且方案也很完美,但還有很多不足的地方比如框架自身維護成本高,主要是因為提供的組件大多依賴原生控件,那么這些An‐droid 和iOS 控件也不是一成不變的,系統(tǒng)廠商也會做一些迭代,那么就必然要適配,適配成本很高。所以就會存在天然抹不平雙端的差異,所以才有了后來的自渲染技術。

3 自渲染技術

含義是通過框架自身的自繪引擎,來實現(xiàn)布局和繪制到終端,可以認為是從另一個角度的創(chuàng)新,為人們打開的新的方向和思考,自渲染的代表作就是Flutter,接下來我們就一起了解下Flutter的核心架構思想以及特性。

3.1 Flutter架構組成

Flutter 是以Dart 語言編寫[6],基于Dart 編寫提供了很多組件也叫Widget,有兩套風格的Widget,分別Material 和cuperti‐no。兩套風格有很多widget,比如Text、Input等,也提供了動畫、手勢等通用的Widget。因為沒有采用WebView,也就沒有JS和Native 的通信了,而是自行實現(xiàn)一套UI 框架,在引擎底層通過Skia[6]渲染到屏幕。對于UI之外所需要使用的移動設備自身提供的服務,比如相機拍照、定位等,則采用Platform Channels[6]接口跟原生系統(tǒng)通信的方式來實現(xiàn)。

3.2 Flutter的特點

效率方面,因為采用dart 語言編寫,需要先熟悉dart 語言,但熟練后效率有明顯提升,同樣也支持熱Hot Reload 能夠很好地在本地進行快速的開發(fā)和調(diào)試。動態(tài)化方面,目前iOS是不允許進行熱更的,因為蘋果官方禁止JS Path,當然Android是可以熱更,但大環(huán)境目前是不太友好的。平臺一致性方面,可以做到像素級UI控制,能做到最大限度的還原,保證最大限度在不同平臺的體驗一致性,目前還支持PC、嵌入式等。性能方面,這塊優(yōu)于以上介紹的所有跨平臺框架方案,也是最能媲美原生性能的跨平臺技術方案,因為Dart代碼執(zhí)行效率比JS高很多,而且是通過AOT 編譯成平臺原生代碼[7],渲染采用Skia 方案,既不需要JS Bridge也不涉及虛擬機[8]。

4 總結(jié)

通過從最早的Apache Cordova 混合開發(fā)技術的背景開始,分析了當時混合開發(fā)時代的優(yōu)劣勢,當時的開發(fā)者為此做了很多努力和改進,讓我們知道當時的技術方案是可以降本增效的,但有諸多弊端,于是就迎來了原生渲染技術的時代,這個時代放大了前端生態(tài)的繁榮,很多方案都是借助前端技術棧作為入口,撬動了整個跨端方案,無論是從體驗、性能、一致性上都完勝混合開發(fā),但還是有諸多不完美,比如依賴三方組件,依賴廠商適配,同步迭代更新成本高等問題。最后出現(xiàn)了自渲染技術,這對于整個跨平臺方案來說立意高,創(chuàng)新強,一出來就在用戶體驗層面和平臺一致性上完勝依賴原生Native渲染方案,但不支持熱更,有一定的學習成本。所以綜上所述,目前性能最佳、一致性最好的方案是自渲染。但如果想支持熱更最佳選擇就是React Native。

猜你喜歡
跨平臺一致性
關注減污降碳協(xié)同的一致性和整體性
公民與法治(2022年5期)2022-07-29 00:47:28
跨層級網(wǎng)絡、跨架構、跨平臺的數(shù)據(jù)共享交換關鍵技術研究與系統(tǒng)建設
注重教、學、評一致性 提高一輪復習效率
對歷史課堂教、學、評一體化(一致性)的幾點探討
IOl-master 700和Pentacam測量Kappa角一致性分析
一款游戲怎么掙到全平臺的錢?
電腦報(2021年11期)2021-07-01 08:10:05
跨平臺APEX接口組件的設計與實現(xiàn)
測控技術(2018年9期)2018-11-25 07:44:58
ONVIF的全新主張:一致性及最訪問控制的Profile A
基于事件觸發(fā)的多智能體輸入飽和一致性控制
基于QT的跨平臺輸電鐵塔監(jiān)控終端軟件設計與實現(xiàn)
主站蜘蛛池模板: 最新国产网站| 久久国产热| 狠狠久久综合伊人不卡| 精品福利一区二区免费视频| 丝袜国产一区| 国产凹凸一区在线观看视频| 亚洲三级电影在线播放| 国产在线一区二区视频| 国产色图在线观看| 亚洲视频四区| 福利在线不卡一区| 国产在线观看成人91| 26uuu国产精品视频| 午夜不卡视频| 亚洲av无码人妻| 日本午夜视频在线观看| 日本在线亚洲| 特级精品毛片免费观看| 久久国产拍爱| 欧美成人午夜视频免看| 狠狠干综合| 婷婷综合亚洲| 亚洲色图狠狠干| 国产丝袜精品| 麻豆a级片| 日韩经典精品无码一区二区| 国产成人精品亚洲日本对白优播| 无码人妻免费| 真实国产乱子伦视频| 久久动漫精品| 91蜜芽尤物福利在线观看| 国产对白刺激真实精品91| 久久综合九色综合97婷婷| 欧美97色| 看av免费毛片手机播放| 青青青国产在线播放| 国产高清在线观看91精品| 成人久久精品一区二区三区| 亚洲色欲色欲www在线观看| 国产欧美日韩精品综合在线| 国产国模一区二区三区四区| 中文字幕色在线| 国产二级毛片| 中文字幕在线日韩91| 日韩天堂视频| 又大又硬又爽免费视频| 99偷拍视频精品一区二区| 黄色网页在线观看| 欧美成人午夜在线全部免费| 欧美亚洲日韩不卡在线在线观看| 在线五月婷婷| 日韩在线观看网站| 国产亚洲精品97AA片在线播放| 久久黄色一级视频| 久久久久国产精品熟女影院| 亚洲天堂精品视频| 成人国产一区二区三区| 国产精品任我爽爆在线播放6080| 国产人妖视频一区在线观看| 亚洲天堂视频在线观看免费| 福利一区在线| 久久免费视频6| 少妇精品久久久一区二区三区| 99久久性生片| 日本黄色a视频| 看国产毛片| 国产九九精品视频| 五月天丁香婷婷综合久久| 在线无码私拍| 国产欧美性爱网| 国产一区二区丝袜高跟鞋| 亚洲精品免费网站| 精品国产成人三级在线观看| 国产乱子伦手机在线| 午夜国产精品视频黄| www欧美在线观看| 亚洲欧美综合在线观看| 国产精品一区不卡| 久996视频精品免费观看| 99久久精品免费看国产免费软件| 久久精品丝袜| 极品国产在线|