UIWebViewの内部にWebページをロードする必要があるアプリケーション(swift)で作業しています。そのUIWebViewには<img src="http://www.example.com/uploads/43454.jpg" />
要素があります。<img>タグソースをローカル(キャッシュされた)ソースに置き換えます。
このシナリオではすべて正常に動作しますが、問題は43454.jpgイメージが毎回5〜10メガバイトになる可能性があることです。したがって、UIWebViewが読み込まれると、イメージを約2分間ロードし続けます。さらに、この<img>
タグはランダムなソース、すなわち22234.jpg
,98734.jpg
,33123.jpg
などを持つことができます。 aplicationので我々は、のUIWebViewに表示ダウンロードしてキャッシュするために必要なすべての可能な画像(この目的のためにカワセミライブラリを使用)
一覧:だから私は、次のアプローチを使用しようとしていますこのような状況に対処する
起動。
私のUIWebViewが最初にURLを読み込んだとき、それには何もありません
<img>
要素src
属性ですが、data-image-name="22234.jpg"
属性 - 値のペアがあります。これでUIWebViewのコンテンツの読み込みが完了したら、
data-image-name
属性からイメージ名の値を取得します。キャッシュ内のそのイメージを確認し、
<img>
要素のsrc属性をキャッシュからそのイメージで更新します。
このようにして、UIWebViewはイメージを何度も何度もダウンロードすることはありません。
注:UIWebViewが自動的にリソースキャッシュを管理すると仮定します。他のすべてのファイルタイプ*.js
,*.css
は適切にキャッシュされており、繰り返し読み込まれることはありません。同じものは画像のために行っていない、理由を知らない。
このアプローチが大丈夫だとすれば、どのように達成するべきですか(Swift 2.2)?
すばらしいヘルプがあれば幸いです。ありがとう
私の最初の賭けは、サーバー側にキャッシュコントロールを持つものがあることでしょう。デスクトップブラウザーでサイトを開き、まずサーバーがイメージのために返すヘッダーを表示することができますか?['Cache-Control'](https://developer.mozilla.org/en-US/docs/Web/HTTP /ヘッダー/キャッシュコントロール)?現代のブラウザの「開発ツール」で行うことができます。キャッシュされているJSファイルとCSSファイルでヘッダーを比較することもできます。また、質問にヘッダを追加するのに役立つかもしれません。 – SergGr
その作業を行うのが難しいようです。基本的にUIWebViewとネットワークの間に独自のキャッシュを挿入する必要があります。私の直感はそれが不可能だということです。 iOSがサポートしているものではありません。ページをネイティブのiOSビューに翻訳できますか?そうであれば、画像の読み込みをより詳細に制御できます。 –
@SergGrに言及しているように、UIWebViewにはキャッシングが組み込まれていますが、高度なレベルでは再実装する可能性があります。 jpgのヘッダーがキャッシングを無効にしていないことを確認してください。このキャッシュをプライミングしたい場合は、起動時にこれらのイメージを使ってWebViewをオフスクリーンにしてロードすることができます。 – dmorrow