JavaScript SDK 使用说明

最后更新于:2019-11-15 19:29:56

在使用前,请先阅读数据模型的介绍。
如想查看 SDK 历史版本,请参考 SDK 更新日志

1. 获取和引入神策分析 SDK

1.1 获取 JavaScript SDK

  • 从神策 cdn 获取,https://cdn.jsdelivr.net/npm/sa-sdk-javascript@版本号/sensorsdata.min.js 不推荐这么使用,因为不保证稳定性。版本号 1.7.1.1 ,其中 1.7 表示神策分析的版本号,后面的 1 表示没有后端更新的版本号,后面的 1 表示当前版本号。因为神策分析后端如果触发了影响 SDK 的更新,会导致数据异常,所以这里您可以根据代码生成工具(参考本文档 1.2.1 自动生成引入代码),生成一个可兼容的且会动态更新的版本。
  • GitHub 获取最新的代码下载,建议使用 Release 中的版本,首页上的 sensorsdata.min.js 是最新版的,可能不稳定。
  • 从 npm 获取, npm install sa-sdk-javascript , 这里获取后建议使用 webpack 等工具来打包。这里获取到的是最新版本。

目前 JavaScript SDK 压缩文件 sensorsdata.min.js 大小约为 20kb。

1.2 获取引入代码

1.2.1 自动生成引入代码

如果您当前的版本没有生成导入代码的功能,请联系神策技术支持进行升级

首先从神策分析的主页中,进入数据导入向导页面:

然后在右上角点击 数据接入 显示如下界面,然后点击 生成导入代码,进入代码生成页面,按需选择合适的选项,然后点击生成代码,如下图:

最后将代码放入网页中的合适位置即可。

1.2.2 手动配置引入代码

1.2.2.1 数据接收地址配置

首先从上面的导入向导中获取采集数据的 URL 和 Token。

如果使用神策分析 Cloud 服务,需获取的配置信息为:

如果用户使用单机版私有部署的神策分析,默认的配置信息为:

如果用户使用集群版私有部署的神策分析,默认的配置信息为:

如果私有部署的过程中修改了 Nginx 的默认配置,或通过 CDN 等访问神策分析,则请咨询相关人员获得配置信息。

1.3 多种引入方式介绍:

<script>
(function(para) {
  var p = para.sdk_url, n = para.name, w = window, d = document, s = 'script',x = null,y = null;
  if(typeof(w['sensorsDataAnalytic201505']) !== 'undefined') {
      return false;
  }
  w['sensorsDataAnalytic201505'] = n;
  w[n] = w[n] || function(a) {return function() {(w[n]._q = w[n]._q || []).push([a, arguments]);}};
  var ifs = ['track','quick','register','registerPage','registerOnce','trackSignup', 'trackAbtest', 'setProfile','setOnceProfile','appendProfile', 'incrementProfile', 'deleteProfile', 'unsetProfile', 'identify','login','logout','trackLink','clearAllRegister'];
  for (var i = 0; i < ifs.length; i++) {
    w[n][ifs[i]] = w[n].call(null, ifs[i]);
  }
  if (!w[n]._t) {
    x = d.createElement(s), y = d.getElementsByTagName(s)[0];
    x.async = 1;
    x.src = p;
    w[n].para = para;
    y.parentNode.insertBefore(x, y);
  }
})({
      sdk_url: '在 GitHub 下载新版本的 sensorsdata.min.js',
      name: 'sensors',
      server_url:'数据接收地址',
      //heatmap_url神策分析中点击分析及触达分析功能代码,代码生成工具会自动生成。如果神策代码中 `sensorsdata.min.js` 版本是 1.13.1 及以前版本,这个参数须配置,高于此版本不需要配置。
      heatmap_url: "在 GitHub 下载新版本的 heatmap.min.js",
      //web_url 神策分析中点击分析及触达分析功能会用到此地址,代码生成工具会自动生成。如果神策后台版本及 `sensorsdata.min.js` 均是 1.10 及以上版本,这个参数不需要配置。
      web_url:"神策分析后台地址",
      heatmap: {
         //是否开启点击图,默认 default 表示开启,自动采集 $WebClick 事件,可以设置 'not_collect' 表示关闭
         //需要 JSSDK 版本号大于 1.7
         clickmap:'default',
         //是否开启触达注意力图,默认 default 表示开启,自动采集 $WebStay 事件,可以设置 'not_collect' 表示关闭
         //需要 JSSDK 版本号大于 1.9.1
         scroll_notice_map:'not_collect'
      }
    });
    sensors.quick('autoTrack');
