zoukankan      html  css  js  c++  java
  • 埋点的三种方式

    1、第三方SDK(又可称前端数据采集)

    通过这种 SDK 只能够采集到一些基本的用户行为数据,比如设备的基本信息,用户执行的基本操作等。但是服务端、数据库中的数据并没有采集

    客户端 SDK 还有一个问题就是经常觉得统计的不准,和自己的业务数据库数据对不上,出现丢数据的情况。这是前端数据采集的先天缺陷,因为网络异常,或者统计口径不一致,都会导致数据对不上

    2、使用业务数据库做统计分析

    一般的互联网的产品,后端都是有业务数据库,里面存储了订单、用户注册信息等数据


    3、Web 日志进行统计分析

    建议:推荐尽量从后端进行埋点,这样就不用多个客户端埋了。当然,如果有行为只在客户端发生,还是要在客户端进行的

    可视化埋点:

    一是事先在产品上埋一个 SDK,二是通过可视化的方式,生成配置信息,也就是事件名称之类的定义,三是将采集的数据按照配置重命名

    例如点击事件——埋点

    index.js:

    ;(function ($) {
        $("a").click(function () {
            var good_info = $(this).attr("lang") //获得用户点击的商品信息
            var user_time = func_time() //获取用户当前系统时间s
            var brower_info = JSON.stringify($.support) //获取用户浏览器信息
            var ui = window.sessionStorage.getItem("user")
            var user_info=ui==null ? "10000" : ui //获取用户的密钥信息
    
            $.ajax({
                url:"http://localhost:8080/useract",
                data:{useract:"BROWSER "+user_time+" "+user_info+" "+good_info+" "+brower_info},
                type:"POST"
            })
        })
        function func_time() {
            var date = new Date()
            return date.getFullYear()+"-"+time_format(date.getMonth()+1)+"-"+time_format(date.getDate())+"T"
            +time_format(date.getHours())
        }
        function time_format(time) {
            if ((time+"").length<=1){
                return "0"+time;
            }else {
                return  time;
            }
    
        }
    })(jQuery);

    利用随机流读取生成文件:

    @RestController
    public class UserLogCtrl {
    
        @RequestMapping("/useract")
        public void useract(String useract){
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            String fileName = "C:\Users\Administrator\Desktop\cc\user_"
                    +sdf.format(new Date())+".log";
            File file = new File(fileName);
            try {
                if (!file.exists())  file.createNewFile();
                RandomAccessFile raf = new RandomAccessFile(file,"rw");
                raf.seek(file.length());
                raf.writeBytes(useract+"
    ");
                raf.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    算法导论(1)堆排序
    Opencv--HoughCircles源码剖析
    数据结构算法应用C++语言描述——(1)C++基础知识
    Java编程的23种设计模式
    团队建设
    管理方法论和角色认知
    压力测试:怎样设计全链路压力测试平台
    09-数据库优化方案(二):写入数据量增加时,如何实现分库分表
    08-数据库优化方案(一):查询请求增加时,如何做主从分离
    07-池化技术:如何减少频繁创建数据库连接的性能损耗
  • 原文地址:https://www.cnblogs.com/afeiiii/p/13809077.html
Copyright © 2011-2022 走看看