reactjs - 为什么从我的 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 毫秒,否则就不值得了。
我尝试过的事情,但没有任何效果:
- 将 Lambda 函数内存大小从 128MB 增加到 3008MB
- 仔细检查区域是否到处都相同
- 我没有在 React 中使用 axios,而是在 componentDidMount() 中使用了 fetch
解决方案
你在这里实际测试什么?您的客户端和服务器之间的网络延迟是多少?如果您想计算 Lambda 的执行时间以及到 DynamoDB 的任何往返,则需要在函数内部进行。
推荐阅读
- php - Laravel 7 Multi auth // 如何创建不同的注册页面和表格?
- c# - 如何从存储在数据库中的文件路径下载pdf文件
- c++ - 具有“模板化”返回类型和参数的函数指针
- r - 在 R 中使用傅立叶变换进行插值
- python - Django 项目 celery 和 django-filter 导致错误
- ascii - Arial 字体斑马打印机不打印零字符
- javascript - Python 应用程序只发出一次 - 实时聊天应用程序
- c++ - 关于 Stroustrup C++ 书籍的 auto 和 {}-lists 问题
- c++ - 迭代二维向量时发生运行时错误
- html - 两个 div 并排,一个响应式