stalled和Initial connection偶尔请求时间长

Queueing请求排队的时间。关于这个,需要知道一个背景,就是浏览器与同一个域名建立的TCP连接数是有限制的,chrome设置的6个,如果说同一时间,发起的同一域名的请求超过了6个,这时候就需要排队了,也就是这个Queueing时间

Stalled是浏览器得到要发出这个请求的指令,到请求可以发出的等待时间,一般是代理协商、以及等待可复用的TCP连接释放的时间,不包括DNS查询、建立TCP连接等时间等
DNS Lookup DNS查询的时间,页面内任何新的域名都需要走一遍 完整的DNS查询过程,已经查询过的则走缓存
Initial Connection / Connecting 建立TCP连接的时间,包括TCP的三次握手和SSL的认证
SSL完成ssl认证的时间
Request sent/sending请求第一个字节发出前到最后一个字节发出后的时间,也就是上传时间
Waiting 请求发出后,到收到响应的第一个字节所花费的时间(Time To First Byte)
Content Download 收到响应的第一个字节,到接受完最后一个字节的时间,就是下载时间

 

 

客户端不知道当前与服务器的TCP连接已经断开,且还像去用之前的连接去请求以节省资源,但实际上已经断开,服务器会在21秒内重置信息,通知客户端链接已经断开,开启重试,直到成功。

stalled和Initial connection请求时间长的可能原因是TCP链接丢失,且暂时并未找到解决方案。

参考:http://fex.baidu.com/blog/2015/01/chrome-stalled-problem-resolving-process/

<think>好的,用户想要用ASPJavaScript来记录微信浏览器中的用户在线时。首先,我需要理清楚这个功能的基本思路。在线时通常是指用户从进入页面到离开的时间差。不过,用户可能会中途切换标签页或者最小化浏览器,这时候需要考虑如何准确记录活动时间。 首先,前端部分要用JavaScript来监听用户的活动事件,比如鼠标移动、点击、键盘输入等,这样可以判断用户是否处于活跃状态。当用户无操作一段时间后,认为用户离开,停止计时。同时,需要定期发送心跳请求到后端,保持会话活跃并更新时间数据。 后端使用ASP来处理这些心跳请求,记录开始时间、最后活动时间以及总时。需要处理会话管理,确保每个用户的记录是独立的。此外,要考虑会话超时的问题,比如用户关闭页面时如何触发最后的保存操作,可能需要用到beforeunload事件来发送最后一次请求。 然后,结合微信浏览器的特性。微信内置浏览器可能对某些JavaScript事件有限制,需要确认beforeunload或visibilitychange事件是否可靠。另外,微信的网页授权用户标识可能需要获取用户的openid来唯一标识用户,但用户提到的是记录在线时,可能不需要用户登录,所以用会话ID应该足够。 数据存储方面,ASP可以使用Application对象或者数据库。Application对象适用于小规模、临时存储,但如果是多服务器环境或需要持久化,数据库更合适。需要设计表结构,存储SessionID、开始时间、最后活动时间、总时等字段。 安全性方面,要防止恶意请求,比如验证心跳请求的合法性,避免伪造SessionID。同时,处理并发问题,确保同一会话的多个请求不会导致数据错误。 最后,测试整个流程,确保前端事件触发正确,后端能准确记录时间,并且在用户关闭页面时能正确保存最终时。可能需要处理网络延迟或中断的情况,比如心跳失败后的重试机制。 可能遇到的问题包括:微信浏览器对心跳请求的限制、用户时间不操作导致会话过期、如何准确捕获页面关闭事件。需要逐一解决这些问题,确保功能的可靠性。</think>要使用ASPJavaScript记录微信浏览器中的用户在线时,可通过以下步骤实现: ### 一、前端JavaScript实现 1. **初始化时间记录** ```javascript let startTime = new Date().getTime(); let lastActiveTime = startTime; let totalDuration = 0; // 监听用户活动事件 document.addEventListener('mousemove', updateActiveTime); document.addEventListener('keydown', updateActiveTime); function updateActiveTime() { lastActiveTime = new Date().getTime(); } // 每10秒发送心跳请求 setInterval(sendHeartbeat, 10000); // 页面关闭前发送最终数据 window.addEventListener('beforeunload', () => { navigator.sendBeacon('/saveDuration.asp', `final=1&duration=${totalDuration}`); }); ``` 2. **心跳检测逻辑** ```javascript function sendHeartbeat() { const now = new Date().getTime(); const activeDuration = now - lastActiveTime; // 如果5分钟内无操作视为离线 if (activeDuration > 300000) return; totalDuration += 10000; // 累加心跳间隔 fetch('/saveDuration.asp', { method: 'POST', body: `duration=${totalDuration}` }); } ``` ### 二、后端ASP实现 ```asp <% Response.ContentType = "text/plain" Session.Timeout = 1440 ' 设置会话超时为24小时 Dim finalFlag, duration finalFlag = Request.Form("final") duration = CLng(Request.Form("duration")) If Session("startTime") = "" Then Session("startTime") = Now() End If If finalFlag = "1" Then ' 最终保存到数据库 SaveToDB(Session.SessionID, Session("startTime"), Now(), duration) Else ' 更新最新持续时间 Session("lastDuration") = duration End If Sub SaveToDB(sessionID, startTime, endTime, total) ' 连接数据库示例(需根据实际配置修改) Set conn = Server.CreateObject("ADODB.Connection") conn.Open "Provider=SQLOLEDB;Data Source=.;Initial Catalog=UserLog;User ID=sa;Password=123;" sql = "INSERT INTO OnlineLog VALUES ('" & sessionID & "','" & startTime & "','" & endTime & "'," & total & ")" conn.Execute(sql) conn.Close End Sub %> ``` ### 三、数据库设计 建议使用SQL Server创建表: ```sql CREATE TABLE OnlineLog ( SessionID VARCHAR(100) PRIMARY KEY, StartTime DATETIME, EndTime DATETIME, TotalDuration INT ) ``` ### 四、注意事项 1. **微信浏览器特性** - 需在微信JS-SDK中配置`wx.config`保证API可用性[^2] - `beforeunload`事件在微信浏览器中可能受限,建议配合`pagehide`事件 2. **精度优化** - 可通过WebSocket替代定时请求提高精度 - 使用`window.performance.timing`获取更精确时间 3. **安全增强** - 需验证请求来源防止伪造数据 - 对敏感操作应使用微信用户openid作为标识[^3]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值