首页 > 解决方案 > 为什么从我的 React 应用程序通过 Lambda 从 AWS DynamoDB 获得响应非常慢?

问题描述

我正在测试 Amazon AWS 和 DynamoDB 的可能性,但是,我找不到关于为什么我的 Lambda 函数延迟执行的解决方案。

我在 DynamoDB 中使用 React 和一个简单的表(小于 1kb)设置了一个非常简单的测试应用程序。作为反应,我有这个电话:

  async readTasks() {
    axios.get("https://13n6ump8q4.execute-api.us-east-1.amazonaws.com/default/serverlessToDoFunctionGET")
    .then(res => {
      let tasks = res.data.Items
      this.setState({
        tasklist:tasks,
      });
    });
  }

它通过 AWS API Gateway 连接到我的 Lambda serverlessToDoFunctionGET 函数:

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient({region: "us-east-1"});
exports.handler = function(event, context, callback) {
    let scanningParameters = {
        TableName: "todo-app",
        Limit:20
    };

    docClient.scan(scanningParameters, function(err, data) {
        if(err){
            callback(err, null);
        } else {
            callback(null, data);
        }
    });
}

当我从 AWS 控制台测试 Lambda 函数时,它的平均执行时间在 30-100 毫秒之间(忽略冷启动值),这很棒。

但是,当我从我的应用程序(本地和部署)运行它时,平均执行时间约为 250 毫秒!我得到的最低值仍然是惊人的 220 毫秒。

在此处输入图像描述

我在这里做错了什么?为了让我在我的应用程序中使用 DynamoDB,我需要低于 100 毫秒,否则就不值得了。

我尝试过的事情,但没有任何效果:

标签: reactjsamazon-web-servicesaxiosamazon-dynamodbserverless-framework

解决方案


你在这里实际测试什么?您的客户端和服务器之间的网络延迟是多少?如果您想计算 Lambda 的执行时间以及到 DynamoDB 的任何往返,则需要在函数内部进行。


推荐阅读