在我的网站上,我有一个websocket连接,可以在x秒后访问者空转(不移动鼠标或按键)时向服务器发送信息。 一切都运行正常,但我在Windows 7上看到了谷歌浏览器(版本37和现在38 - 目前最新的稳定版本)的奇怪行为(也可能是其他操作系统)。
访问者在页面加载之前连接到websocket(在命中输入地址栏之前)。挖掘问题我发现了这个http://readwrite.com/2012/01/05/new_chrome_will_load_web_pages_before_you_hit_ente
如果您要在网站上输入您一直访问的地址和地址 自动完成后,Chrome将开始预渲染页面,减少 加载时间。
有关Google博客http://chrome.blogspot.ro/2011/08/instant-pages-on-google-chrome.html
上的Instant Pages的更多信息一切都很棒,但有一个问题,谷歌加载页面后,我从我的网站名称输入第三个键,假设我想访问该网站,并建立到我的服务器的websocket连接,并且连接将可用即使我没有点击输入,即使我更改地址栏中的文字,也要持续几个小时。
另一个问题是当其他网站的名称与我的相似时。 例如,我想访问cooldogs.com。我去地址栏并开始输入酷,2个网站出现coolcats.com和cooldogs.com。因为coolcats.com是第一个网站,chrome会预先加载该网站,连接到websocket即使我想访问cooldogs.com 注意:coolcats.com和cooldogs.com是发明名称
所以我的问题是,只有在用户点击进入并加载网站后,才能使谷歌浏览器连接到websocket服务器。我对Google Chrome配置不感兴趣,因为我无法教会所有访问者更改设置。
这是错误还是设计流程?
答案 0 :(得分:1)
如果页面可见,您可以尝试使用Visibility API启动WS连接。
页面可见性API可让您知道网页何时可见或在 焦点。使用选项卡式浏览,有一个合理的机会 给定的网页在后台,因此对用户不可见。
API通过提供来节省资源特别有用 开发人员有机会在不执行不必要的任务时 网页不可见。
用例
一些例子:
- 网站有一个图片轮播,不应该前进到下一张幻灯片 除非用户正在查看该页面。
- 显示a的应用程序 信息仪表板不想轮询服务器以获取更新 当页面不可见时。
- 页面想要检测它何时出现 预渲染以便它可以保持页面浏览的准确计数。
这将是:
if(document.hidden === undefined || !document.hidden){
// start WS connection
}
document.addEventListener("visibilityChange", function(){
if( !webSocketStarted && (document.hidden !== undefined && !document.hidden){
// start WS connection
}
}, false);
阅读文档,试一试。