- 使用UMD方式定义, 兼容AMD/CMD及非模块规范
- 调用统一的上报cgi
- 上报节流(合并短时间内的连续上报,减少上报请求数)
- 可根据项目情况使用工厂方法定制自己的上报器(可定制不同的mid和默认行为)
- 定制上报器支持字符串MAP(与上报需求一一对应, 简化上报点, 方便后续维护)
建议使用bower方式引入:
npm install bower
bower install IMReport
默认本组件会安装在当前目录的bower_components下
例2.1.1
require('bower_components/IMReport/src/IMReport',function(IMReport){
//1. 进行全局配置
IMReport.config({
//...
});
//2. 创建上报器实例, 定制上报器参数和map列表
var reportInstance = IMReport.ReportFactory({
config: { //一个map表, key为上报项, value为上报参数
'REPORT_POINT_A':{'aId':1,'mId':100}
}
});
//3. 在业务代码中使用实例的report方法上报
function doSth(){
//bussiness code
reportInstance.report('REPORT_POINT_A');
//...
}
});
例2.1.2 html内
<!-- 引入核心js -->
<script src="bower_components/IMReport/src/IMReport.js"></script>
<script>
(function(){
//核心js在找不到define方法时会选择暴露IMReport方法在window下
//所以下面的代码直接用IMReport即可
IMReport.config({
//...
});
var reportInstance = IMReport.ReportFactory({
//...
});
function doSth(){
//bussiness code
reportInstance.report('XXX');
//...
}
})();
</script>
通常, 我们会调用统一的jsreport cgi进行数据上报
统一的上报cgi支持传一系列参数, 可上报到不同的系统( monitor imdata ads...)
但这个cgi的上报参数是靠约定进行字符串拼接的
actionId-value-monitorId-flag1-flag2-flag3-ver-rev
用起来非常麻烦!
本组件就是为了前端上报方便而诞生的
core是amd写的, knight在core的基础上封装了一层factory以及map的逻辑.
下面按照js里使用时的形式列一下有哪些参数:
前面是js里使用时的参数字符串,
后面是完整的字符串(可对应上面的拼接顺序看)以及说明
带方括号的是可选参数
不带方括号的参数在上报时至少要有一个
- `mId` monitorId monitor系统的上报id
- `aId` actionId 数分:行为id
- `v` [value] 数分:行为value
- `flag1` [flag1] 数分:行为的标志位1
- `flag2` [flag2] 数分:行为的标志位2
- `flag3` [flag3] 数分:行为的标志位3
- `ver` [ver] 数分:版本
- `rev` [rev] 数分:附加参数
###core: config(object)
####配置上报的全局默认参数
例4.1.1:
IMReport.config({//
'bId': 192, //qqm分配的jsreport的msgQ ID
'aId': function (mId){ return '0';}, //@amd补充下这个参数的注释?
'ctype': 2 //上报cgi类型,默认是需要登录态,type=2,是不需要登录态
});
###core: ReportFactory(object) ####创建一个定制的上报器 例4.2.1:
var isVisitor = $.bom.getHash('visitor') ? 1:0;
var from = $.bom.getHash('from');
var reportInstance = IMReport.ReportFactory({
config: {
'PAGE_ENTER': 800001, //注:仅传一个数字时该数字表示mId
'DOWNLOAD_BTN_CLICK':{'aId':9002,'mId':800002},
'DOWNLOAD_BTN_CLICK#SUCC':{'aId':9003,'mId':800003}
},
getDefaultOptFn:function(usrParam){
//定制上报器特有的上报行为(如果不传此函数, 意味着本上报器没有定制的特殊上报行为)
var opt = {};
opt.bId = 193; //定制上报器默认bId,该bId优先级高于全局的bId
opt.flag1 = isVisitor; //如果产品要求区分一些上报情景, 可能会要求aId上报时带上flag,用约定的不同的值来做统计用
//统一在aId上报时, 对v进行处理(from create: 1, else: 0)
if( (typeof usrParam==='object')
&& ('aId' in usrParam)
&& !('v' in usrParam)){
opt.v = (from && from==='create') ? 1 : 0;
}
}
});
###instance: report(string[, object])
####在具体上报点调用的上报方法
注意: 必须先调用上面的IMReport.ReportFactory()
来得到一个上报器实例, 然后再调用该方法
例4.3.1:(最简单也是最常用的上报调用)
...
reportInstance.report('PAGE_ENTER');
...
例4.3.1:(指定上报点参数的上报调用)
reportInstance.report('DOWNLOAD_BTN_CLICK',{
bId: 194, //上报点指定的bId, 优先级最高
v: getRoleType=='owner' ? 1:0 //上报点指定的v, 优先级最高
});
- 和grunt task整合, 做到自动维护上报MAP表
- 完善测试用例和demo