don't precompile regexps in storage.js (no gain)
This commit is contained in:
parent
93a4f4704f
commit
e3e1ecf2d3
18
popup.js
18
popup.js
|
@ -397,6 +397,21 @@ function handleDelete(id) {
|
|||
Additionally we'll check for invalid regexps.
|
||||
*/
|
||||
function detectSloppyRegexps({entry, style}) {
|
||||
// make sure all regexps are compiled
|
||||
const rxCache = BG.cachedStyles.regexps;
|
||||
for (const section of style.sections) {
|
||||
for (const regexp of section.regexps) {
|
||||
for (let pass = 1; pass <= 2; pass++) {
|
||||
const cacheKey = pass == 1 ? regexp : BG.SLOPPY_REGEXP_PREFIX + regexp;
|
||||
if (!rxCache.has(cacheKey)) {
|
||||
// according to CSS4 @document specification the entire URL must match
|
||||
const anchored = pass == 1 ? '^(?:' + regexp + ')$' : '^' + regexp + '$';
|
||||
const rx = tryRegExp(anchored);
|
||||
rxCache.set(cacheKey, rx || false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
const {
|
||||
appliedSections =
|
||||
BG.getApplicableSections({style, matchUrl: tabURL}),
|
||||
|
@ -404,9 +419,8 @@ function detectSloppyRegexps({entry, style}) {
|
|||
BG.getApplicableSections({style, matchUrl: tabURL, strictRegexp: false}),
|
||||
} = style;
|
||||
|
||||
BG.compileStyleRegExps({style, compileAll: true});
|
||||
entry.hasInvalidRegexps = wannabeSections.some(section =>
|
||||
section.regexps.some(rx => !BG.cachedStyles.regexps.has(rx)));
|
||||
section.regexps.some(rx => !rxCache.has(rx)));
|
||||
entry.sectionsSkipped = wannabeSections.length - appliedSections.length;
|
||||
|
||||
if (!appliedSections.length) {
|
||||
|
|
32
storage.js
32
storage.js
|
@ -4,7 +4,8 @@ const RX_NAMESPACE = new RegExp([/[\s\r\n]*/,
|
|||
/(@namespace[\s\r\n]+(?:[^\s\r\n]+[\s\r\n]+)?url\(http:\/\/.*?\);)/,
|
||||
/[\s\r\n]*/].map(rx => rx.source).join(''), 'g');
|
||||
const RX_CSS_COMMENTS = /\/\*[\s\S]*?\*\//g;
|
||||
const SLOPPY_REGEXP_PREFIX = '\0';
|
||||
// eslint-disable-next-line no-var
|
||||
var SLOPPY_REGEXP_PREFIX = '\0';
|
||||
|
||||
// Note, only 'var'-declared variables are visible from another extension page
|
||||
// eslint-disable-next-line no-var
|
||||
|
@ -88,13 +89,8 @@ function getStyles(options) {
|
|||
return dbExec('getAll').then(event => {
|
||||
cachedStyles.list = event.target.result || [];
|
||||
cachedStyles.byId.clear();
|
||||
const t0 = performance.now();
|
||||
let hasTimeToCompile = true;
|
||||
for (const style of cachedStyles.list) {
|
||||
cachedStyles.byId.set(style.id, style);
|
||||
if (hasTimeToCompile) {
|
||||
hasTimeToCompile = !compileStyleRegExps({style}) || performance.now() - t0 > 100;
|
||||
}
|
||||
}
|
||||
|
||||
cachedStyles.mutex.inProgress = false;
|
||||
|
@ -296,7 +292,6 @@ function saveStyle(style) {
|
|||
}
|
||||
style.id = style.id || event.target.result;
|
||||
invalidateCache(existed ? {updated: style} : {added: style});
|
||||
compileStyleRegExps({style});
|
||||
if (notify) {
|
||||
notifyAllTabs({
|
||||
method: existed ? 'styleUpdated' : 'styleAdded',
|
||||
|
@ -463,29 +458,6 @@ function styleSectionsEqual({sections: a}, {sections: b}) {
|
|||
}
|
||||
|
||||
|
||||
function compileStyleRegExps({style, compileAll}) {
|
||||
const t0 = performance.now();
|
||||
for (const section of style.sections || []) {
|
||||
for (const regexp of section.regexps) {
|
||||
for (let pass = 1; pass <= (compileAll ? 2 : 1); pass++) {
|
||||
const cacheKey = pass == 1 ? regexp : SLOPPY_REGEXP_PREFIX + regexp;
|
||||
if (cachedStyles.regexps.has(cacheKey)) {
|
||||
continue;
|
||||
}
|
||||
// according to CSS4 @document specification the entire URL must match
|
||||
const anchored = pass == 1 ? '^(?:' + regexp + ')$' : '^' + regexp + '$';
|
||||
const rx = tryRegExp(anchored);
|
||||
cachedStyles.regexps.set(cacheKey, rx || false);
|
||||
if (!compileAll && performance.now() - t0 > 100) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function invalidateCache({added, updated, deletedId} = {}) {
|
||||
if (!cachedStyles.list) {
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue
Block a user