2016-04-23 12 views
0

このMeteorサーバーコードは、Webから取得した後にHTML文字列を解析する必要があります。多くのユーザーが一度にアプリを使用している可能性があるため、オーバーヘッドと応答時間を最小限に抑えるための良いアプローチが必要です。html DOMの実行形式を解析する

編集コードは、それはこのように、同期、要素を抽出し、それを他のことを行うことができるようにDOMにHTMLを解析する必要がPitaj によって解答後に編集

これを行うにはどのような方法が最適ですか?おかげ

はここにあなたが似た何かにthis webworker implementation for Nodeを使用して、別のスレッドにそれを引き出すことができ、私は

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

何をしたかです。

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); 
+0

あなたのソリューションは、すなわちそれは、コールバックのようなコードを破る、私の編集を参照してください? –

+0

はい、これは非同期になります。アイデアは、フォークされたプロセスですべてのDOM解析とデータ取得を行い、必要なデータのみをメインプロセスに戻すことです。 – PitaJ

+0

DOMParserがサーバ上で未定義であることに気がつきました。サーバー上でhtmlをDOMに解析する流儀はどうですか? Thx –

関連する問題