增强webView性能(应该与原生Web浏览器性能相同)

我的经验是,在WebView中加载网站要比在Android Web浏览器中执行相同的操作要慢得多。 我可以看到,所有的文件都已经加载到我的Apache日志中,但是这个过程需要几秒钟的时间,直到页面显示在WebView控件中。 在原生Web浏览器中打开相同的页面将立即显示。 看起来,渲染是瘫痪的。

我们必须使用哪些浏览器设置才能达到与在本机网页浏览器中加载页面相同的性能?

我们目前的设置:

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); 

我遇到了一个类似的问题,经过一些大量的debugging后发现原生浏览器和WebView浏览器似乎使用不同的caching。

此代码可用于禁用WebViewcaching,并使WebView对我来说更快(尽pipe不以caching为代价)。 请注意,它使用私人的API,所以通过使用它,你冒险的代码将在未来的版本中打破:

 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); } 

我终于得到了android webview糟糕的性能问题的原因。 注意下面的图片…它使用了从OnPageStarted到OnPageFinished的12秒。 因为它应该加载CSS,JavaScript和… AJAX …

调试窗口:

我注意到JQuery和JQueryMobile需要加载Html中的所有DOM结构。如果我在OnPageFinished之后延迟加载JavaScript,它应该更快地显示页面。

首先使用setTimeout而不是$(document).ready(function(){}); 在JQuery中。然后使用lazyload javascript文件。

最终的HTML和JavaScript是:

 <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> 

你可以在http://wonko.com/post/painless_javascript_lazy_loading_with_lazyload中findlazyload-min.js

做完之后,你可以看到下面的日志图片:

更改后的JavaScript

现在,从OnPageStarted到OnPageFinished只需要2秒钟。

我在https://wenzhang.baidu.com/page/view?key=22fe27eabff3251f-1426227431上发表了文章;

但它是用中文写的:)