web-dev-qa-db-ja.com

webViewのパフォーマンスを強化します(ネイティブWebブラウザーと同じパフォーマンスでなければなりません)

私の経験では、WebViewでのWebサイトのロードは、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);
43
Hansjoerg

私は同様の問題に遭遇し、いくつかの重いデバッグの後、ネイティブブラウザと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);
}
17
Guypo

私はついにAndroid webview bad performance issue。以下の画像に注目してください... OnPageStartedからOnPageFinishedまで12秒使用しました。CSS、javascript、... AJAXをロードする必要があるためです。 ..

the debug window:

JQueryとJQueryMobileはHtmlのすべてのDOM構造体をロードする必要があることに気付きました。OnPageFinishedの後にJavaScriptを遅延ロードすると、ページが速く表示されるはずです。

最初に$(document).ready(function(){});の代わりにsetTimeoutを使用します。 JQueryで。lazyloadjavascriptファイルを使用します。

最終的な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>

Lazyload-min.jsは http://wonko.com/post/painless_javascript_lazy_loading_with_lazyload にあります。

その後、以下のログ画像を見ることができます:

after change the javascript

現在、OnPageStartedからOnPageFinishedにかかる時間はわずか2秒です。

私は https://wenzhang.baidu.com/page/view?key=22fe27eabff3251f-1426227431 に記事を投稿しました

しかし、それは中国語で書かれていました:)

17
DennisZhong