1.场景
阅读时长、用户停留页面时长等场景
2.问题
- 频率太快会导致服务端压力变大,频率太慢又导致数据误差变大
- 用户进入页面时间太短可能还没向服务端发出增加时长的请求
3.js代码(先引入jquery)
/*
逻辑:前10秒每2秒更新一次时长,10到120秒之间每5秒更新一次时长,大于等于120秒每10秒更新时长
*/
$(function () {
//停留时长
var stop_time_total = 0;
//时间间隔(初始值,单位为毫秒)
var seconds = 2000;
//用于判断是否出错
var has_error = true;
var viewId = 123;
var url = '服务端地址';
//初始化一个定时器
var timer = setInterval(sum_time, seconds);
function sum_time() {
$.post(url, {
id: viewId,
//由于seconds是毫秒,所以除以1000转换为秒
seconds: seconds / 1000
}, function (msg) {
//如果出错,根据业务需求处理
if (msg == 'error') {
clearInterval(timer);
has_error = false;
}
});
//梯度统计
stop_time_total += seconds / 1000;
//10s~120s之间(包括10s)
if (stop_time_total >= 10 && stop_time_total < 120) {
//如果不出错且时间间隔不等于5000毫秒
if (has_error && seconds != 5000) {
//修改时间间隔
seconds = 5000;
//清除定时器
clearInterval(timer);
//重新设置一个定时器
timer = setInterval(sum_time, seconds);
}
//大于等于120s
} else if (stop_time_total >= 120) {
//如果不出错且时间间隔不等于10000毫秒
if (has_error && seconds != 10000) {
//修改时间间隔
seconds = 10000;
//清除定时器
clearInterval(timer);
//重新设置一个定时器
timer = setInterval(sum_time, seconds);
}
}
}
});