Плагин markjs - тормозит страницу

Для выделения определенных слов на странице я использую плагин markjs.io

var words = [...очень много слов...];
words.forEach(function(item, i) {
    hiLight(item.word, item.class_name);
});

function hiLight(word, class_name) {
    let context = document.querySelector("body");
    let instance = new Mark(context);

    instance.mark(word, {
        accuracy: {
            'value': 'exactly',
            'limiters': ['!', '.']
        },
        separateWordSearch: false,
        'element': 'span',
        'className': 'highlight '+class_name,
        'debug': false
    });
}

И когда приходит большой массив со словами - то заметно что страница зависает пока markjs не выделит все найденные на странице слова.

Можно ли как-то организовать его работу чтобы он не тормозил страницу?


Ответы (1 шт):

Автор решения: Nikolya Shirshov

Один из вариантов оптимизации вынести создание instance и context из forEach, т.к. инстанс один на все слова. И еще, если слов больше 600 библиотека падает из-за переполнения стека.

const words = [...очень много слов...];
const context = document.querySelector("body");
const instance = new Mark(context);

words.forEach((item) => {
    hiLight(item.word, item.class_name);
});

function hiLight(word, class_name) {
    instance.mark(word, {
        accuracy: {
            'value': 'exactly',
            'limiters': ['!', '.']
        },
        separateWordSearch: false,
        'element': 'span',
        'className': 'highlight '+class_name,
        'debug': false
    });
}
→ Ссылка