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

时间:2010-09-06 15:24:27

标签: android performance webview

我的经验是,在WebView中加载网站要比在Android Web浏览器中执行相同的操作慢得多。我可以看到所有文件都已加载到我的Apache日志中,但是在页面显示在WebView控件中之前需要几秒钟。在本机Web浏览器中打开同一页面将立即显示。似乎渲染在某种程度上已经瘫痪了。

我们必须应用哪些浏览器设置才能获得与在本机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);

2 个答案:

答案 0 :(得分:17)

我遇到了类似的问题,经过一些繁重的调试后发现原生浏览器和WebView浏览器似乎使用了不同的缓存。

此代码可用于禁用WebView缓存,并使WebView更快(尽管以不缓存为代价)。请注意,它使用私有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);
}

答案 1 :(得分:17)

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

the debug window:

我注意到JQuery和JQueryMobile需要在Html.So中加载所有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

中找到lazyload-min.js

完成后,您可以看到下面的日志图片:

after change the javascript

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

我在https://wenzhang.baidu.com/page/view?key=22fe27eabff3251f-1426227431

发布了这篇文章

但它是用中文写的:)