jsdom窗口缓存

时间:2011-10-19 23:13:12

标签: dom express jsdom

在express.js中使用jsdom.jsdom()我创建了一个带有“base”布局标记的文档,并将一些客户端库(如jQuery)附加到其窗口。

只需要进行一次这样的设置就好了。

问题是窗口文档的DOM将根据请求的URL而改变。有没有办法让每个请求从相同的缓存窗口对象开始并增强它,还是必须在每次请求时从头开始设置?

2 个答案:

答案 0 :(得分: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]);
    });
}

答案 1 :(得分:0)

我不认为这是可能的。使用jsdom构建器创建新文档时,您指定的任何自定义选项只会影响当前正在创建的文档。此点之后创建的任何其他文档都将依赖于默认功能。

但是,你可以实际修改这些默认功能 - 我认为这就是你所追求的。在创建任何文档之前,您可以修改以后所有文档的这些默认值:

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

通过阅读jsdom的README可以获得对每个选项的解释。