Skip to content

埋点和性能监控

埋点

  • 埋点:埋点分析,是网站分析的一种常用的数据采集方法
  • 埋点的目的:获取用户信息,根据用户喜好,定制不同内容、决定产品迭代方向等

性能监控

  • 性能监控主要注意的几点:
    • 白屏时长(从请求到到达渲染条件,出现ui骨架的时间)
    • 重要页面的http请求时间
    • 重要页面的渲染时间
    • 首屏加载时长(页面所有动态内容加载完成的时间,包括ajax数据后渲染到页面的时间)
  • 数据监控就是能拿到用户的行为,需要注意的几点:
    • PV访问量(Page View)
    • UV访问量(Unique Visitor)
    • 记录操作系统和浏览器
    • 记录用户在页面的停留时间
    • 进入当前页面的来源页面(from 也就是哪里来的转化)

几种埋点方式

手动埋点(代码埋点)

  • 域名 document.domainURL document.URL
  • 页面标题 document.title
  • 分辨率 window.screen.height & window.screen.width
  • 颜色深度 window.screen.colorDepth
  • Referrer document.referrer
  • 客户端语言 navigation.language
  • Performance:DNS解析时间、TCP建立连接时间、首屏白屏时间、DOM渲染完成时间、页面load时间等
      //拿到Performance并且初始化一些参数
      let timing = performance.timing,
          start = timing.navigationStart,
          dnsTime = 0,
          tcpTime = 0,
          firstPaintTime = 0,
          domRenderTime = 0,
          loadTime = 0;
      //根据提供的api和属性,拿到对应的时间
      dnsTime = timing.domainLookupEnd - timing.domainLookupStart;
      tcpTime = timing.connectEnd - timing.connectStart;
      firstPaintTime = timing.responseStart - start;
      domRenderTime = timing.domContentLoadedEventEnd - start;
      loadTime = timing.loadEventEnd - start;
    
      console.log('DNS解析时间:', dnsTime, 
                  '\nTCP建立时间:', tcpTime, 
                  '\n首屏时间:', firstPaintTime,
                  '\ndom渲染完成时间:', domRenderTime, 
                  '\n页面onload时间:', loadTime);
  • 拿到数据以后我们可以在提交,或者通过图片的方式去提交埋点内容
      // 页面加载时发送埋点请求
      $(document).ready(function(){
      // ... 这里存在一些业务逻辑
      sendRequest(params);
      });
      // 按钮点击时发送埋点请求
      $('button').click(function(){
        //  这里存在一些业务逻辑
        sendRequest(params);
      });
        // 通过伪装成 Image 对象,传递给后端,防止跨域
          let img = new Image(1, 1);
          let src = `http://aaaaa/api/test.jpg?args=${encodeURIComponent(args)}`;
          img.src = src;
      //css实现的埋点
          .link:active::after{
          content: url("http://www.example.com?action=yourdata");
      }
      <a class="link">点击我,会发埋点数据</a>
      //data自定义属性,rangjs去拿到属性绑定事件,实现埋点
      //<button data-mydata="{key:'uber_comt_share_ck', act: 'click',msg:{}}">打车</button>
  • 这种埋点方式虽然能精准的监控到用户的行为,和网页性能等数据,但是非常繁琐,需要大量的工作量,当然这部分工作也有人帮我们做了,比如像友盟、百度统计等给我们其实提供了服务。我们可以按照他们的流程使用手动埋点

可视化埋点

  • 这种埋点方案,又叫无痕埋点,解放了前端手动操作的工作量,其实本质就是用系统去插入本来需要手动插入的埋点,这种埋点方式由于自带技术壁垒,所以开发人员基本基本不用考虑,花钱即可 ,比较靠谱的服务商 国外的Mixpanel,国内较早支持可视化埋点的有TalkingData、诸葛 IO,腾讯 MTA 等

无埋点

  • 无埋点并不是没有任何埋点,所谓无只是不需要工程师在业务代码里面插入侵入式的代码。只需要简单的加载了一段定义好的SDK代码,技术门槛更低,使用与部署也简单,避免了需求变更,埋点错误导致的重新埋点。这也是大多网站的选择,因为实在太简单了 我们先来看看百度埋点长什么样子:
       <script>
        var _hmt = _hmt || []
        ;(function() {
          var hm = document.createElement('script')
          hm.src =
            'https://hm.baidu.com/hm.js?<%= htmlWebpackPlugin.options.baiduCode %>'
          var s = document.getElementsByTagName('script')[0]
          s.parentNode.insertBefore(hm, s)
        })()
      </script>
  • 上图一段代码插入我们的html中,便能清晰的看到统计数据,省时省力,就是不省钱!但是缺点就是由于是自动完成,无法针对特定场景拿到数据,由后端来过滤和计算出有用的数据。导致服务器压力山大