[聊一聊系列]聊一聊前端功能统计那些事儿

news/2024/7/3 5:20:25

欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码):https://segmentfault.com/blog...

1. 什么是功能统计

作为一名开发,我们的产品发布出去之后,无论是产品还是运营,其实都是想及时了解产品对用户产生的影响的。用户到底喜欢什么不喜欢什么。但是如果拉住用户去一个个问的话,也无法得到最真实的大众的想法。于是,运用大数据进行分析,就变成了产品们的利器。

那么这些反映了用户真实行为的数据,就得靠前端工程师们来打印了。

比如,你想看一个功能有多少用户进行了点击,来证明用户是否喜欢这个功能,亦或是你想看看用户究竟会在你的页面停留多长时间,从而判断用户的黏性。那么,在用户点击那个功能的时候,前端发送一条日志到服务端,这样积累下去,我们就能获得,每天有多少用户在点击某一个功能了。在功能发生迭代后,我们也能根据统计,来判断用户是否喜欢新的变化。

2. 如何统计

一般来讲,只要在想统计的行为发生时,发送一条请求到达服务端即可。这样我们的服务端就有了相应的记录。我们就能开心的利用记录数量来判断点击数量了。

一般来讲我们不必为了发送请求,就在各处点击的地方加个ajax,其实有种发送请求的方式比ajax更加的简单。而且还避免了跨域问题。

其实直接给一个图片、script标签赋值地址,就完成了一次GET请求。

例(如图2.1所示):

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

图片描述
图2.1

我们看到,轻轻松松就发送了一条请求出去,亦或者是使用script标签,或者fetch之类的方式也可以达到目的。

本人观察了一下腾讯网和淘宝网,的日志。发现淘宝网使用的是请求一张空图片到服务端,以此来实现的日志打印。

而腾讯网使用的,则是发送一个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...

原创文章,版权所有,转载请注明出处


http://www.niftyadmin.cn/n/2001636.html

相关文章

HLS点播php上传转码过程,转码后分发HLS部署实例 - SRS Wiki 中文文档

HLS需要h.264aac&#xff0c;若符合这个要求可以按照Usage: HLS部署&#xff0c;若不符合这个要求则需要转码。如何知道流是否是h264aac编码&#xff1a;Usage: HLS中的Q&A说明的问题。看编码器的参数&#xff0c;FMLE可以选视频编码为vp6或者h264&#xff0c;音频一般为mp…

linux 目录s,Linux+ln+-s目录

Linux下大部分系统默认自带python2.x的版本&#xff0c;最常见的是python2.6或python2.7版本&#xff0c;默认的python被系统很多程序所依赖&#xff0c;比如centos下的yum就是python2写的&#xff0c;所以默认版本不要轻易删除&#xff0c;否则会有一些问题&#xff0c;如果需…

(转)HDFS客户端的权限错误:Permission denied

2019独角兽企业重金招聘Python工程师标准>>> 搭建了一个Hadoop的环境&#xff0c;Hadoop集群环境部署在几个Linux服务器上&#xff0c;现在想使用windows上的Java客户端来操作集群中的HDFS文件&#xff0c;但是在客户端运行时出现了如下的认证错误&#xff0c;被折磨…

linux 用户进程结束后 malloc申请的内存会自动释放吗,当程序退出后,动态申请的内存会自动释放吗...

我们知道程序在运行的过程中是需要占用一定内存的&#xff0c;一般程序所需要的内存由操作系统来分配&#xff0c;由操作系统分配的&#xff0c;自然需要由操作系统回收。但是在实际开发中&#xff0c;用户可以通过一些函数人为地申请内存&#xff0c;再由用户来释放&#xff0…

如何做好IT运营.

定义IT管理的重点在于业务策略与 IT 部门提供的服务之间的一致性。IT 管理可建立必要的管理机制来确保可预测的 IT 服务交付&#xff0c;从而确保业务流程和 IT 流程之间的联系。IT 管理传统上属于CIO、CEO和一些 IT 和业务线&#xff08;line of business&#xff0c;LOB&…

linux 对比2个目录,linux – 比较2个目录并复制第3个目录中的差异

使用–compare-dest.从手册页&#xff1a;–compare-destDIR –This option instructs rsync to use DIR on the destination machine as an additional hierarchy to compare destination files against doing transfers (if the files are missing in the destination direct…

Java HashMap工作原理及实现

原文出处&#xff1a; Yikun 1. 概述 从本文你可以学习到&#xff1a; 什么时候会使用HashMap&#xff1f;他有什么特点&#xff1f;你知道HashMap的工作原理吗&#xff1f;你知道get和put的原理吗&#xff1f;equals()和hashCode()的都有什么作用&#xff1f;你知道hash的实现…

linux c程序设计大全 下载,The C programming Language[C程序设计语言]PDF

内容简介 Presents a complete guide to ANSI standard C language programming. Written by the developers of C, this new version helps readers keep up with the finalized ANSI standard for C while showing how to take advantage of Cs rich set of operators, …