Кеширование окна jsdom

Использование jsdom.jsdom() в express.js Я создаю документ с некоторой разметкой макета базы и присоединяю к нему несколько библиотек на стороне клиента, таких как jQuery.

Было бы неплохо только один раз выполнить эту настройку.

Проблема заключается в том, что DOM документа окна изменится в зависимости от запрошенного URL-адреса. Есть ли способ для каждого запроса начать с одного и того же кэшированного объекта окна и улучшить его или он должен быть настроен с нуля при каждом запросе?

Ответы

Ответ 1

Похоже, вам нужен простой хэш-код JavaScript?

var cache = Object.create(null); // avoids spurious entries for `hasOwnProperty` etc.

// Incoming request happens, assume `req.url` is available...

if (req.url in cache) {
    processDom(cache[req.url]);
} else {
    jsdom.env(req.url, function (err, window) {
        if (err) {
            // handle error
            return;
        }
        cache[req.url] = window;
        processDom(cache[req.url]);
    });
}

Ответ 2

Я не думаю, что это возможно. Когда вы создаете новый документ с помощью jsdom builder, любые настраиваемые параметры, которые вы указываете , будут влиять только на создаваемый документ. Любые дополнительные документы, созданные после этого момента, будут полагаться на функции по умолчанию.

Тем не менее, вы можете фактически изменить эти функции по умолчанию - это то, что вы после, я думаю. Перед созданием любых документов вы можете изменить эти значения по умолчанию для всех будущих документов:

require('jsdom').defaultDocumentFeatures = {
  FetchExternalResources   : ['script'], 
  ProcessExternalResources : false,
  MutationEvents           : false,
  QuerySelector            : false
}

Объяснение каждого варианта доступно, читая jsdom README.