自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Flutter與Android 原生WebView對比

移動開發(fā) Android
說到跨平臺開發(fā),就不得不提 WebView,WebView 可以說是最廉價的跨平臺開發(fā)方案。我們知道,flutter 可以和 native 混合開發(fā),它們可以互相調用。那么當我們進行混合開發(fā)的時候,如果需要使用 WebView,我們應該調用原生的 WebView 還是使用 flutter 自己實現(xiàn) WebView 呢?

前言

自從 google 推出 flutter 跨平臺開發(fā)框架以來,flutter 在各個技術論壇里被炒得如日中天。

說到跨平臺開發(fā),就不得不提 WebView,WebView 可以說是最廉價的跨平臺開發(fā)方案。我們知道,flutter 可以和 native 混合開發(fā),它們可以互相調用。那么當我們進行混合開發(fā)的時候,如果需要使用 WebView,我們應該調用原生的 WebView 還是使用 flutter 自己實現(xiàn) WebView 呢?如果用 flutter 自己實現(xiàn) WebView,它的性能與 native 相比如何呢?今天我們就以 android 為例從幾個不同的維度來實際測試一下!

[[265159]]

Flutter 實現(xiàn) WebView

flutter 官方是沒有 WebView 組件的,不過強大的 flutter-community 論壇考慮到廣大開發(fā)者的需求,開發(fā)了 flutter_webview_plugin 插件,方便在 flutter 中使用使用 WebView。

集成方式很簡單,在 pubspec.yaml 文件中: 

  1. dependencies: 
  2.   flutter: 
  3.     sdk: flutter 
  4.   flutter_webview_plugin: ^0.3.0+2 

接下來所有的對比都是基于 Android 原生的 WebView 和 flutter_webview_plugin 插件,為了嚴謹,并未對第三方 WebView 作對比。

測試手機:小米8SE 系統(tǒng):Android 8.1.0

加載速度對比

測試網(wǎng)頁打開的速度,只需要獲取 WebView 在開始加載網(wǎng)頁和網(wǎng)頁加載完成時的時間戳,時間戳的差即為打開網(wǎng)頁的時間,我們分別在 Android 原生和 flutter 中的相應位置打印 log: 

  1. webView?.webViewClient = object : WebViewClient() { 
  2.     override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { 
  3.         Log.d(TAG, "onPageStarted:" + System.currentTimeMillis()) 
  4.         super.onPageStarted(view, url, favicon) 
  5.     } 
  6.     override fun onPageFinished(view: WebView?, url: String?) { 
  7.         Log.d(TAG, "onPageFinished:" + System.currentTimeMillis()) 
  8.         super.onPageFinished(view, url) 
  9.     } 
  10. 復制代碼 
  11. flutterWebViewPlugin.onStateChanged.listen((state) { 
  12.   if (state.type == WebViewState.finishLoad) { 
  13.     print('finishLoad:' + DateTime.now().millisecondsSinceEpoch.toString()); 
  14.     setState(() { 
  15.       isLoad = false
  16.     }); 
  17.   } else if (state.type == WebViewState.startLoad) { 
  18.     print('startLoad:' + DateTime.now().millisecondsSinceEpoch.toString()); 
  19.     setState(() { 
  20.       isLoad = true
  21.     }); 
  22.   } 
  23. }); 

為了使差異更明顯,我們選擇較為復雜的 新浪首頁 進行加載的對比,為了減小網(wǎng)絡對加載速度的影響,我們讓手機連接同一個網(wǎng)絡,分別進行 10 次測試然后取平均值,另外,我們需要關閉 WebView 的緩存,防止緩存對加載速度產生影響: 

  1. webView?.settings?.cacheMode = WebSettings.LOAD_NO_CACHE 
  1. WebviewScaffold( 
  2.   key: _scaffoldKey, 
  3.   url: widget.url, 
  4.   clearCache: true
  5.   appCacheEnabled: false
  6.   . 
  7.   . 
  8.   . 
  9. ); 

下面使筆者進行 10 次測試所得到的數(shù)據(jù):

Flutter與Android 原生WebView對比

可以發(fā)現(xiàn),相同環(huán)境下 flutter_webview_plugin 的加載速度比 native WebView 略快,但是差異不明顯,基本可以忽略。

結論:flutter_webview_plugin 的加載速度比 native WebView 略快。

內存占用對比

可以使用 AndroidStudio 自帶的 profiler 工具來進行占用內存的測試,我們在 flutter 程序中同時集成調用 native WebView 和 flutter_webview_plugin 來打開淘寶首頁和新浪首頁的方法,在程序剛運行的時候內存占用如下圖:

Flutter與Android 原生WebView對比

然后用 WebView 打開淘寶首頁:

Flutter與Android 原生WebView對比

用 flutter_webview_plugin 打開淘寶首頁:

Flutter與Android 原生WebView對比

 

可以發(fā)現(xiàn),用 WebView 打開淘寶首頁內存基本無變化,但是用 flutter_webview_plugin 打開淘寶首頁內存有明顯的增加,且波動較大。

結論:flutter_webview_plugin 相對 native WebView 而言,占用內存較大。

HTML5 兼容性對比

可以在 html5test 中對瀏覽器的兼容性進行評分,通過測試發(fā)現(xiàn) native WebView 和 flutter_webview_plugin 的得分分別如下:

Flutter與Android 原生WebView對比

 Flutter與Android 原生WebView對比

現(xiàn)在小米8SE手機上,native WebView 和 flutter_webview_plugin 的 html5 兼容性得分都是 501。

結論:native WebView 和 flutter_webview_plugin 的 html5 兼容性無明顯差異。

總結

我們對 native WebView 和 flutter_webview_plugin 分別進行了網(wǎng)頁加載速度、占用內存和 html5 兼容性作了對比,發(fā)現(xiàn) native WebView 占用內存更小,網(wǎng)頁加載速度和 html5 的兼容性無明顯差異。

在實際使用中,由于 flutter_webview_plugin 并不存在于 widget 樹中,所以不能在 flutter_webview_plugin 中使用如 snackbars, dialogs...這些通知交互 widget。但是 flutter_webview_plugin 具有跨平臺的優(yōu)勢,如果需要同時 flutter 項目中同時在 Android 和 iOS 端使用 WebView,建議使用 flutter_webview_plugin,否則,建議使用 native WebView。

希望大家踴躍討論,交流一下你們的寶貴經驗,互相提高下!

責任編輯:未麗燕 來源: 簡書
相關推薦

2014-08-21 15:19:14

MIUI 6

2019-06-25 10:53:06

AndroidFlutter通信

2015-03-03 15:53:31

Android控件

2009-08-10 09:26:56

2014-07-30 14:22:41

AndroidWebView內存泄漏

2017-05-26 12:19:28

android代碼WebView

2014-07-29 11:16:07

2018-08-01 15:49:51

AndroidH5通信

2012-07-06 09:59:09

iOS 6Android 4.1

2019-07-22 16:39:57

技術研發(fā)Flutter

2017-06-02 14:00:34

Android截屏WebView

2024-12-25 16:12:18

2014-09-17 10:57:30

AndroidWebview安全交互

2020-03-06 09:21:28

PWA原生應用Web

2009-09-24 14:04:25

Hibernate i

2020-07-04 10:41:32

MQTTSSE網(wǎng)絡協(xié)議

2019-02-11 08:48:07

XMLJSON前端

2010-08-04 10:17:17

Android開發(fā)WebView組件

2017-04-25 12:07:51

AndroidWebViewjs

2011-12-14 11:38:42

PhoneGapJavaAndroid
點贊
收藏

51CTO技術棧公眾號