zoukankan      html  css  js  c++  java
  • 使用dom的几个事件统计用户请求

    pc 端的用户统计相对好处理点,我们可以基于window 的一些onload,onbeforeunload 以及一些特征处理(一些算法)
    但是对于移动端h5的就有点少复杂了,移动端的用户操作习惯与pc 端的有不一样的地方,以下是一些尝试(方案不完备)
    dom 几个新的event: pageshow,pagehide,visibilitychange

    pageshow

    pageshow 事件类似于 load 事件,load 事件在页面第一次加载时触发, pageshow 事件在每次加载页面时触发,即 load
    事件在页面从浏览器缓存中读取时不触发

    pagehide

    pagehide 事件类似于 unload 事件,在用户离开网页时触发(如点击一个链接、刷新页面、提交表单、关闭浏览器、前进、后退等)

    visibilitychange

    事件用于监听网页发生变化(进入后台,进入前台)

    集成使用

    我们可以基于onload处理页面首次加载,同时也可以基于pageshow,pagehide查看用户的离开以及其他事件(但是在基于webview的就不太好了)
    这种问题我们可以基于visibilitychange解决下(相对靠谱点,测试可行),同时对于数据的分析我们可以基于nginx 的empty_gif (使用openresty 会更强大)
    基于nginx 的log 分析用户请求状态

    • 简单web demo
      index.html
     
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body  onload="cookieInit()" >
        <div id="demapp" onclick="demo()">
            this is a demo 
            <input  text="demoapp" id="demoapp2">
            <button onclick="demo4()">click</button>
        </div>
        <script>
          window.onbeforeunload = closedemo;
          window.addEventListener("pageshow",function(e){
            var img = new Image(1,1);
            var info = document.cookie;
            var  type = "pageshow";
            img.src = "/images/demoapp.gif?c="+info+"&type="+type;
          })
          document.addEventListener("visibilitychange", function(e){
            var img = new Image(1,1);
            var info = document.cookie+document.visibilityState
            var  type = "visibilitychange";
            img.src = "/images/demoapp.gif?c="+info+"&type="+type;  
          })
          window.addEventListener("pagehide",function(e){
            var img = new Image(1,1);
            var info = document.cookie;
            var  type = "pagehide";
            img.src = "/images/demoapp.gif?c="+info+"&type="+type;
          })
          function closedemo(){
                var img = new Image(1,1);
                var info = document.cookie;
                var  type = "close";
                img.src = "/images/demoapp.gif?c="+info+"&type="+type;
          }
          function cookieInit(){
              document.cookie="dalong=demoapp"
          }
            function demo4(){
                var val = document.getElementById("demoapp2")
                //console.log(val.value)
                alert(val.value)
            }
            function demo(){
                console.log("first")
            }
            function demo2(){
                console.log("body click")
            }
            document.addEventListener("click", function(e){
                e.preventDefault()
                console.log(e)
                console.log(JSON.stringify(e))
                var img = new Image(1,1);
                var info = document.cookie
                img.src = "/images/demoapp.gif?c="+info;
            })
        </script>
    </body>
    </html>
     
     
    • nginx.conf
    worker_processes  1;
    user root;  
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        gzip  on;
        real_ip_header     X-Forwarded-For;
        server {
            listen       80;
            charset utf-8;
            default_type text/html;
            location / {
                default_type text/html;
                index index.html;
            }
            location /id {
                content_by_lua_block {
                    ngx.say(ngx.var.request_id)
                }
            }
            location /images/ {
                add_header Cache-Control no-store;
                add_header Cache-Control must-revalidate;
                empty_gif;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }

    说明

    以上是一个简单的学习,基于上边的一些基本原理,以及openrety,我们可以制作一个简易但是高效的用户行为统计了

    参考资料

    https://developer.mozilla.org/zh-CN/docs/Web/Events
    https://www.jianshu.com/p/7c85610d5404
    https://blog.csdn.net/yihanzhi/article/details/88244913
    https://www.cnblogs.com/rongfengliang/p/13088923.html
    https://www.df5d.com/OpenResty/bhkh.html

  • 相关阅读:
    字符编码相关
    函数之形参与实参
    文件操作模式
    函数对象,名称空间,作用域,和闭包
    吴裕雄天生自然SPRINGBOOT开发实战处理'spring.datasource.url' is not specified and no embedded datasource could be autoconfigured
    吴裕雄天生自然SPRINGBOOT开发实战处理XXXX that could not be found.
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot HTML表单登录
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot REST示例
    吴裕雄天生自然SpringBoot开发实战学习笔记处理 Could not write metadata for '/Servers'.metadata\.plugins\org.eclipse.core.resources\.projects\Servers\.markers.snap (系统找不到指定的路径。)
    吴裕雄天生自然SPRINGBOOT开发实战SpringBoot Tomcat部署
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/13156656.html
Copyright © 2011-2022 走看看