与Safari 6 </canvas>相比,OS X WebView中的<canvas>元素慢两倍

时间:2013-01-24 12:34:20

标签: macos cocoa canvas webview safari

我有一个WebView(OS X)加载一个html文件,只有一个canvas元素,我想做一些绘图。

与仅在Safari中打开文件相比,WebView中的帧速率大约为50%。

为了进一步测试,我使用相同的结果运行this canvas benchmark

Safari浏览器 基准分数:3652 平均FPS:77

web视图 基准分数:1733 平均FPS:37

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

Here's a demo project如果你想自己尝试一下。只需选择你想在AppDelegate.m中运行的测试。

我的印象是Safari使用了我们开发人员使用的相同WebView?有没有人知道为什么渲染画布在WebView中是如此之慢以及我可以做些什么来修复它?

谢谢!

1 个答案:

答案 0 :(得分: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];