我有一个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中是如此之慢以及我可以做些什么来修复它?
谢谢!
答案 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];