</script>

将以上代码放入 html 的 head 里面,一般最好放在稍微靠前点的位置。 您在使用 sensors.track() 时,只要保证写在上面引用的代码的下面就可以,不需要等 window.onload 后再执行。

如果你需要把引入代码和 SDK 文件整合在一个文件中,然后在页面头部通过 script src 的方式引入。你可以把引入代码改成如下方式。并放在下载下来的 sensorsdata.min.js 文件前面。

<script>
    (function(para) {
      if(typeof(window['sensorsDataAnalytic201505']) !== 'undefined') {
        return false;
      }
      window['sensorsDataAnalytic201505'] = para.name;
      window[para.name] = {
        para: para
      };
  })({
      name: 'sensors',
      server_url:'数据接收地址',
      //如果神策代码中 `sensorsdata.min.js` 是 1.13.1 以前的版本,必须须配置 heatmap_url,高于此版本不需要配置。heatmap_url 神策分析中点击分析及触达分析功能代码,代码生成工具会自动生成。
      heatmap_url: "在 GitHub 下载新版本的 heatmap.min.js ",
      //如果神策后台版本及 `sensorsdata.min.js` 均是 1.10 及以上版本,不需要配置 web_url 参数。web_url 神策分析中点击分析及触达分析功能会用到此地址,代码生成工具会自动生成。
      web_url:"神策分析后台地址",
      heatmap: {
         //是否开启点击图,默认 default 表示开启,自动采集 $WebClick 事件,可以设置 'not_collect' 表示关闭
         //需要 JSSDK 版本号大于 1.7
         clickmap:'default',
         //是否开启触达注意力图,默认 default 表示开启,自动采集 $WebStay 事件,可以设置 'not_collect' 表示关闭
         //需要 JSSDK 版本号大于 1.9.1
         scroll_notice_map:'not_collect'
      }
    });
  </script>
<script src="在 GitHub 下载新版本的 sensorsdata.min.js"></script>
<script>
  sensors.quick('autoTrack');
</script>

一般将这段放在公用头部。其他参数配置跟上文一致。

从 npm 获取 sdk , npm install sa-sdk-javascript

var sensors = require('sa-sdk-javascript'); 
sensors.init({
  server_url: '...',
  //如果神策代码中 `sensorsdata.min.js` 版本是 1.13.1 及以前版本,必须须配置 heatmap_url,高于此版本不需要配置。heatmap_url 神策分析中点击分析及触达分析功能代码,代码生成工具会自动生成。
  heatmap_url: "在 GitHub 下载新版本的 heatmap.min.js ",
  //如果神策后台版本及 `sensorsdata.min.js` 均是 1.10 及以上版本,这个参数不需要配置 web_url。 web_url 神策分析中点击分析及触达分析功能会用到此地址,代码生成工具会自动生成。
  web_url:"神策分析后台地址",
  heatmap: {
     //是否开启点击图,默认为 default 表示开启,自动采集 $WebClick 事件,可以设置 'not_collect' 表示关闭
     //需要 JSSDK 版本号大于 1.7
     clickmap:'default',
     //是否开启触达注意力图,默认为 default 表示开启,自动采集 $WebStay 事件,可以设置 'not_collect' 表示关闭
     //需要 JSSDK 版本号大于 1.9.1
     scroll_notice_map:'not_collect'
  }
  .......
});
sensors.quick('autoTrack'); //用于采集 $pageview 事件

GitHub 获取 sensorsdata.amd.min.js ,假设该文件放到与 require.js 同一目录中

requirejs(["./sensorsdata.amd.min"], function(sensors) {
            sensors.init({
                server_url: '...',
                heatmap:{
                    clickmap: 'default',
                    scroll_notice_map: 'default'
                }
            });
            sensors.quick('autoTrack');
        });

当神策服务器异常时,JS SDK发送的图片数据请求无法及时响应,会导致window.onload无法生效,所以建议不要将页面渲染的代码放在window.onload中。如果一定要使用window.onload的话,建议将send_type参数设置为'ajax',使用ajax发送数据。

1.4 参数配置

如果使用自动代码生成,一般情况下无需手工修改参数

1.4.1 普通参数

