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

Han*_*erg 43 performance android 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);
Run Code Online (Sandbox Code Playgroud)

Guy*_*ypo 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);
}
Run Code Online (Sandbox Code Playgroud)

  • `CacheManager.class`类不可用 (6认同)
  • 试试这个:方法m = Class.forName("android.webkit.CacheManager").getDeclaredMethod("setCacheDisabled",boolean.class); (2认同)

Den*_*ong 17

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

调试窗口:

我注意到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>
Run Code Online (Sandbox Code Playgroud)

你可以在http://wonko.com/post/painless_javascript_lazy_loading_with_lazyload找到lazyload-min.js

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

更改javascript后

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

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

但它是用中文写的:)