0%

精准曝光组件介绍

近期有个需求,当一个组件在可视区中间80%范围内出现3S,即上传曝光。组件移出页面再已入,需要再次按规则曝光。

分析

  1. 因为tableview 和 scrollview 有复用机制,需要考虑曝光对象维护问题,为防止乱,用数据 id作为唯一标识。
  2. 手机资源紧缺,需要共用一个计时器
  3. 为了效率问题,需要在多线程上执行曝光逻辑

方案

  1. 使用基础的数组和字典,存储唯一数据id和曝光时间
  2. 使用累积的方式计算曝光时间
  3. 使用全局唯一定时器触发更新曝光时间
  4. 使用多个线程用于计算、曝光、移除、增加曝光时间。另起一个线程调度多线程计算

数据结构

1
2
3
4
5
6
7
PageMap<pageName:String, eventMap:EventMap>
TrackMap<eventName:String, dataMap:DataMap>
DataMap<dataId:String, DataObject>

DataObject: {
"view": "组件引用地址",
"time": 0

每次由组件触发加载数据,则找到page_name, 再找到component_name, 生成一个data_id1: object的节点。

如果在屏幕上,则设置time为0;如果组件不在屏幕上,则直接把时间设置为10s

调度

创建常驻Timer,用于调度定时器

在多线程上执行操作曝光逻辑。

流程图

expose-progress

Product

github地址: suiming/PetersLab (github.com)