[聊一聊系列]聊一聊前端功能統計那些事兒

歡迎你們收看聊一聊系列,這一套系列文章,能夠幫助前端工程師們瞭解前端的方方面面(不只僅是代碼):https://segmentfault.com/blog...javascript

1. 什麼是功能統計

做爲一名開發,咱們的產品發佈出去以後,不管是產品仍是運營,其實都是想及時瞭解產品對用戶產生的影響的。用戶到底喜歡什麼不喜歡什麼。可是若是拉住用戶去一個個問的話,也沒法獲得最真實的大衆的想法。因而,運用大數據進行分析,就變成了產品們的利器。html

那麼這些反映了用戶真實行爲的數據,就得靠前端工程師們來打印了。前端

好比,你想看一個功能有多少用戶進行了點擊,來證實用戶是否喜歡這個功能,亦或是你想看看用戶究竟會在你的頁面停留多長時間,從而判斷用戶的黏性。那麼,在用戶點擊那個功能的時候,前端發送一條日誌到服務端,這樣積累下去,咱們就能得到,天天有多少用戶在點擊某一個功能了。在功能發生迭代後,咱們也能根據統計,來判斷用戶是否喜歡新的變化。java

2. 如何統計

通常來說,只要在想統計的行爲發生時,發送一條請求到達服務端便可。這樣咱們的服務端就有了相應的記錄。咱們就能開心的利用記錄數量來判斷點擊數量了。nginx

通常來說咱們沒必要爲了發送請求,就在各處點擊的地方加個ajax,其實有種發送請求的方式比ajax更加的簡單。並且還避免了跨域問題。git

其實直接給一個圖片、script標籤賦值地址,就完成了一次GET請求。github

例(如圖2.1所示):ajax

(new Image()).src = 'https://gm.mmstat.com/tmallfp.4202.7';

圖片描述
圖2.1segmentfault

咱們看到,輕輕鬆鬆就發送了一條請求出去,亦或者是使用script標籤,或者fetch之類的方式也能夠達到目的。windows

本人觀察了一下騰訊網和淘寶網,的日誌。發現淘寶網使用的是請求一張空圖片到服務端,以此來實現的日誌打印。

而騰訊網使用的,則是發送一個js請求的方式,來打印日誌(如圖2.2)

圖片描述
圖2.2

其實不管使用什麼方式,都異曲同工,最終咱們獲得的是服務端的一條access日誌,利用這個日誌,就能夠記錄了。

咱們在開發的時候,在用戶發生各個行爲時,發送一條記錄了此行爲的數據。這樣就能記錄本身產品的方方面面了。

3. 服務端如何接收並使用數據

通常來說服務器的server都會有access日誌。這裏拿nginx來舉個例子。咱們須要搭建一個nginx服務器,而後饞看nginx的conf(安裝路徑/conf/nginx.conf)如圖3.1

142009_Qii3_1177792.png
圖3.1

nginx能夠配置一個access日誌的文件,每當有請求打到當前的nginx上,都會產出一條access日誌。

日誌的路徑也是可配置的,甚至能夠配置文件的切割,這裏就再也不贅述。

142650_mpnX_1177792.png
圖3.2

接着,咱們訪問一下這個服務,因而就產生了一條access日誌(如圖3.2),咱們只要在功能點擊的時候,往這臺機器上發送一個簡單的請求便可產生日誌啦。接下來把日誌整理整理,就能夠產出產品經理們想要的反饋了。

4. 多種多樣個性化的日誌

若是咱們須要各類各樣的日誌,那麼能夠把參數給多樣化,用參數來區分各個不一樣地方的點擊或者是各類交互行爲。咱們的access日誌中,會留存有完整的URL,只要咱們將其解析,就能拿到各處的點擊行爲了。

5. 跟我學---進行一次簡單的打印日誌

爲了各位考慮,本小節的實驗在windows下進行。首先,咱們將下載一個nginx(本文最後的示例代碼中也有),而後,更改其conf文件(如圖5.1)。

173545_nMU7_1177792.png
圖5.1

並將端口改成8091。而且去掉註釋,打開access日誌。

173354_2v8l_1177792.png
圖5.2

雙擊啓動便可。而後,咱們訪問一下http://localhost:8091/

發現nginx已然運行成功(如圖5.3)

173428_pCrk_1177792.png
圖5.3

接下來,咱們看一下logs/access.log中的記錄(如圖5.4)

173801_c4Du_1177792.png
圖5.4

多了一條,證實有記錄了。

接着,咱們建立一個html(在哪兒建立都行)--- testlog.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <button id="click2log">點我</button>
        <script type="text/javascript">
            document
            .getElementById('click2log')
            .addEventListener('click', function () {
                (new Image()).src = 'http://localhost:8091/?action=log&clk=button';
            });
        </script>
    </body>
</html>

運行頁面,點擊按鈕。咱們發現,發送出一條日誌(如圖5.5)

174317_geMt_1177792.png
圖5.5

咱們再次打開access.log,發現多了一條日誌(如圖5.6)

174403_AzSS_1177792.png
圖5.6

因而咱們的目的達成了。之後能夠用action=log而且,clk=button的記錄,來看有多少用戶點擊了按鈕了。

示例代碼在此:

https://github.com/houyu01/lo...

6. 須要注意的點

在平常打日誌中,咱們會遇到這樣那樣的問題,這裏謹把我再工做中遇到的問題與你們分享一下。

1. 當點擊發生本頁跳轉的時候,同時發送日誌有必定概率沒法發出。

當a標籤發生點擊的時候,咱們每每會發送一條外鏈的點擊日誌,可是,若是這個a標籤是本頁跳轉(而不是新開頁面)的話,那麼在日誌發送以前,頁面有可能就已經跳轉了,這時,全部的請求都是發不出去的。目前應對這種情況,沒有什麼特別好的辦法,

  1. 能夠嘗試使用先發日誌,在日誌的回調用進行跳轉,這樣就有可能形成跳轉慢。

  2. 使用新式API navigator.sendBeacon(),能夠在本頁面跳轉以後,堅強的發出一條請求。可是兼容性不太好。

2. 發送的參數不要太多,太長

由於咱們的請求畢竟算是GET請求,確定有URL長度的限制。因此,發了大量的信息的話,怕會被截斷。

3. 有必定丟失率

由於網絡等等的緣由,發送的日誌,丟失率是確定會有的,各位若是習慣的話,也就行了。

不要走開,請關注我。下一章,咱們將繼續聊聊速度統計。

https://segmentfault.com/a/11...

原創文章,版權全部,轉載請註明出處

相關文章
相關標籤/搜索