15

UIWebView多数の画像、CSS、埋め込みビデオ、JavaScriptタップハンドラーを含むアプリケーションを構築しています。スクロールのパフォーマンスは不安定であり、これを改善するための最も効果的な方法についての洞察を探しています。

UIWebView次の特性のいずれかがスクロールの遅延につながる場合はどれですか?他にどのような要因がパフォーマンスを妨げている可能性がありますか?

  • 画像の量
    • ユーザーが画像をスクロールして通り過ぎたときにDOMから画像を削除し、上にスクロールした場合は画像を追加し直す必要がありますか?
  • 画像のサイズ
    • WebビューのRetina品質の画像は、小さいバージョンよりもスクロールパフォーマンスに大きな影響を与えますか?
  • 画像スケーリング
    • 次のような宣言に基づいて拡大縮小するためにWebビューに依存するのではなく、事前に画像のサイズを変更することで大きな違いが生まれwidth: 100%;ますか?
  • CSS
    • 回避box-shadowしましたが、スクロールパフォーマンスに悪影響を与えることでも知られている他のCSSプロパティはありますか?

プロファイリングに使用できる他のリソースやツールがある場合は、それらについて聞いてみたいと思います。

4

3 に答える 3

8

これは、少し前に Apple Developer Technical Support から得た回答です。

現時点では、UIWebView のレンダリングを最適化するメカニズムは提供していません。違いが見られるのは、Mobile Safari と UIWebView が同じレンダリング エンジンを使用していないためです。

パフォーマンスは、読み込まれたコンテンツに依存します。JavaScript が実行されているか、プラグインが使用されている場合、パフォーマンスが低下する可能性があります。

http://developer.apple.com/bugreporter/にバグ レポートを提出して、状況を詳しく説明することをお勧めします。これにより、バグ レポートのステータスも通知されます。

UIWebView に代わる可能性のあるものは、オープンソースの DTCoreText ライブラリ: https://github.com/Cocoanetics/DTCoreTextであり、フロート リーダー アプリを強化します: http://itunes.apple.com/us/app/float-reader /id447992005?mt=8

于 2012-04-24T13:49:45.973 に答える
5

LinkedIn の担当者は、iPad アプリケーションで UIWebView と HTML5 を使用して広範な作業を行いました。画像、テキスト、動画を大量に含むフィード全体が UIWebView 内でレンダリングされます。

次のブログ投稿は、パフォーマンスを改善するための多くの出発点を提供するはずです

LinkedIn for iPad: HTML5 で無限スクロールをスムーズにするための 5 つのテクニック

于 2012-06-06T07:09:23.347 に答える
1

少し前に同様の問題がありました。webview を scrollview 内に配置すると、スクロールのパフォーマンスが劇的に向上することがわかりました。webview の読み込みが完了したら、webview のスクロールを無効にし、webview のフレームと scrollview の contentSize を webview のコンテンツのサイズに設定しました。

-(void) webViewDidFinishLoad:(UIWebView *)webView {   
    float size = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];
    [self.scrollView setContentSize:CGSizeMake(self.view.frame.size.width, size)];
    [webView setFrame:CGRectMake(webView.frame.origin.x,
                                 webView.frame.origin.y,
                                 webView.frame.size.width,
                                 size)];

    [(UIScrollView*)[webView.subviews objectAtIndex:0] setScrollEnabled:NO];
}

私は、ウェブビューが画面に表示されるまでイメージをロードしないと想定しています。しかし、私は確信が持てません。また、これには結果が伴うことも確信しています(つまり、前もってメモリ使用量が増加します)が、この方法で問題が発生したことはありません.

于 2012-04-19T16:28:33.253 に答える