进行报废。我如何能停留在页面上并阅读内容以每隔xx秒搜索一次数据而不刷新页面?我使用这种方式,但一段时间后PC崩溃了。关于如何提高效率的任何想法?我想不使用while(true)来实现它。 readOdds函数并不总是延迟相同的时间。
//...
while(true){
const html = await page.content();
cant = await readOdds(html); // some code with the html
console.info('Waiting 5 seconds to read again...');
await page.waitFor(5000);
}
这是一个部分
async function readOdds(htmlPage){
try {
var savedat = functions.mysqlDateTime(new Date());
var pageHtml=htmlPage.replace(/(\r\n|\n|\r)/gm,"");
var exp_text_all = /<coupon-section(.*?)<\/coupon-section>/g;
var leagueLinksMatches = pageHtml.match(exp_text_all);
var cmarkets = 0;
let reset = await mysqlfunctions.promise_updateMarketsCount(cmarkets, table_markets_count, site);
console.log(reset);
if(leagueLinksMatches == null){
return cmarkets;
}
for (let i = 0; i < leagueLinksMatches.length; i++) {
const html = leagueLinksMatches[i];
var expc = /class="title ellipsis-text">(.*?)<\/span/g;
var nameChampionship = functions.getDataInHtmlCode(String(html).match(expc)[0]);
var idChampionship = await mysqlfunctions.promise_db_insert_Championship(nameChampionship, gsport, table_championship);
var exp_text = /<ui-event-line(.*?)<\/ui-event-line>/g;
var text = html.match(exp_text);
// console.info(text.length);
for (let index = 0; index < text.length; index++) {
const element = text[index];
....
答案 0 :(得分:2)
但是,在进行此操作之前,您可以尝试运行该函数本身,而不是while
,因为它将在没有任何适当控制的情况下永远循环。
const readLoop = async() => {
const html = await page.content();
cant = await readOdds(html);
return readLoop() // run the loop again
}
// invoke it for infinite callbacks without any delays at all
await readLoop();
只要readOdds函数返回,哪个函数将连续运行同一块函数,没有任何延迟。您将不必使用page.waitFor
和while
。
对于在一段时间内重新生成的高级情况,诸如bull之类的Queue和诸如PM2之类的流程管理器就可以发挥作用。但是,队列将使您的问题的without refresh the page?
部分无效。
您绝对应该使用pm2。
用法如下,
npm i -g pm2
pm2 start index.js --name=myawesomeapp // or your app file
有用的参数很少,
--max-memory-restart 100M
,它可以将内存使用量限制为100M并重新启动。--max-restarts 50
,由于错误(或内存泄漏)而重新启动50次后,它将停止工作。设置上面的名称后,您可以使用pm2 logs myawesomeapp
查看日志。