gpt4 book ai didi

node.js - Google Cloud Platform - 使用 puppeteer (Node.js) 优化 Cloud Function

转载 作者:太空宇宙 更新时间:2023-11-04 01:23:38 25 4
gpt4 key购买 nike

我在 node.js 中编写了一个函数,当我在本地运行它时效果很好(运行大约 10 秒)。

由于我想每小时运行一次,因此我将其部署在 Google Cloud Platform 上。 但是,我总是遇到超时错误

因此,您对以下方面有何建议:

  • 我应该对我的函数进行哪些更改以使其更加高效?
  • 自动化我的功能的替代方法,使其每小时运行一次?

仅供引用,我的云函数具有以下特点:

  • Node js 8
  • 内存:2Go
  • 超时:540 秒

以及以下形式:

exports.launchSearch = (req, res) => {

const puppeteer = require('puppeteer');
const url = require('./pageInformation').url;
const pageLocation = require('./pageInformation').location;
const userInformation = require('./userInformation').information;

(async () => {
const browser = await puppeteer.launch({args: ['--no-sandbox']});
const page = await browser.newPage();
await page.goto(url);

// Part 1
await page.click(pageLocation['...']);
await page.type(pageLocation['...'], userInformation['...']);
await page.waitFor(pageLocation['...']);
await page.click(pageLocation['...']);
... ~20 other "page.click" or "page.select"

// Part 2
var continueLoop = true;

while (continueLoop) {

var list = await page.$x(pageLocation['...']);

if (list.length > 0) {
await list[0].click();
var found = true;
var continueLoop = false;
} else {
var afficher = await page.$x(pageLocation['...']);
if (afficher.length > 0) {
await afficher[0].click();
} else {
var continueLoop = false;
var found = false;
};
};
};

// Part 3
if (found) {
await page.waitForXPath(pageLocation['...']);
const xxx = await page.$x(pageLocation['...']);
await xxx[0].click();
... 5 other blocks with exact same 3 lines, but with other elements to click
};

await browser.close();
})();

};

我尝试过部分地运行它;有时在第 1 部分结束时超时,有时在第 2 部分结束时超时。但整个脚本从未完全完成。

最佳答案

如果没有太多关于代码功能的上下文,很难指出根本原因,但我告诉您的是继续将代码调试为 Horatio建议,或者您可以使用更复杂的工具,例如 StackDriver监控您的 Cloud Functions 的性能。评估其 pricing如果您有兴趣。

如果 Stackdriver 过于杀伤力,只需使用内联函数包装来找出消耗所有时间的例程的确切位置。这是一个例子:

var start = process.hrtime();
yourfunction();
var elapsed = process.hrtime(start)[1] / 1000000;

console.log("Elapsed:" + elapsed.toFixed(3));

一旦您获得了影响执行的确切代码段,那么您可能必须对其进行优化。此外,据我所知,它在本地运行得很好,考虑到有时在云环境中运行的进程会受到延迟的影响,因为它们消耗的其他资源“接近”。

关于你的第二个问题,关于每小时执行一次函数的自动化。您可以利用Cloud Scheduler 。它能够对 HTTP/HTTPS 端点进行计划调用,Cloud Functions 将其归类为其中之一。请务必检查其 pricing还有。

关于node.js - Google Cloud Platform - 使用 puppeteer (Node.js) 优化 Cloud Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58288147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com