Amélioration des performances de webView (performances identiques à celles du navigateur Web natif)

Mon expérience est que le chargement de sites Web dans une WebView est beaucoup plus lent que l’exécution des mêmes actions dans le navigateur Web Android. Je peux voir que tous les fichiers ont été chargés dans mon journal Apache, cela prendra cependant quelques secondes avant que la page ne s’affiche dans le contrôle WebView. L’ouverture de la même page dans le navigateur Web natif entraînera un affichage immédiat. Il semble que le rendu soit en quelque sorte paralysé.

Quels parameters de navigateur devons-nous appliquer pour obtenir les mêmes performances que le chargement de la page dans le navigateur Web natif?

Nos parameters actuels:

browserset.setLoadsImagesAutomatically(true); browserset.setJavaScriptEnabled(true); browserset.setDatabaseEnabled(true); browserset.setDatabasePath("data/data/com.xxx/databases"); browserset.setDomStorageEnabled(true); browserset.setRenderPriority(WebSettings.RenderPriority.HIGH); browserset.setSupportZoom(false); browserset.setUserAgentSsortingng( browserset.getUserAgentSsortingng() + " (XY ClientApp)" ); browserset.setAllowFileAccess(true); browserset.setSavePassword(false); browserset.setSupportMultipleWindows(false); browserset.setAppCacheEnabled(true); browserset.setAppCachePath(""); browserset.setAppCacheMaxSize(5*1024*1024); 

J’ai rencontré un problème similaire, et après un débogage intensif, le navigateur natif et le navigateur WebView semblent utiliser différents caches.

Ce code peut être utilisé pour désactiver le cache WebView et a rendu WebView beaucoup plus rapide pour moi (mais au désortingment de la mise en cache). Notez qu’il utilise des API privées. En l’utilisant, vous risquez de voir le code se briser dans les prochaines versions:

 try { Method m = CacheManager.class.getDeclaredMethod("setCacheDisabled", boolean.class); m.setAccessible(true); m.invoke(null, true); } catch (Throwable e) { Log.i("myapp","Reflection failed", e); } 

J’ai finalement eu la raison de la mauvaise performance de Webview android. Notez l’image ci-dessous … Elle utilisait 12 secondes de OnPageStarted à OnPageFinished. Parce qu’il faut charger CSS, javascript et … AJAX …

la fenêtre de débogage:

Je remarque que JQuery et JQueryMobile ont besoin de charger toutes les structures DOM dans Html. Par conséquent, si je charge paresseux le javascript après OnPageFinished, la page devrait apparaître plus rapidement.

Utilisez d’abord setTimeout au lieu de $ (document) .ready (function () {}); dans JQuery.Then utilisez le fichier javascript lazyload.

Le HTML final et le javascript est:

   

Vous pouvez trouver lazyload-min.js dans http://wonko.com/post/painless_javascript_lazy_loading_with_lazyload

Après cela, vous pouvez voir l’image du journal ci-dessous:

après le changement du javascript

Maintenant, cela ne prend que 2 secondes de OnPageStarted à OnPageFinished.

J’ai posté l’article sur https://wenzhang.baidu.com/page/view?key=22fe27eabff3251f-1426227431

Mais c’était écrit en chinois 🙂