2

有沒有一種很好的方法可以告訴給定用戶在Web應用程序的給定頁面上花費多長時間,準確度大約爲一分鐘?如何判斷每個用戶訪問每個頁面的時間?

我想到的一種解決方案是使用Javascript每分鐘打一次web服務,並跟蹤數據庫中的命中。但我想知道是否有更好的方法...有沒有辦法通過Google Analytics來實現這一點?如果是這樣,怎麼樣?

+1

我想這樣的指標不會來自頁面本身,而是來自頁面被請求時與下一頁被請求時的比較(可以完全在服務器端完成)。 (假設如果沒有請求後續頁面,那麼這是一個放棄的會話。) – David

+3

谷歌分析可能是要走的路。特別是在頁面分析中 – karthikr

+1

https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingTiming – epascarello

回答

3

首先,我同意關於分析軟件的評論,並且您應該仔細研究這些內容。

我不知道該怎麼好這樣的工作,我絕對不相信這是去的最佳途徑,但如果你做這個客戶端是死心塌地,你也許可以嘗試類似:

var start = new Date().getTime(); 

window.onbeforeunload = function(){ 
    var end = new Date().getTime(); 
    alert(parseInt(end - start, 10)/60000 + " minutes"); 
}; 

這裏的想法是在用戶訪問您的頁面後保存當前時間。一旦他們離開,onbeforeunload事件應該觸發並運行該函數來計算他們在頁面上花費的時間。我想你可以在中加入一個ajax調用(或其他) a 同步調用來節省總時間。

EXAMPLE

:會的jsfiddle阻止這些事件,但你仍然可以通過打開控制檯中看到錯誤日誌的輸出。一旦打開控制檯,只需點擊Run即可觸發活動。

編輯

請參閱@伊恩的評論下面關於使用onbeforeunload事件的內部的AJAX請求。

+0

「beforeunload」事件中的AJAX請求不是跨瀏覽器一致的,並且是最好/唯一的幫助他們與**同步**請求。當頁面離開時,瀏覽器放棄打開的AJAX請求。所以,當你在'unload'事件之前的'beforeunload'事件中啓動一個事件時,很有可能請求在其生命週期中沒有足夠的時間到達服務器 – Ian

+0

感謝您指出@伊恩,就像我上面所說的那樣......我不太確定它會如何工作。你完全正確,但他們需要同步。 – Chase

+0

我知道,我只是想解釋會發生什麼:)對我來說,OP所要求的東西只需要與服務器通信。服務器不應該有迴應。所以如果AJAX請求可以在瀏覽器中止瀏覽器(這意味着瀏覽器不會處理它的響應)時離開瀏覽器,那麼這應該是很好的。在我工作的一個項目中,我們在'beforeunload'發送了一個AJAX請求,並且我們需要它是同步的。一些可能有用的東西就是對它進行超時(我們做了1000毫秒),就像jQuery'$ .ajax'允許的那樣。 – Ian

1

對於那些有興趣的人,我已經將一些工作放到了一個小的JavaScript庫和服務中,這個時間是用戶與網頁交互的時間。它實際上正是Chase在他/她的回答中所描述的!但是,它具有更準確(但並不完美)跟蹤用戶實際與頁面進行交互的時間的額外好處。它忽略了用戶切換到不同標籤頁,閒置,最小化瀏覽器等的時間。

編輯:我已更新示例以包含當前的API使用情況。

http://timemejs.com

其用法的例子:

包括在你的頁面:

<script src="http://timemejs.com/timeme.min.js"></script> 
<script type="text/javascript"> 
TimeMe.initialize({ 
    currentPageName: "home-page", // page name 
    idleTimeoutInSeconds: 15 // time before user considered idle 
}); 
</script> 

如果你想自己的時間報告給後端:

window.onbeforeunload = function(){ 
    xmlhttp=new XMLHttpRequest(); 
    xmlhttp.open("POST","ENTER_URL_HERE", false); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    var timeSpentOnPage = TimeMe.getTimeOnCurrentPageInSeconds(); 
    xmlhttp.send(timeSpentOnPage); 
}); 

TimeMe.js還支持通過websockets發送計時數據,因此您不必嘗試強制完全同步http請求進入document.onbeforeunload事件。

相關問題