Skip to content

Commit

Permalink
Prebid core: optimize getRefererInfo to run only once per page (prebi…
Browse files Browse the repository at this point in the history
  • Loading branch information
dgirardi authored and JacobKlein26 committed Feb 8, 2023
1 parent 1e5c1eb commit b2fc2d5
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 3 deletions.
13 changes: 12 additions & 1 deletion src/refererDetection.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import { config } from './config.js';
import {logWarn} from './utils.js';

let RI = new WeakMap();

/**
* Prepend a URL with the page's protocol (http/https), if necessary.
*/
Expand Down Expand Up @@ -252,10 +254,19 @@ export function detectReferer(win) {
};
}

return refererInfo;
return function() {
if (!RI.has(win)) {
RI.set(win, Object.freeze(refererInfo()));
}
return RI.get(win);
}
}

/**
* @type {function(): refererInfo}
*/
export const getRefererInfo = detectReferer(window);

export function resetRefererInfo() {
RI = new WeakMap();
}
3 changes: 2 additions & 1 deletion test/spec/modules/enrichmentFpdModule_spec.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { expect } from 'chai';
import { getRefererInfo } from 'src/refererDetection.js';
import {getRefererInfo, resetRefererInfo} from 'src/refererDetection.js';
import { processFpd, coreStorage } from 'modules/enrichmentFpdModule.js';

describe('the first party data enrichment module', function() {
Expand All @@ -20,6 +20,7 @@ describe('the first party data enrichment module', function() {
});

beforeEach(function() {
resetRefererInfo();
querySelectorStub = sinon.stub(window.top.document, 'querySelector');
querySelectorStub.withArgs("link[rel='canonical']").returns(canonical);
querySelectorStub.withArgs("meta[name='keywords']").returns(keywords);
Expand Down
3 changes: 2 additions & 1 deletion test/spec/modules/fpdModule_spec.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {expect} from 'chai';
import {config} from 'src/config.js';
import {getRefererInfo} from 'src/refererDetection.js';
import {getRefererInfo, resetRefererInfo} from 'src/refererDetection.js';
import {processFpd, registerSubmodules, startAuctionHook, reset} from 'modules/fpdModule/index.js';
import * as enrichmentModule from 'modules/enrichmentFpdModule.js';
import * as validationModule from 'modules/validationFpdModule/index.js';
Expand Down Expand Up @@ -70,6 +70,7 @@ describe('the first party data module', function () {
});

beforeEach(function() {
resetRefererInfo();
querySelectorStub = sinon.stub(window.top.document, 'querySelector');
querySelectorStub.withArgs("link[rel='canonical']").returns(canonical);
querySelectorStub.withArgs("meta[name='keywords']").returns(keywords);
Expand Down

0 comments on commit b2fc2d5

Please sign in to comment.