解决方案
将分析数据发送到服务器,因为文档卸载可能看起来像这样:
>卸载事件处理程序,该处理程序通过AJAX请求提交数据。当页面卸载事件启动时,数据将通过caureanalyticsdata函数捕获,并通过AJAX请求发送到服务器。请注意Xhr.open的第三个参数是错误的,表明AJAX请求为
>都具有同步性。由于它是同步的,因此浏览器必须等待请求在>之前完成>它可以卸载文档并显示下一页。等待的额外等待可能会导致表现不佳的感觉。
<span>window.addEventListener('unload', function(event) { </span> <span>var xhr = new XMLHttpRequest(), </span> data <span>= captureAnalyticsData(event); </span> xhr<span>.open('post', '/log', false); </span> xhr<span>.send(data); </span><span>}); </span> <span>function captureAnalyticsData(event) { </span> <span>return 'sample data'; </span><span>}</span>>使用的其他技术代替同步AJAX请求包括在卸载处理程序中设置图像对象的SRC。浏览器将在卸载文档之前等待图像加载,在此期间可以将数据提交给服务器。但是,这仍然存在相同的问题:当前文档的卸载将在请求,这次完成图像完成时延迟,这可能会导致性能差。
创建了Beacon API,以帮助解决这些问题。它定义了一个接口,该接口使开发人员可以将少量数据发送到Web服务器异步。它仅包含一种连接到导航对象的方法,即sendbeacon。 SendBeacon采用两个参数,您要提交数据的URL以及要提交的数据:
<span>window.addEventListener('unload', function(event) { </span> <span>var xhr = new XMLHttpRequest(), </span> data <span>= captureAnalyticsData(event); </span> xhr<span>.open('post', '/log', false); </span> xhr<span>.send(data); </span><span>}); </span> <span>function captureAnalyticsData(event) { </span> <span>return 'sample data'; </span><span>}</span>> Navigator.SendBeacon在主要桌面浏览器中都不错。您会发现它在当前版本的Chrome,Firefox和Opera中得到了支持,但在IE和Safari的最新版本中不支持它。但是,您不能保证它的可用性,最好的选择是使用功能检测和后备到页面上提交数据的旧方法之一:
>
>我创建了一个小示例应用程序,您可以使用该应用程序来查看Beacon API的作用。您需要安装node.js来运行服务器。运行样本:
<span>window.addEventListener('unload', function(event) { </span> <span>var data = captureAnalyticsData(event); </span> <span>navigator.sendBeacon('/log', data); </span><span>});</span>
>下载并将zip文件解压缩到您选择的文件夹中,例如BeaConapi
在此示例中,我们使用的是Chrome。打开开发工具,切换到网络选项卡,然后勾选“保存日志”复选框。过滤结果,以便您只看到其他请求。现在,当您单击“卸载”按钮时,您应该在Dev Tools中查看请求 /日志记录。
结论
>我如何在Web应用程序中使用Beacon API?要在Web应用程序中使用信标API,可以使用Navigator.sendBeacon()方法。此方法需要两个参数:将数据发送到的URL以及发送的数据。数据可以是formdata对象,blob,arraybufferview或urlsearchparams对象。这是一个示例:
>
> Beacon Api处理失败如何?信标API没有提供有关服务器是否成功收到数据的任何反馈。如果由于网络问题而无法发送数据,则API不会重试发送数据。这就是为什么建议将信标API用于不需要确认收据的非关键数据的原因。
>是否在所有浏览器中支持的信标API? Beacon API在大多数现代浏览器中都得到支持,包括Chrome,Firefox,Safari和Edge。但是,Internet Explorer不支持它。您可以在网站上检查当前的浏览器支持。例如分析数据。尽管您可以发送的数据量没有严格的限制,但是发送大量数据可能会影响用户网络性能。因此,建议使用信标API发送少量的非关键数据。
>>
以上是信标API简介的详细内容。更多信息请关注PHP中文网其他相关文章!