[英]html parse into DOM preformance
从网络上获取后,此Meteor服务器代码需要解析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;
}
}
}());
您可以使用此Webworker对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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.