Я разрабатываю расширение для Firefox.
Подводя итог, скажем, это проверка орфографии, примененная к странице с большим количеством ошибок.
Но это очень медленно, потому что слишком много шагов.
(1) Я создаю TreeWalker, который фильтрует только непустые текстовые узлы
var tree = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, {
acceptNode: function(node) {
if (node.parentNode.nodeName !== "SCRIPT" && node.nodeValue.trim().length > 0) {
return NodeFilter.FILTER_ACCEPT;
}
}
}, false);
(2) Цикл while скользит по TreeWalker
(3) В этом цикле while цикл for просматривает словарь (довольно большой) с комплексом RegEx
const dico = [
['suffix1','suffix2','correction'],
['','',''],
['','',''],
// a lot of lines
];
(4) Текст заменен
dl = dico.length;
function skim(){
while (tree.nextNode()) {
for (var i=0; i < dl ; i++) {
var r1 = new RegExp("([a-zÀ-ÖÙ-öù-üœŒ]+)?(" + dico[i][0] + ")[-/·∙.•](" + dico[i][1] + ")[-/·∙.•]?(s)?(?![a-z])", "gi");
tree.currentNode.nodeValue = tree.currentNode.nodeValue.replace(r1, dico[i][3]);
}
}
}
Кроме того, я хотел бы использовать другую функцию, которая выделяет орфографические ошибки, что означает добавление большого количества узлов элементов между текстовыми узлами.
Как я могу оптимизировать это, пожалуйста? :)
На данный момент единственное решение, которое я нашел, - это упростить словарь, но я с этим покончил. И замените TreeWalker
на эквиваленты, но это быстрее.
Спасибо!