繁体   English   中英

html解析为DOM性能

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM