在微信上做一次推廣活動,頁面共計三個按鈕,需要分別統計點擊次數,pc上的相關統計用的是“百度統計”,因為H5活動頁的時效性等原因,並沒有使用百度統計,而是自己實現一個簡單的統計小方案:前端點擊時請求一個空白小gif圖,帶有參數,後端同事根據nginx請求日誌做統計,通過在cookie中存入一個不會重疊的時間戳記作為key值來區分是否同一使用者(uv)。
請求的圖片存在七牛中,是固定不變的,主要變化是後面兩個參數:使用者標識uid和按鈕標識,其中產生不重複(把重複率降到最低)的使用者標識很有意思。
時間戳記用new Date().getTime()得出一個13位的“隨機數”,精確到毫秒,但萬一同一毫秒有兩個以上使用者點擊呢?於是再嚴謹一些,用for迴圈在隨機一個5位字串拼接,這樣的重複率絕對夠用:
uid =newDate().getTime();
varrandomNumber ='';
for(vari = 0 ; i < 5 ; i ++){
randomNumber +=newString (Math.floor(Math.random() * 10));
}
uid = uid + randomNumber;
|
下面是具體邏輯代碼,當網頁中已有請求圖片時,更改url的參數也一樣能從新發起一個get請求,避免每次點擊都append一張圖片。這種實現方法感覺比點擊發送ajax更加方便。
statistics:function(position){
varpic ="yun_qi_img/p.gif";
varuid = util.readCookie("uid");
varimgLength = $("#statistics-img").length;
if(uid){
if(imgLength == 0){
$('body').append('<img id="statistics-img" src="'+ pic +'?uid='+ uid +'&position='+ position +'"/>');
}else{
$("#statistics-img").attr("src",pic+"?uid="+uid+"&position="+position);
}
}else{
uid =newDate().getTime();
varrandomNumber ='';
for(vari = 0 ; i < 5 ; i ++){
randomNumber +=newString (Math.floor(Math.random() * 10));
}
uid = uid + randomNumber;
util.createCookie("uid",uid);
$('body').append('<img id="statistics-img" src="'+ pic +'?uid='+ uid +'&position='+ position +'"/>');
}
}
|