Webview 和移动 Safari 在渲染页面上有啥不同吗?

Posted

技术标签:

【中文标题】Webview 和移动 Safari 在渲染页面上有啥不同吗?【英文标题】:Is there any diferences between UIWebview and mobile Safari in rendering pages?Webview 和移动 Safari 在渲染页面上有什么不同吗? 【发布时间】:2017-02-27 06:20:57 【问题描述】:

我的老板抱怨渲染性能低。 App 使用 UIWebView 和 Safari 渲染同一页面时有什么区别? 任何帮助将不胜感激。

【问题讨论】:

操作系统版本是多少?我记得在 ios7 发布期间,Apple 在 webviewUI 中将 JS 引擎的性能降低了 25%。后来他们增加了它,但不确定它现在的表现如何。有一段时间没有签到 现在我使用的是 iOS 10.2,这个问题重要吗? 【参考方案1】:

UIWebView 已弃用。

来自 Apple 文档。

重要

从 iOS 8.0 和 OS X 10.10 开始,使用 WKWebView 添加网页内容 到您的应用程序。不要使用 UIWebView 或 WebView。

@import WebKit 并使用 WKWebView

WKWebView 大大改进了 JS 的实现和使用。 它的性能与 Safari 非常相似。

区别:WKWebView 可以用作应用程序控制器的视图。 Safari 作为单独的应用程序运行。 SafariController 在它自己的应用程序中运行 Safari。

【讨论】:

意思是说“SafariController 在你的应用程序中它自己的 viewController 中运行 Safari。” 但是 WKWebView 发出请求并在进程外渲染内容,这意味着我的应用程序听不到他们发出的请求。所以我不能使用 WKWebview 来观察 JS 加载如果我想在 JS 完成时做某事。还有其他选择吗? WKWebView 有 evaluatejavascript:completionHandler: 和 WKScriptMessageHandler 用于评估 JS 并从 JS 获取消息。它还具有 WKUIDelegate、WKNavigationDelegate 用于观察加载进度并根据内容和 3D 触摸执行操作。您甚至可以使用 WKUserScript 将 JS 注入页面顶部或底部。不知道你还想要什么。因此,例如,您不仅可以让 WKUINavigation 知道加载何时完成,还可以使用 WKUserScript 在最后注入 JS,从而在脚本处理程序执行时向其发送消息。【参考方案2】:

是的,Mobile Safari 和 UIWebview 有一些区别和相似之处

UIWebView 支持 Mobile Safari 等所有 html5 功能 UIWebView 在某些功能上比 Safari 更严格一些。示例:通过 JS 设置宽高样式时,需要在数字后面加上 'px',而 Mobile Safari 则不需要。 对于身份验证,UIWebView 不会自动处理身份验证挑战,由开发人员来处理。 UIWebView 没有 Nitro Javascript 引擎,所以它执行 JS 比 Mobile Safari 慢。 UIWebView 不会跟踪框架内页面转换的浏览历史记录,这可能是一个理想的功能。

希望这个答案对你有所帮助

【讨论】:

那么我的应用程序中的 UIWebview 是否有可能与移动设备中的 Safari 一样快地运行相同的页面? 您可以导入webkit并根据需要进行优化,

以上是关于Webview 和移动 Safari 在渲染页面上有啥不同吗?的主要内容,如果未能解决你的问题,请参考以下文章

app中的webview是啥?如何理解?

vue移动端webview视频轻应用

是否可以通过单击应用程序 WebView 中的 URL 来打开移动 Safari?

渲染到(或读取?)帧缓冲区在移动 Safari 中不起作用

iOS开发Safari调试WebView页面

如何在 WebView 中仅加载 .html 页面并在 iOS 的 Safari 中加载所有 www 页面?