Кеширование окна 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.