29

ページのHTML全体を保存した後(リンクをたどって各ファイルをHTMLファイルと一緒に保存する)、CSSファイルと画像とともにWebページを(完全に)キャッシュする必要があるアプリを開発しています。

HTMLファイルをオフラインで表示しているUIWebViewときに、ページの読み込みに長い時間がかかります。これは、私がすでにオフラインであり、ファイルがCSSと画像とともにディスク上にあるためです。

私はこのコードを使用してファイルをロードしています:

  NSData *htmlData = [NSData dataWithContentsOfFile:htmlFilePath];
  [wView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL fileURLWithPath:self.htmlFolderPath isDirectory:YES]];

UIWebViewファイルをより速くロードできる他の方法でファイルをロードする方法はありますか?

PS:シミュレーター(オフライン)では非常に高速にロードされますが、デバイスでは(すでにオフラインでキャッシュされたファイルを考慮すると)長い時間がかかります

手伝ってくれてありがとう。

4

7 に答える 7

7

あなたのソリューションは実際にhtmlファイル以外のもの、つまり写真、cssなどをキャッシュし、それらをhtmlページに再リンクしていますか? 私はあなたがhtmlページと外部リソースをダウンロードしてキャッシュしていると推測しています.UIWebViewはそのhtmlを読み込んでいて、外部リソースを読み込んでいます。これは、シミュレーターでの高速なパフォーマンスとデバイスでの低速なパフォーマンスを説明します。

これは、まさにあなたがやろうとしていることを行うために設計されたライブラリです: ASIWebPageRequest

また、単にディスク I/O のボトルネックが原因である可能性があることにも注意してください。私は自分のプロジェクトで大きな画像を uitableview にロードしていたことを知っていますが、それらがキャッシュされた後でも、それらが非常に大きいため、ディスクから引き出すときにかなりの遅延があることに気付きました。

于 2010-08-03T21:30:12.443 に答える
4

特定の種類の CSS が WebView のレンダリングを停止させる可能性があることを発見しました。例えば:

body { -webkit-box-shadow:inset 0 0 100px #222; }

これはシミュレーターでうまく機能し、見栄えもします。しかし、携帯電話 (iPhone 4、iOS 4.2 でさえも) では、単純なページのレンダリングに 10 秒かかります。

于 2011-01-15T14:59:58.863 に答える
3

ページを解析してレンダリングする必要があるため、これにはおそらく時間がかかるため、バックグラウンドで UIWebView を起動することを検討してください。つまり、サブビューとして追加されますが、表示されません。

おそらく、UIWebView は何もする必要がないことを知っているほどスマートですが、少なくとも html と css の解析はすぐに行われるのではないかと思います。

表示されないと何もできない場合は、サイズを 1x1 に縮小し、不透明度 = 0 に設定し、そのピクセルをタッチ イベント処理に干渉できない場所に配置します。

完璧ではありませんが、うまくいくかもしれません。

于 2010-08-03T11:47:13.410 に答える
1

私はあなたがこれをすることが決してできないだろうとほぼ確信しています。UIWebViewは、ローカルページであっても、Webページを処理するのに少し時間がかかります。

そのことを念頭に置いて、ページが表示される前にページをプリロードしてみることができます。たとえば、ユーザーがボタンを押した後に表示する場合、ユーザーが実際にボタンを押したときではなく、ボタンを表示したときにページをプリロードします。読み込みが遅いことにユーザーは気づきません。これはバックグラウンドで処理されているため、ユーザーがボタンを押すと、ページが既に読み込まれているためです。

于 2010-08-10T11:12:17.640 に答える
0

HTML をファイルから UIWebView にロードする別の方法について、アイデアを提供できます。私が持っている小さなプロジェクトでは、Objective-C を UIWebView の純粋なラッパーとして使用しています

プロジェクトはここにありますが、メインのコードは以下にあります: http://github.com/robb1e/iWeb

- (void)viewDidLoad {
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"html" inDirectory:@"."]];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [webView loadRequest:request];
    [super viewDidLoad];
}

また、DOM の準備中に画像を表示することで、知覚されるパフォーマンスを改善する方法も探っています。私が持っていたいくつかの答えはここにあります:

UIWebView に背景画像を表示する

于 2010-08-03T13:23:00.500 に答える
0

誰かが私に同じことをした場合に備えて...

文字列 html をロードする UIWebView があり、すべてのリソース (js および css) がローカルに保存されていました。

インターネット接続を使用してコンテンツをロードすると、ある種の速度が遅くなることに直面しました(コントローラーにWebビューをロードして表示するのに1〜2秒)が、インターネット接続なしで同じページをロードしようとすると、非常に高速でした.

私の HTML テンプレートには最初にこれが<base href="http://somesite.com" />あり、一部のコンテンツで相対パスを使用していくつかの画像を読み込むために使用したことを思い出しました。

その仕事を魅力として取り除く。そのため、HTML に extern コンテンツへの参照がない場合でも、Web ビューの読み込みが遅くなる可能性があります。

于 2014-02-28T18:17:35.177 に答える