成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Flutter與Android 原生WebView對比

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

前言

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

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

[[265159]]

Flutter 實現 WebView

flutter 官方是沒有 WebView 組件的,不過強大的 flutter-community 論壇考慮到廣大開發者的需求,開發了 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 系統:Android 8.1.0

加載速度對比

測試網頁打開的速度,只需要獲取 WebView 在開始加載網頁和網頁加載完成時的時間戳,時間戳的差即為打開網頁的時間,我們分別在 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. }); 

為了使差異更明顯,我們選擇較為復雜的 新浪首頁 進行加載的對比,為了減小網絡對加載速度的影響,我們讓手機連接同一個網絡,分別進行 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 次測試所得到的數據:

Flutter與Android 原生WebView對比

可以發現,相同環境下 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對比

 

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

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

HTML5 兼容性對比

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

Flutter與Android 原生WebView對比

 Flutter與Android 原生WebView對比

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

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

總結

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

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

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

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

2014-08-21 15:19:14

MIUI 6

2019-06-25 10:53:06

AndroidFlutter通信

2014-07-30 14:22:41

AndroidWebView內存泄漏

2014-07-29 11:16:07

2009-08-10 09:26:56

2015-03-03 15:53:31

Android控件

2017-06-02 14:00:34

Android截屏WebView

2019-07-22 16:39:57

技術研發Flutter

2018-08-01 15:49:51

AndroidH5通信

2012-07-06 09:59:09

iOS 6Android 4.1

2017-05-26 12:19:28

android代碼WebView

2024-12-25 16:12:18

2017-04-25 12:07:51

AndroidWebViewjs

2020-03-06 09:21:28

PWA原生應用Web

2009-09-24 14:04:25

Hibernate i

2020-07-04 10:41:32

MQTTSSE網絡協議

2019-02-11 08:48:07

XMLJSON前端

2019-03-06 15:04:35

Google安全WebView

2020-07-07 14:09:16

云原生JavaGolang

2020-07-02 16:00:53

?Flutter桌面應用代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久 | 成人在线看片 | 国产精品视频区 | 97影院在线午夜 | 精品av天堂毛片久久久借种 | 久久久99精品免费观看 | wwww.8888久久爱站网 | 亚洲久久 | 亚洲综合在线视频 | 国产精品久久久久久久久久免费看 | 在线观看日韩 | 亚洲精品视频在线 | 久久久久久亚洲精品 | 成人国产精品久久 | 中文字幕国产第一页 | 国产成人精品久久二区二区91 | 777毛片| 精品久久国产 | 在线亚洲人成电影网站色www | 日韩欧美一区在线 | 91免费在线| 国产乱精品一区二区三区 | 欧美一级大片 | 国产ts人妖系列高潮 | 在线国产一区二区 | 久久久久久国产精品 | 蜜桃色网| 国产激情视频在线观看 | 欧美日韩亚洲国产综合 | 久久91精品 | 免费看片在线播放 | 久久久久国产 | 久久亚洲精品久久国产一区二区 | 99久久久国产精品 | 毛片大全| 国产精品视频在线播放 | 91免费观看在线 | 精品av天堂毛片久久久借种 | 欧美精品中文字幕久久二区 | 国产xxxx搡xxxxx搡麻豆 | a国产一区二区免费入口 |