mirror of
https://github.com/gorhill/uBlock.git
synced 2024-11-07 03:12:33 +01:00
fix #3335
This commit is contained in:
parent
fa048990ca
commit
958a7c20ed
@ -246,7 +246,9 @@ vAPI.domWatcher = (function() {
|
||||
}
|
||||
}
|
||||
if ( addedNodeLists.length !== 0 || removedNodes ) {
|
||||
safeObserverHandlerTimer.start(1);
|
||||
safeObserverHandlerTimer.start(
|
||||
addedNodeLists.length < 100 ? 1 : undefined
|
||||
);
|
||||
}
|
||||
//console.timeEnd('dom watcher/observer handler');
|
||||
};
|
||||
@ -486,9 +488,10 @@ vAPI.DOMFilterer = (function() {
|
||||
[ ':xpath', PSelectorXpathTask ]
|
||||
]);
|
||||
}
|
||||
this.budget = 250; // I arbitrary picked a 1/4 second
|
||||
this.budget = 200; // I arbitrary picked a 1/5 second
|
||||
this.raw = o.raw;
|
||||
this.cost = 0;
|
||||
this.lastAllowanceTime = 0;
|
||||
this.selector = o.selector;
|
||||
this.tasks = [];
|
||||
var tasks = o.tasks;
|
||||
@ -533,8 +536,6 @@ vAPI.DOMFilterer = (function() {
|
||||
this.addedSelectors = new Map();
|
||||
this.addedNodes = false;
|
||||
this.removedNodes = false;
|
||||
this.addedNodesHandlerMissCount = 0;
|
||||
this.currentResultset = new Set();
|
||||
this.selectors = new Map();
|
||||
};
|
||||
|
||||
@ -587,8 +588,7 @@ vAPI.DOMFilterer = (function() {
|
||||
this.addedSelectors.clear();
|
||||
}
|
||||
|
||||
var currentResultset = this.currentResultset,
|
||||
entry, nodes, i, node;
|
||||
var entry, nodes, i;
|
||||
|
||||
if ( this.addedSelectors.size !== 0 ) {
|
||||
//console.time('procedural selectors/filterset changed');
|
||||
@ -596,9 +596,7 @@ vAPI.DOMFilterer = (function() {
|
||||
nodes = entry[1].exec();
|
||||
i = nodes.length;
|
||||
while ( i-- ) {
|
||||
node = nodes[i];
|
||||
this.domFilterer.hideNode(node);
|
||||
currentResultset.add(node);
|
||||
this.domFilterer.hideNode(nodes[i]);
|
||||
}
|
||||
}
|
||||
this.addedSelectors.clear();
|
||||
@ -610,40 +608,31 @@ vAPI.DOMFilterer = (function() {
|
||||
|
||||
this.addedNodes = this.removedNodes = false;
|
||||
|
||||
var afterResultset = new Set(),
|
||||
t0 = Date.now(), t1, cost, pselector;
|
||||
var t0 = Date.now(),
|
||||
t1, pselector, allowance;
|
||||
|
||||
for ( entry of this.selectors ) {
|
||||
pselector = entry[1];
|
||||
allowance = Math.floor((t0 - pselector.lastAllowanceTime) / 2000);
|
||||
if ( allowance >= 1 ) {
|
||||
pselector.budget += allowance * 50;
|
||||
if ( pselector.budget > 200 ) { pselector.budget = 200; }
|
||||
pselector.lastAllowanceTime = t0;
|
||||
}
|
||||
if ( pselector.budget <= 0 ) { continue; }
|
||||
nodes = pselector.exec();
|
||||
t1 = Date.now();
|
||||
pselector.budget += t0 - t1;
|
||||
if ( pselector.budget < -500 ) {
|
||||
console.log('uBO: disabling %s', pselector.raw);
|
||||
pselector.budget = -0x7FFFFFFF;
|
||||
}
|
||||
t0 = t1;
|
||||
i = nodes.length;
|
||||
while ( i-- ) {
|
||||
node = nodes[i];
|
||||
this.domFilterer.hideNode(node);
|
||||
afterResultset.add(node);
|
||||
}
|
||||
t1 = Date.now();
|
||||
cost = t1 - t0;
|
||||
t0 = t1;
|
||||
if ( cost <= 8 ) { continue; }
|
||||
pselector.budget -= cost;
|
||||
if ( pselector.budget <= 0 ) {
|
||||
console.log('disabling %s', pselector.raw);
|
||||
this.domFilterer.hideNode(nodes[i]);
|
||||
}
|
||||
}
|
||||
if ( afterResultset.size !== currentResultset.size ) {
|
||||
this.addedNodesHandlerMissCount = 0;
|
||||
} else {
|
||||
this.addedNodesHandlerMissCount += 1;
|
||||
}
|
||||
for ( node of currentResultset ) {
|
||||
if ( afterResultset.has(node) === false ) {
|
||||
this.domFilterer.unhideNode(node);
|
||||
}
|
||||
}
|
||||
|
||||
this.currentResultset = afterResultset;
|
||||
|
||||
//console.timeEnd('procedural selectors/dom layout changed');
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user