此Meteor服务器代码需要在从Web获取后解析html字符串。由于许多用户可能同时使用该应用程序,因此需要一种好的方法来最小化开销和响应时间。
修改
在Pitaj的回答后编辑
代码需要将html解析为dom,以便它可以提取元素并使用它做其他事情,从而实现同步。
最好的方法是什么?感谢
这是我做的事情
myResponse = (function () {
const parser = new DOMParser();
const doc = (html) => {
return parser.parseFromString(html, 'text/xml');
};
return {
message: (html) => {
return doc(html).select('span[blah..]').get(0).innerText;
}
}
}());
答案 0 :(得分:0)
您可以使用类似的this webworker implementation for Node将其拉出到另一个线程中。
它将允许事件循环继续,因为DOM解析将在另一个进程中完成。
这就是我使用内置child_process.fork()
:
// main file
myResponse = {
message: (html, callback) => { // whatever callback, this is async now
const fork = require('child_process').fork;
const parse = fork('./parse');
parse.on('message', (message, data) => {
if (message === 'ready') {
parse.send('html', html);
} else if (message === 'data' && data) {
callback(null, data);
}
});
},
};
// `parse.js`
process.on('message', (message, data) => {
if (message !== 'html' || !data) {
return process.send('Error', new Error('Failed'));
}
const parser = new DOMParser();
const doc = (html) => {
return parser.parseFromString(html, 'text/xml');
};
process.send('data', doc(html).select('span[blah..]').get(0).innerText);
});
process.send('ready', true);