普通参数对代码埋点有效,下面是必填参数:

  • sdk_url: sensorsdata.min.js 文件的地址,请从 GitHub 获取并且放在你们自己网站目录下。
  • name: SDK 使用的一个默认的全局变量,如定义成 sensors 的话,后面可以使用 sensors.track() 用来跟踪信息。为了防止变量名重复,你可以修改成其他名称比如 sensorsdata 等 。
  • server_url: 数据接收地址。
  • heatmap_url: heatmap.min.js 文件的地址,请从 GitHub 获取并且放在你们自己网站目录下。神策分析中点击分析及触达分析功能代码,代码生成工具会自动生成。如果神策代码中 sensorsdata.min.js 版本是 1.13.1 及以前版本,这个参数须配置,高于此版本不需要配置。。
  • web_url: 神策分析后台地址,神策分析中点击分析及触达分析功能会用到此地址,代码生成工具会自动生成。如果神策后台版本及 sensorsdata.min.js 均是 1.10 及以上版本,这个参数不需要配置。

如果有需要,也可以修改可选参数:

  • heatmap:点击图配置。配置成 {} 表示开启 $WebClick 和 $WebStay 的自动采集,默认 $WebClick 只采集 a,button,input 三个 dom 元素的点击事件。详细配置参考
  • cross_subdomain: 设置成 true 后,表示在根域下设置 cookie 。也就是如果你有 zhidao.baidu.com 和 tieba.baidu.com 两个域,且有一个用户在同一个浏览器都登录过这两个域的话,我们会认为这个用户是一个用户。如果设置成 false 的话,会认为是两个用户。默认 true。
  • show_log: 设置 true 后会在网页控制台打 logger,会显示发送的数据,设置 false 表示不显示。默认 true。
  • use_client_time: 因为客户端系统时间的不准确,会导致发生这个事件的时间有误,所以这里默认为 false ,表示不使用客户端时间,使用服务端时间,如果设置为 true 表示使用客户端系统时间。如果你在属性中加入 {$time: new Date()} ,注意这里必须是 Date 类型,那么这条数据就会使用你在属性中传入的这个时间。
  • source_channel: 默认取来源是根据 utm_source 等 ga 标准来的。如果你用的是百度统计的 hmsr 等参数。可以在这里面加入,参数必须是数组,比如 ['hmsr']。
  • source_type: 自定义搜索引擎流量,社交流量,搜索关键词。具体用法参考 7.2 。
  • max_string_length: 通用字符串最大长度,超过部分会被截取丢弃(由于超过 7000 的字符串会导致 url 超长发不出去,所以限制长度),默认值:500。
  • is_track_device_id:设置成 true 后, 表示事件属性里面添加一个设备 id 的属性,存贮在 cookie 里面并发送。默认 false,记录但不发送。
  • send_type: 默认值 'image' 表示使用图片 get 请求方式发数据,( 神策系统 1.10 版本以后 ) 可选使用 'ajax' 和 'beacon' 方式发送数据,这两种默认都是 post 方式, beacon 方式兼容性较差。
  • callback_timeout: 默认值 200 ,单位毫秒,表示回调函数超时时间,如果数据发送超过 callback_timeout 还未返回结果,会强制执行回调函数。(SDK 版本 1.11.6 以后支持)
  • queue_timeout: 默认值 300 ,单位毫秒,表示队列发送超时时间,如果数据发送时间超过 queue_timeout 还未返回结果,会强制发送下一条数据。(SDK 版本 1.11.6 以后支持)
  • datasend_timeout: 默认值 3000 ,单位毫秒,表示数据发送超时时间,如果数据发送超过 datasend_timeout 还未返回结果,会强制取消该请求。(SDK 版本 1.11.6 以后支持)
  • preset_properties: 是否开启 $latest 最近一次相关事件属性采集以及配置 $url 作为公共属性,默认值为一个对象。(SDK 版本 1.14.10 及以后支持) 详细配置参考
  • is_track_single_page: 默认值 false,表示是否开启单页面自动采集 $pageview 功能,SDK 会在 url 改变之后自动采集web页面浏览事件 $pageview。(SDK 版本 1.12.18 以后支持)
  • batch_send: 默认值 false,表示不开启批量发送,设置为 true 表示开启批量采集,并且使用以下默认值 { datasend_timeout: 6000, 一次请求超过多少秒的话自动取消,防止请求无响应。send_interval: 6000, 间隔几秒发一次数据。one_send_max_length: 6 一次请求最大发送几条数据,防止数据太大 },也可以直接以 {} 的方式自定义这几个参数的值,详细介绍

2. 如何标识用户

