Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 谷歌云上的地面军事系统的运行速度比本地主机慢_Node.js_Google Cloud Functions_Google Cloud Storage - Fatal编程技术网

Node.js 谷歌云上的地面军事系统的运行速度比本地主机慢

Node.js 谷歌云上的地面军事系统的运行速度比本地主机慢,node.js,google-cloud-functions,google-cloud-storage,Node.js,Google Cloud Functions,Google Cloud Storage,我在谷歌云存储中有一个文件。我需要从Google云函数访问它,该函数使用它来响应http请求 这段代码在我的电脑上以“函数框架”的形式运行,并在大约半秒钟内检索到文件 当我将代码放在与存储相同的区域的谷歌云功能上时,我希望它运行得更快(至少节省了从米兰我家到比利时谷歌位置的网络行程)。令我惊讶的是,在GCF上运行相同的代码平均需要5秒(有时更长) 我尝试了我能想象到的一切,但没有任何明显的效果。 有些事情我已经试过了: 更改节点运行时的版本 导入fast-crc32c依赖项 请求Readabl

我在谷歌云存储中有一个文件。我需要从Google云函数访问它,该函数使用它来响应http请求

这段代码在我的电脑上以“函数框架”的形式运行,并在大约半秒钟内检索到文件

当我将代码放在与存储相同的区域的谷歌云功能上时,我希望它运行得更快(至少节省了从米兰我家到比利时谷歌位置的网络行程)。令我惊讶的是,在GCF上运行相同的代码平均需要5秒(有时更长)

我尝试了我能想象到的一切,但没有任何明显的效果。 有些事情我已经试过了:

  • 更改节点运行时的版本
  • 导入fast-crc32c依赖项
  • 请求ReadableStream并将其直接传送到res对象
现在我的想法快用完了

相关代码如下(为了测试和清晰起见,对代码进行了简化):

非常感谢任何帮助或想法

谢谢

菲利波


PS我添加了我用来测量计时的代码的插入指令版本:

const { Storage } = require("@google-cloud/storage");

exports.helloWorld = (req, res) => {
  var hrstart = process.hrtime();
  var timedEvents = [];
  function addTimedEvent(msg) {
    const event = { msg: msg, hrend: process.hrtime(hrstart) };
    timedEvents = [...timedEvents, event];
  }
  function printTimeEvents() {
    for (var e of timedEvents) {
      console.info(
        "Execution time (hr): %ds %dms Message:%s",
        e.hrend[0],
        e.hrend[1] / 1000000,
        e.msg
      );
    }
  }
  addTimedEvent("gcs 1");
  const storage = new Storage({ projectId: "my project ID" });
  const bucketName = "my-bucket-name";
  const srcFilename = "my-file-name.json";

  addTimedEvent("gcs 2");
  let file = storage.bucket(bucketName).file(srcFilename);
  addTimedEvent("gcs 3");
  file
    .download()
    .then(function(data) {
      addTimedEvent("gcs 4");
      const d = data;
      addTimedEvent("gcs 5");
    })
    .then(() => {
      printTimeEvents();
      res.status(200).send("Ciao world!");
    });
};
我的电脑上的典型执行:

Execution time (hr): 0s 0.0059ms Message:gcs 1
Execution time (hr): 0s 0.1911ms Message:gcs 2
Execution time (hr): 0s 0.7464ms Message:gcs 3
Execution time (hr): 0s 338.6312ms Message:gcs 4
Execution time (hr): 0s 338.6361ms Message:gcs 5
GCF上的典型执行:

设置函数外部调用之间可以共享的内容,例如(如果bucket没有更改):


每次调用都很慢还是第一次调用都很慢?如果需要创建一个新实例来服务一个请求(通常是在部署之后),云函数将受到惩罚。@robsiemb:on每次调用。当然,我测量了
file.download()
的计时,以消除冷启动的任何影响,但没有。。。不幸的是,这不是一个冷启动问题。请编辑问题,准确显示您用于基准时间的内容。如果您不是在代码本身中执行此操作,您可能测量的不仅仅是传输本身。@DougStevenson我添加了插入指令的代码,我希望它有助于您的度量与stackdriver监控上的度量匹配吗?非常感谢Jak的建议。我照你的建议做了,尽可能多地放在静态监狱里。这有点帮助,特别是当我将最大实例设置为1以减少冷启动时。现在我在冷启动时得到5秒,在下面的调用中得到2秒、2.5秒、3秒。不幸的是,这仍然比我在电脑上得到的0.4s、0.6s、0.8s长得多。我不知道还有什么我可以尝试的,非常感谢。菲利波
Execution time (hr): 0s 0.0059ms Message:gcs 1
Execution time (hr): 0s 0.1911ms Message:gcs 2
Execution time (hr): 0s 0.7464ms Message:gcs 3
Execution time (hr): 0s 338.6312ms Message:gcs 4
Execution time (hr): 0s 338.6361ms Message:gcs 5
const { Storage } = require("@google-cloud/storage");
const storage = new Storage({ projectId: "my project ID" });
const bucketName = "my-bucket-name";
const bucket = storage.bucket(bucketName);

exports.helloWorld = (req, res) => {
  const srcFilename = "my-file-name.json";

  let file = bucket.file(srcFilename);
  file
    .download()
    .then(function(data) {
      const d = data;
    })
    .then(() => {
      res.status(200).send("Ciao!");
    });
};