mirror of
https://github.com/gorhill/uBlock.git
synced 2024-11-02 00:42:45 +01:00
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(',');
|
this.scriptletArgListParser = new ArgListParser(',');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
finish() {
|
||||||
|
this.selectorCompiler.finish();
|
||||||
|
}
|
||||||
|
|
||||||
parse(raw) {
|
parse(raw) {
|
||||||
this.raw = raw;
|
this.raw = raw;
|
||||||
this.rawEnd = raw.length;
|
this.rawEnd = raw.length;
|
||||||
@ -3229,6 +3233,14 @@ class ExtSelectorCompiler {
|
|||||||
this.error = undefined;
|
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 = {}) {
|
compile(raw, out, compileOptions = {}) {
|
||||||
this.asProcedural = compileOptions.asProcedural === true;
|
this.asProcedural = compileOptions.asProcedural === true;
|
||||||
|
|
||||||
|
@ -1102,6 +1102,7 @@ import {
|
|||||||
}
|
}
|
||||||
|
|
||||||
compiler.finish(writer);
|
compiler.finish(writer);
|
||||||
|
parser.finish();
|
||||||
|
|
||||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/1365
|
// https://github.com/uBlockOrigin/uBlock-issues/issues/1365
|
||||||
// Embed version into compiled list itself: it is encoded in as the
|
// Embed version into compiled list itself: it is encoded in as the
|
||||||
|
Loading…
Reference in New Issue
Block a user