我目前正在编写一个使用 UIWebView 浏览页面的 iOS 应用程序。有时我需要使用 动态删除 UIWebView 中的元素stringByEvaluatingJavaScriptFromString:
,但这会在我的第一代 iPod touch 上将主 UI 锁定有时长达 2 秒,在 iPhone 3GS 上可能会锁定半秒。我用来删除它的 JavaScript 很简单:
element.parentNode.removeChild(element);
没有比这更复杂的了。同时,我在 OpenGL ES 中进行了一些非常基本的 2D 渲染,如果重新渲染 UIWebView 不会锁定,我会在主线程上使用简单的 CoreAnimation。难道它必须重新计算 DOM 树、所有元素位置等?这真的应该锁定主 UI 线程吗?是我打电话stringByEvaluatingJavaScriptFromString:
把所有东西都锁起来了吗?在这种硬件上这是正常的吗?奇怪的是它能够在 webview 中渲染一些半复杂的 MooTools 动画,具有不透明度和高度的变化,但删除一个元素需要几秒钟。
有人对改进有任何想法吗?也许只是隐藏元素使用visibility: hidden
更好,或者设置opacity: 0
?有什么想法或明智的话吗?