在进行任何埋点之前,都应当先确定如何标识用户。distinct_id 是用来标识用户的,是一段唯一的字符串,默认情况下 JavaScript SDK 会自动生成一个 distinct_id 并永久保存在浏览器中的 Cookie 中(我们暂时称这个为 cookie_id),如果你已知了真实的用户 id ,你可以通过 sensors.login("你们服务端分配给用户具体的登录 ID",function(){//回调函数}) 来发送关联 cookie_id 的事件,同时这个方法还会用"你们服务端分配给用户具体的登录 ID"替换浏览器缓存中的 cookie_id

获取 Cookie 中的 distinct_id :sensors.store.getDistinctId();

由于调用 login 接口之后,distinct_id 会由匿名 id 变成真实 id,所以我们又提供了一个获取 Cookie 中的 匿名 id 的方法:
前端方式:
增加了获取匿名ID的方法 sensors.quick('getAnonymousID'); 返回匿名 id (SDK 版本 1.13.4 及以上支持),调用这个方法时,可能 SDK 还未初始化成功,建议将此方法放在下面代码中。

    sensors.quick('isReady',function(){
        ……  
        sensors.quick('getAnonymousID');
        ……
    });

后端方式: 可以在 Cookie 里面找到 key 为 sensorsdata2015jssdkcross 的 value 值然后进行 decodeURIComponent 解码,最后通过 JSON.parse 方法得到一个对象,对象里面的 distinct_id 即为用户所需要的 (注意,如果前端已经调用过 login 方法,那么此时 distinct_id 为真实 id,所以需要获取 first_id 字段)。

2.1 在登录和注册成功后,调用sensors.login("你们服务端分配给用户具体的登录 ID",function(){//回调函数}) 来标识真实用户

  • 注意:login 方法的回调函数需要 SDK 版本大于等于 1.14.8 才能使用,回调函数和批量发送功能不可同时使用。

通过 sensors.login("你们服务端分配给用户具体的登录 ID",function(){//回调函数}) 来把 SDK 自动生成的 cookie_id 关联成现在传入的 "你们服务端分配给用户具体的登录 ID"。且以后会一直使用这个 "你们服务端分配给用户具体的登录 ID"

我们的 JavaScript SDK 从 1.6.9 版本开始支持 sensors.login() 方法。
    sensors.login('user1312312123',function(){
        //回调函数的使用需要 SDK 版本大于等于 1.14.8
    });

问题1:这行代码放在哪里?
建议放在所有事件前面。也就是在 sdk 载入代码后面,先使用 sensors.login ("如果此时有这个你们服务端分配给用户具体的登录 ID 的话",function(){//回调函数}),然后再用 sensors.quick('autoTrack') 等,这样后续的事件才会使用这个更改后的 真实 id。
问题2:在什么时候调用?
页面登录的时候,只要获取到用户是登录状态,就需要调用。或者 注册流程成功的时候。
问题3:sensors.login 和 sensors.identify 有什么区别?
login 用来关联数据库的 id,identify 用来改变匿名 id,可以认为匿名 id 是跟浏览器绑定的。

2.2 使用 sensors.identify 来修改匿名 id

默认情况下,是把 cookie_id 作为 distinct_id 的。如果你能取到其他匿名 id(比如设备 id,或者你们自己生成的 cookie_id),可以用 sensors.identify(id) 来改变当前的 distinct_id

这个方法有三种使用方式:

  • sensors.identify(id): 这个 id 仅对当前页面有效。
  • sensors.identify(id, true): 会把这个 id 保存在浏览器的 cookie 中,该域名下的页面都会默认使用这个 id。该方法应用较多。
  • sensors.identify(): 重新生成一个新的 cookie_id,该方法一般情况不使用。

2.3 使用 sensors.logout 切换到之前的匿名 id

通过 sensors.logout() 来永久改变当前的 distinct_idcookie_id

    sensors.logout();  // 取消当前 login 的 id,改成最初自动生成的 cookie_id
    sensors.logout(true); // 取消当前 login 的 id,重新生成一个新的 cookie_id

问题1,这个在什么时候使用? 在你用过 sensors.login 后,在一个浏览器有多个用户登录的时候,你想在用户退出后改变当前的 distinct_id。

3. 事件追踪

3.1 事件公共属性

sensors.registerPage(object)

如果某个事件的属性,在所有事件中都会出现,可以通过 registerPage 方法将该属性设置为事件公共属性。例如电商产品中的用户等级,常作为事件的公共属性。sensors.registerPage({gender:"male"}) 。这样的话,下次你在使用 sensors.track("index_visit") 时等同于 sensors.track("index_visit", {gender:"male"})

再比如想在当前页面的后续事件中都注入当前页面地址及前向地址属性,只针对当前页面有效的方法如下:

<script>
(function(para) {
  var p = para.sdk_url, n = para.name, w = window, d = document, s = 'script',x = null,y = null;
  w['sensorsDataAnalytic201505'] = n;
  w[n] = w[n] || function(a) {return function() {(w[n]._q = w[n]._q || []).push([a, arguments]);}};
  var ifs = ['track','quick','register','registerPage','registerOnce','trackSignup', 'trackAbtest', 'setProfile','setOnceProfile','appendProfile', 'incrementProfile', 'deleteProfile', 'unsetProfile', 'identify','login','logout','trackLink','clearAllRegister'];
  for (var i = 0; i < ifs.length; i++) {
    w[n][ifs[i]] = w[n].call(null, ifs[i]);
  }
  if (!w[n]._t) {
    x = d.createElement(s), y = d.getElementsByTagName(s)[0];
    x.async = 1;
    x.src = p;
    w[n].para = para;
    y.parentNode.insertBefore(x, y);
  }
})({
      sdk_url: '在 GitHub 下载新版本的 sensorsdata.min.js',
      name: 'sensors',
      server_url:'数据接收地址',
      //heatmap_url神策分析中点击分析及触达分析功能代码,代码生成工具会自动生成。如果神策代码中 `sensorsdata.min.js` 版本是 1.13.1 及以前版本,这个参数须配置,高于此版本不需要配置。
      heatmap_url: "在 GitHub 下载新版本的 heatmap.min.js",
      //web_url 神策分析中点击分析及触达分析功能会用到此地址,代码生成工具会自动生成。如果神策后台版本及 `sensorsdata.min.js` 均是 1.10 及以上版本,这个参数不需要配置。
      web_url:"神策分析后台地址",
      heatmap: {}
    });
    //以异步加载 SDK 为例,神策 SDK 初始化完成,此时调用设置公共属性的方法,来保证之后的事件都有这两个属性。
    sensors.registerPage({
      current_url: location.href,
      referrer: document.referrer
    });
    sensors.quick('autoTrack'); //这时候,这个 Web 页面浏览事件,就会带有 current_url 和 referrer 这些属性。且仅对当前页面有效。
    sensors.track('button_A_click'); // 这时候,这个 button_A_click 事件,就会带有 current_url 和 referrer 这些属性。且仅对当前页面有效。
</script>

3.2 默认事件追踪(全埋点)

神策分析 JavaScript SDK AutoTrack 使用说明

3.3 自定义事件追踪

第一次接入神策分析时,建议先追踪 3~5 个关键的事件,只需要几行代码,便能体验神策分析的分析功能。例如:

  • 图片社交产品,可以追踪用户浏览图片和评论事件。
  • 电商产品,可以追踪用户注册、浏览商品和下订单等事件。

神策分析 SDK 初始化成功后,即可以通过 sensors.track(event_name[, properties][, callback]) 记录事件:

  • event_name: string,必选。表示要追踪的事件名。
  • properties: object,可选。表示这个事件的属性。
  • callback: function,可选。表示已经发送完数据之后的回调。
    // 追踪浏览商品事件。
    sensors.track('ViewProduct', {
        //String 类型
        ProductName: "MacBook Pro", 
        //Number 类型,-9E15 到 9E15 小数点后最多保留 3 位
        ProductPrice: 123.45,   
        //BOOL 类型,true 或 false
        IsAddedToFav: false,
        //List 类型,字符串元素的数组,最大元素个数为 500,其中每个元素使用 UTF-8 编码后最大长度 255 字节
        ProductList:["apple","orange"],   
        //DATETIME 类型,可以直接传 new Date() 或者 传 yyyy-MM-dd HH:mm:ss.SSS / yyyy-MM-dd HH:mm:ss 格式的字符串。
        ViewTime:new Date()
    });

4. 设置用户属性

为了更准确地提供针对人群的分析服务,可以使用神策分析 SDK 的 setProfile() 等方法设置用户属性,如年龄、性别等。用户可以在留存分析、分布分析等功能中,使用用户属性作为过滤条件,精确分析特定人群的指标。

你可以首先使用上面的 identify(userid) 来标识用户,然后可以对这个特定的用户设置一些属性。如果你不用这两个方法去标识用户,就会以 Cookie 中的匿名 distinct_id 来标识用户。

4.1 sensors.setProfile(properties[, callback])

直接设置用户的属性,如果存在则覆盖。

  • properties:object,必选。
  • callback:function,可选。
    sensors.setProfile({email:'xxx@xx'});

4.2 sensors.setOnceProfile(properties[, callback])

如果不存在则设置,存在就不设置。

  • properties:object,必选。
  • callback:function,可选。
    sensors.setOnceProfile({email:'xxx@xx'});

4.3 sensors.appendProfile(properties[, callback])

给数组属性添加值。通过setProfile只能改变属性的值。如果这个属性是数组类型的,你不想完全改变这个值,只想做添加操作可以使用此方法。

  • properties:object,必选。
  • callback:function,可选。
    //给 category 增加两个值
    sensors.appendProfile({catrgory: ['玉米','白菜']});
    //给 category 增加一个值
    sensors.appendProfile({catrgory: '玉米'});

4.4 sensors.incrementProfile(properties[, callback])

对当前用户的属性做递增或者递减。

  • properties:object 或者 string,必选。
  • callback:function,可选。
    // 表示 navClick 递减
    sensors.incrementProfile({'navClick': -1});
    // 表示 navClick 递增2
    sensors.incrementProfile({'navClick': 2});
    // 直接传入一个属性名,表示递增1
    sensors.incrementProfile('navClick');

4.5 sensors.deleteProfile([callback])

删除当前用户及他的所有属性。

  • callback function。{可选}
    //删除当前这个用户及他的所有属性
    sensors.deleteProfile();

4.6 sensors.unsetProfile(property[, callback])

删除当前用户的一些属性

  • property:array 或者 string
  • callback:function,可选。
    //删除 email 和 location 属性
    sensors.unsetProfile(['email','location']);
    //删除 email 属性
    sensors.unsetProfile('email');

5 如何确认数据发送成功

5.1、客户有测试项目(project=default)的情况下,优先建议客户使用测试项目的数据接收地址向测试项目发数据。

  • 页面集成 SDK 初始化代码且开启全埋点,验证数据接收地址,
  • 浏览器开发者工具 console 会打印采集的是数据,json 格式,

  • 浏览器开发者工具 network 中有 sa.gif 的图片请求,且状态码为 200,
  • 神策分析界面中,打开导入中的数据,在浏览器刷新页面,有数据进入,

  • 神策分析界面中,打开埋点管理查看,已入库 1 条,证明数据采集成功,
  • 神策分析界面中,事件分析查看数据。

5.2、客户没有测试项目,或者不方便在控制台查看数据的情况,那么需要使用 Debug 模式(debug 模式开启方式请联系值班同学)

  • 初始化集成 SDK 时需要添加两个参数,且均为 true
  • 打开测试页面,触发埋点事件,会有弹窗。
  • 神策分析页面,导入实时查看,Debug 数据中显示的数据为不真实入库的数据,在埋点关联中查询不到。

6 高级参数详解

6.1 批量发送

SDK 版本需 1.14.7 及以上

// 默认不开启批量发送
batch_send:false,
// 开启批量发送
batch_send:true,

//或者
batch_send:{
      datasend_timeout: 6000,  //一次请求超过多少秒的话自动取消,防止请求无响应。
      send_interval: 6000,    //间隔几秒发一次数据。
      one_send_max_length: 6  //一次请求最大发送几条数据,防止数据太大
  },

原理:

写入策略:触发事件就写入 localStorage,localStorage 的兼容性请 参考文档,如果浏览器不支持 localStorage,还是使用实时发送数据的方式。

发送策略:定时触发发送,或者,遇到 $pageview(或者使用 quick('autoTrack'); 方法)和 $SignUp 也会立即存储并且发送。

重复策略:必须请求 success 后,才会删除数据,不然会一直请求,直到数据满一定数量。

注意:

  • 1、批量发送功能和回调函数功能不可同时使用,比如 track 加了 callback ,使用批量发送后 callback 不会执行 。
  • 2、批量发送默认使用跨域 ajax 的方式发送数据。用客户端系统时间标识数据,如浏览器不支持跨域 ajax 发送数据,还是默认使用 img 且实时发送数据的方式。
  • 3、如果 localStorage 里已经存了超过 200 条数据,会导致批量发送功能失效,localStorage 中只保存这 200 条数据,新产生的数据使用 img 且实时发送数据的方式。当刷新页面或进入同域名的新页面时,如果网络条件恢复正常,会继续发送缓存的数据,批量发送功能也会恢复。
  • 4、use_app_track 和 batch_send 只能选择一个,开启了打通就不能再用批量发送。