1

WebView (OS X) に、描画したいキャンバス要素だけを含む html ファイルをロードしています。

意外なことに、Safari でファイルを開くだけの場合と比較して、WebView ではフレーム レートが約 50% になります。

これをさらにテストするために、このキャンバス ベンチマークを実行しても同じ結果が得られました。

Safari ベンチマーク スコア: 3652 平均 FPS: 77

WebView ベンチマーク スコア: 1733 平均 FPS: 37

そして、これは JavaScript とは関係がないようです。Octane JavaScript ベンチマークを実行すると、WebView と Safari でほぼ同じスコアが得られます。

自分で試してみたい場合は、ここにデモ プロジェクトがあります。AppDelegate.m で実行するテストを選択するだけです。

開発者が使用するのと同じ WebView を Safari が使用しているという印象を受けましたか? キャンバスのレンダリングが WebView で非常に遅い理由と、それを修正するために何ができるかを知っている人はいますか?

ありがとう!

4

1 に答える 1

0

Webview を使用するアプリケーションのデフォルトを設定することで、最適化されたレンダリングを有効にすることができます。defaults write加速されたキャンバス レンダリングを有効にするために使用できる WebDeveloperExtras を有効にするのと同様です。私にとっては、次のフラグによってパフォーマンスが向上しました。

defaults write <bundle.id> WebKitAccelerated2dCanvasEnabled -bool true
defaults write <bundle.id> WebKitAcceleratedDrawingEnabled -bool true
defaults write <bundle.id> WebKitCanvasUsesAcceleratedDrawing -bool true

または、プライベート メソッドをWebPreferencesインターフェイスに追加することもできます。

@interface WebPreferences (WebPrivate)
...
- (BOOL)accelerated2dCanvasEnabled;
- (void)setAccelerated2dCanvasEnabled:(BOOL)enabled;

- (BOOL)acceleratedDrawingEnabled;
- (void)setAcceleratedDrawingEnabled:(BOOL)enabled;

- (BOOL)canvasUsesAcceleratedDrawing;
- (void)setCanvasUsesAcceleratedDrawing:(BOOL)enabled;

- (BOOL)acceleratedCompositingEnabled;
- (void)setAcceleratedCompositingEnabled:(BOOL)enabled;
...
@end

次に、プログラムで使用します。

WebPreferences* prefs = [webView preferences];
[prefs setAccelerated2dCanvasEnabled:YES];
[prefs setAcceleratedDrawingEnabled:YES];
[prefs setCanvasUsesAcceleratedDrawing:YES];
[prefs setAcceleratedCompositingEnabled:YES];
[webView setPreferences:prefs];
于 2016-04-01T18:59:55.913 に答える