@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
25 lines (24 loc) • 1.17 kB
JavaScript
import { truncateTimeFrame } from '../../utils/time';
/**
* Optimized strategy for impressions tracker. Wraps impressions to store and adds previousTime if it corresponds
*
* @param impressionsObserver - impression observer. previous time (pt property) is included in impression instances
* @param impressionCounts - cache to save impressions count. impressions will be deduped (OPTIMIZED mode)
* @returns Optimized strategy
*/
export function strategyOptimizedFactory(impressionsObserver, impressionCounts) {
return {
process: function (impression) {
// DEBUG mode without previous time, for impressions with properties
if (impression.properties)
return true;
impression.pt = impressionsObserver.testAndSet(impression);
var now = Date.now();
// Increments impression counter per featureName
if (impression.pt)
impressionCounts.track(impression.feature, now, 1);
// Checks if the impression should be added in queue to be sent
return (!impression.pt || impression.pt < truncateTimeFrame(now)) ? true : false;
}
};
}