1

我有一个 WebView (OS X) 加载一个 html 文件,其中只有一个我想要做一些绘图的画布元素。

出乎意料的是,与仅在 Safari 中打开文件相比,在 WebView 中的帧速率约为 50%。

为了进一步测试这一点,我运行了这个画布基准测试,结果相同:

Safari 基准分数:3652 平均 FPS:77

WebView 基准分数:1733 平均 FPS:37

这似乎与 JavaScript 无关。运行Octane JavaScript Benchmark我在 WebView 和 Safari 中得到几乎相同的分数。

如果您想自己尝试一下,这里有一个演示项目。只需在 AppDelegate.m 中选择您想要运行的测试。

我的印象是 Safari 使用的是我们开发人员使用的相同 WebView?有谁知道为什么在 WebView 中渲染画布如此缓慢以及我能做些什么来解决它?

谢谢!

4

1 回答 1

0

您可以通过设置使用 webview 的应用程序的默认值来启用优化渲染。类似于启用 WebDeveloperExtras,您可以使用它defaults write来启用加速画布渲染。对我来说,以下标志提高了性能:

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 回答