不知道 crazyegg 如何做到这一点的确切实现细节,但我会这样做的方式是将鼠标事件存储在一个数组中,我会通过 AJAX 定期发送到后端 - 例如,收集并发送捕获的鼠标事件每 30 秒发送到服务器。这减轻了为每个事件创建请求的压力,但它也确保我最多只会丢失 30 秒的数据。您还可以将发送添加到卸载事件,这会增加您获得的数据量,但您不会依赖它。
关于我如何实现它的一些示例(使用 jQuery 作为我的香草 JS 技能有点生疏):
$(function() {
var clicks = [];
// Capture every click
$().click(function(e) {
clicks.push(e.pageX+','+e.pageY);
});
// Function to send clicks to server
var sendClicks = function() {
// Clicks will be in format 'x1,y1;x2,y2;x3,y3...'
var clicksToSend = clicks.join(';');
clicks = [];
$.ajax({
url: 'handler.php',
type: 'POST',
data: {
clicks: clicksToSend
}
});
}
// Send clicks every 30 seconds and on page leave
setInterval(sendClicks, 30000);
$(window).unload(sendClicks);
});
请注意,我没有以任何方式测试或尝试过这个,但这应该给你一个大致的想法。