mirror of https://github.com/gorhill/uBlock.git
Ensure CSSTree does not hold onto last parsed string
When done compiling, force CSSTree to parse an empty string, so as to ensure it doesn't keep a reference to that string. Typically, the string passed to CSSTree is a small slice of a larger string which is a whole filter list. This means that holding a reference to the sliced string causes the JS engine to hold in memory to the whole filter list last parsed.
This commit is contained in:
parent
f7511cc13f
commit
1dba557c9a
|
@ -908,6 +908,10 @@ export class AstFilterParser {
|
|||
this.scriptletArgListParser = new ArgListParser(',');
|
||||
}
|
||||
|
||||
finish() {
|
||||
this.selectorCompiler.finish();
|
||||
}
|
||||
|
||||
parse(raw) {
|
||||
this.raw = raw;
|
||||
this.rawEnd = raw.length;
|
||||
|
@ -3229,6 +3233,14 @@ class ExtSelectorCompiler {
|
|||
this.error = undefined;
|
||||
}
|
||||
|
||||
// CSSTree library holds onto last string parsed, and this is problematic
|
||||
// when the string is a slice of a huge parent string (typically a whole
|
||||
// filter lists), it causes the huge parent string to stay in memory.
|
||||
// Asking CSSTree to parse an empty string resolves this issue.
|
||||
finish() {
|
||||
cssTree.parse('');
|
||||
}
|
||||
|
||||
compile(raw, out, compileOptions = {}) {
|
||||
this.asProcedural = compileOptions.asProcedural === true;
|
||||
|
||||
|
|
|
@ -1102,6 +1102,7 @@ import {
|
|||
}
|
||||
|
||||
compiler.finish(writer);
|
||||
parser.finish();
|
||||
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/1365
|
||||
// Embed version into compiled list itself: it is encoded in as the
|
||||
|
|
Loading…
Reference in New Issue