android - Mejora el rendimiento de webView(debe ser el mismo que el navegador web nativo)
performance (2)
Finalmente tengo la razón del problema de rendimiento de Android webview mal. Observe la imagen de abajo ... Usó 12 segundos desde OnPageStarted a OnPageFinished. Porque debería cargar CSS, javascript y ... AJAX ...
Me doy cuenta de que JQuery y JQueryMobile necesitan cargar toda la estructura DOM en Html. Por lo tanto, si carga el javascript después de OnPageFinished, debería mostrar la página más rápido.
Primero use setTimeout en lugar de $ (document) .ready (function () {}); en JQuery. Luego use lazyload javascript file.
El html y javascript final es:
<script src="/css/j/lazyload-min.js" type="text/javascript"></script>
<script type="text/javascript" charset="utf-8">
loadComplete(){
//instead of $(document).ready(function() {});
}
function loadscript()
{
LazyLoad.loadOnce([
''/css/j/jquery-1.6.2.min.js'',
''/css/j/flow/jquery.flow.1.1.min.js'',
''/css/j/min.js?v=2011100852''
], loadComplete);
}
setTimeout(loadscript,10);
</script>
Puede encontrar lazyload-min.js en http://wonko.com/post/painless_javascript_lazy_loading_with_lazyload
Después de hacer eso, puedes ver la imagen de registro a continuación:
Ahora, solo toma 2 segundos desde OnPageStarted hasta OnPageFinished.
Publiqué el artículo en https://wenzhang.baidu.com/page/view?key=22fe27eabff3251f-1426227431
Pero fue escrito en chino :)
Mi experiencia es que cargar sitios web en una vista web es mucho más lento que realizar las mismas acciones en el navegador web de Android. Puedo ver que todos los archivos se han cargado en mi registro de Apache, tomará unos segundos hasta que la página se muestre en el control WebView, sin embargo. Abrir la misma página en el navegador web nativo dará como resultado una visualización inmediata. Parece que la representación está de alguna manera lisiada.
¿Qué configuración del navegador debemos aplicar para lograr el mismo rendimiento que al cargar la página en el navegador web nativo?
Nuestra configuración actual:
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.setUserAgentString( browserset.getUserAgentString() + " (XY ClientApp)" );
browserset.setAllowFileAccess(true);
browserset.setSavePassword(false);
browserset.setSupportMultipleWindows(false);
browserset.setAppCacheEnabled(true);
browserset.setAppCachePath("");
browserset.setAppCacheMaxSize(5*1024*1024);
Me encontré con un problema similar, y después de una gran depuración noté que el navegador nativo y el navegador WebView parecen estar usando diferentes cachés.
Este código se puede usar para deshabilitar el caché de WebView y para que WebView sea mucho más rápido para mí (aunque a costa de no almacenar en caché). Tenga en cuenta que utiliza API privadas, por lo que al usarlo, se arriesga a que el código se rompa en futuras versiones:
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);
}