我有一个由单个页面组成的简单网站。使用行为通过 Piwik 进行跟踪。由于页面的设计,用户通常会滚动浏览页面,而不是使用导航栏和单击链接,这使得链接跟踪成为一种非常无信息的方法,无法深入了解网站的使用情况。为了跟踪用户行为,我有一个使用“scroll”的 js 函数来确定用户在页面上的位置,然后向跟踪服务器发送请求:
setInterval(reportposition, 1000);
function reportposition () {
$(function () {
var $win = $(window);
$win.scroll(function () {
if ($win.scrollTop() == 0) {
_paq.push(['trackEvent', 'Scroll', 'PageTop']);
} else if (($(document).height() - $win.scrollTop()
< 7540) && ($(document).height() - $win.scrollTop() > 7500 )) {
_paq.push(['trackEvent', 'Scroll', 'About']);
}
else if ($win.height() + $win.scrollTop()
== $(document).height()) {
_paq.push(['trackEvent', 'Scroll', 'PageBottom']);
}
});
});
};
但是,每个满足其中一个条件的滚动都会执行数十次,从而向服务器发送数十个跟踪请求。我尝试使用 setInterval 降低函数运行的频率,但效果可以忽略不计。有什么方法可以让函数在满足一个条件时只触发一次,直到满足另一个条件为止?
使用滚动来检查用户的位置似乎对 CPU 周期要求相当高,因为有时简单的滚动可能会发生数百个事件。有没有办法以尽可能少的CPU占用来解决这个问题?
最佳答案
这里的解决方案是检查scrollTop是否等于用户滚动的当前div的scrollTop。
CPU方面,看https://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery 。这是一种解决方案;更理想的情况是,您应该考虑使用 Websockets(即,将 socket.io 与 node.js 一起使用)。
关于JavaScript滚动: How to execute function only once with least amount of CPU usage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38447831/