WebView の読み込み最適化方法の概要

不言
リリース: 2019-03-22 10:53:13
転載
2668 人が閲覧しました

この記事では、WebView の読み込み最適化の方法を紹介します。参考になると思います。困っている友人は参考にしてください。お役に立てれば幸いです。

WebView の読み込みの最適化

WebView の使用頻度が高くなると、WebView のあらゆる側面の最適化がますます重要になります。わかることは、H5 ページをロードするたびに、大量のリクエストが発生するということです。 HTML本体のURLそのもののリクエストに加え、HTMLが外部から参照するJS、CSS、フォントファイル、画像などもそれぞれ独立したHTTPリクエストとなり、同時リクエストではありますが、全体のWebページ数がある程度に達すると、さらに、ブラウザの解析時間とレンダリング時間、および Web の全体的な読み込み時間が非常に長くなります。同時にリクエストされるファイルが多いほど、消費されるトラフィックも増加します。次に、読み込みの最適化が非常に重要になります。私はこの分野で他に経験がありません。おそらく 3 つの側面があります:
1 つはリソースのローカライゼーションの問題です。
まず第一に、現在の原因では次のことが明らかです。ネットワークの状況により、ネットワーク経由でサーバーからリソースを取得する速度は、ローカルで読み取るよりもはるかに遅くなります。さまざまな最適化戦略について語ることは、実際には、「読み込みの必要性」が速度向上の最大の障害であるという事実を無視しています。そこで私たちの最初のアイデアは、js、css、画像、さらには HTML 自体などの重いリソースをローカライズすることです。これらのリソースはロードされるたびに、ローカル領域から読み取られてロードされます。これらは単に「保存」として覚えておくことができます。アップデートを入手"。
1. 「保存」 - 上記の重量リソースを apk ファイルにパッケージ化し、対応するファイルがロードされるたびにローカルにフェッチします。また、パッケージ化したり、最初のロード中およびその後の間隔で動的にダウンロードして保存したり、すべてのリソース ファイルを Android アセット ディレクトリに保存したりすることもできません;
2. "Get" - WebViewClient の WebResourceResponse を書き換える The shouldInterceptRequest(WebView view、WebResourceRequest request) メソッドは、特定の識別方法 (正規表現など) を通じて対応するリクエストをインターセプトし、ローカルから対応するリソースを読み取って返します;
3. 「更新」 - キャッシュ制御メカニズムを確立し、コントロールローカル リソースを定期的に更新するか、API 通知の形式で更新して、ローカル リソースが最新で利用可能であることを確認します。
2 番目の問題はキャッシュの問題です。
最初のリソース ローカライゼーションのアイデアを採用しない場合、または完全に採用しない場合は、WebView キャッシュをオンにする必要があります (ただし、このアイデアは最初のアイデアとは異なります)。重複しています)。

WebSettings settings = webView.getSettings(); 
settings.setAppCacheEnabled(true); 
settings.setDatabaseEnabled(true); 
settings.setDomStorageEnabled(true);//开启DOM缓存 
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
ログイン後にコピー

ネットワークが正常な場合、デフォルトのキャッシュ戦略が採用され、キャッシュが利用可能で有効期限が切れていない場合はキャッシュがロードされます。それ以外の場合は、数を減らすためにネットワーク経由でリソースが取得されます。ページに対するネットワーク リクエストの数。
ここで言及しておく価値があるのは、WebView を使用してアプリ内でページを表示することが多い場合、ユーザーに Web ページにアクセスしていると感じてほしくないということです。なぜなら、アプリ内に Web ページが多すぎて、ユーザーに Web ページにアクセスしているような感覚を与えてしまうと、アプリの意味が失われてしまうからです。 (つまり、なぜユーザーはブラウザを直接使用しないのでしょうか?)
したがって、現時点では、オフライン キャッシュの問題は注目に値します。たとえユーザーが実行できる操作が非常に限られていたとしても、ブラウザーでネットワーク エラーと同じページが表示されるのではなく、インターネットがない場合でもユーザーがアプリを操作できるようにする必要があります。
私の考えは、キャッシュをオンにするという前提の下で、WebView はページの読み込み時にネットワークの変化を検出します。ページの読み込み中にユーザーのネットワークが突然切断された場合は、WebView のキャッシュ戦略を変更する必要があるということです。

ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
if(networkInfo.isAvailable()) { 
settings.setCacheMode(WebSettings.LOAD_DEFAULT);//网络正常时使用默认缓存策略 
} else { 
settings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);//网络不可用时只使用缓存 
}
ログイン後にコピー

キャッシュがあるので、キャッシュ制御が必要です。これと同様に、定期的に、またはサーバー通知を受け入れることによってキャッシュをクリアまたは更新するキャッシュ制御メカニズムも確立する必要があります。
3 番目の方法は、js の読み込みと実行を遅らせることです。
WebView では、onPageFinished() のコールバックはページの読み込みの完了を意味します。ただし、このメソッドは、JavaScript スクリプトが実行されるまでトリガーされません。ロードしたいページが JQuery を使用している場合、DOM オブジェクトが処理されて $(document).ready(function() {} が完了するまでレンダリングされません。 ) が実行され、ページが表示されます。これは受け入れられないため、Js を遅延ロードする必要があります。もちろん、この部分は Web フロントエンドの仕事です。

この記事はここで終了しています。さらにエキサイティングなコンテンツについては、PHP 中国語 Web サイトの Java チュートリアル ビデオ 列に注目してください。

以上がWebView の読み込み最適化方法の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!