使Socket.IO显示浏览器的页面加载指示器(纺车)

我正在Node.js中构build一个Web应用程序,并使用Socket.IO来处理我的客户端和服务器端之间的数据传输。

我的web应用程序的核心部分是内容提要。 我的客户端JavaScript为新闻源的内容发出一个Socket.IO调用。 一旦响应从服务器返回,它使用JQuery填充网页上的提要。

我的问题是,Socket.IO不会导致浏览器的页面加载指示器(对于Chrome浏览器,这是一个在网页选项卡中的纺车)显示。 我想要显示。 如果没有这个加载指示器,我的网页看起来像是已经完成加载,当它真的没有(饲料尚未填充)。

什么是适当的解决这个问题? 先谢谢你!

本身没有正确的答案:浏览器供应商为什么某些活动会和不会显示“加载”状态有不同的理由: 这里是一个很好的概要 。

一般来说,类似于ajax的请求(与实际的整页加载asynchronous的东西)应该不会默认显示加载指示符,因为繁忙的状态向用户指出浏览器是慢/繁忙的,并且我们使用ajax请求来处理各种后台任务。 当然,有些时候开发人员会想要显示这些指标(表单提交,通过ajax下载后续页面的单页应用程序:当我们要向用户传达重大事件发生的时候,他们应该等待它完成),但我们没有太多的控制强迫这种情况发生在asynchronous请求。 在某些浏览器上“伪装”它的唯一真正方法是在iframe中加载内容:在这种情况下,一些现代浏览器确实会触发“繁忙”状态。

使用Websockets,大多数供应商可能相当合理地将相同的逻辑作为ajax请求应用:有很多操作你想要做的websockets可以发生,而没有用户直接启动它们,所以他们不应该触发那“浏览器真是太忙了,憋一下”的感觉。 而且,就像ajax一样,我不知道为什么要反驳这个devise决定。

iframe的解决scheme是有限的:它在一些浏览器,但不是全部(特别是,在所有主要的移动浏览器忽略)。 并粗暴地做(即创build一个隐藏的iframe,当你想要它触发负载指标,并删除它,当你想取消它们)有成本:你基本上需要击中一个旨在“失速”的资源PHP页面只运行睡眠(10000),并保持连接打开)。 这两者都很重要(额外的HTTP请求只是为了触发一个效果),并closures了一些服务器,保持打开的连接,基本上没有做任何事情。 这可能不会扩展,特别是如果该服务器是托pipe您的应用程序相同的一个。

你可能反而坚持编写一个自定义的加载指标(微调,虚假的进度条固定在屏幕的顶部)。 这不是令人满意的,但它是唯一保证沟通一些你想要的用户。 我有一个jQuery的ajax解决scheme,它利用iframe方法( 噪声JSON ),你可能会重新作为socket.io插件,但如果你使用websockets,这基本上意味着回落到请求的Ajax风格的通信。 而且在Safari,手机和更新的IE浏览器上,你还是不太幸运。