使用专用托管计划的Azure Functions首次调用响应慢如何优化?
可行优化方案
- 开启Always On配置
即使使用专用托管计划,若未开启Always On开关,函数运行时进程仍会在空闲一段时间后被系统回收,首次调用需要重新启动进程、加载运行环境和绑定依赖。你可以在Azure门户进入对应函数应用的「配置」-「常规设置」页面,将Always On选项设置为开启。 - 复用Cosmos DB客户端单例
默认的Cosmos DB输入绑定会在进程启动后首次调用函数时才初始化客户端连接,这是首次调用耗时高的核心原因之一。你可以弃用输入绑定,改为在函数外部全局初始化Cosmos DB客户端,整个进程生命周期内只初始化一次:
const { CosmosClient } = require("@azure/cosmos"); const client = new CosmosClient(process.env.CosmosDbConnectionString); const container = client.database("main").container("rooms"); module.exports = async function(context){ const { resource: room } = await container.item(context.bindingData.roomId, context.bindingData.roomId).read(); context.res = {body: room.comments} }
- 配置预热触发器
专用托管计划支持配置预热触发器,在函数实例启动、扩容场景下,系统会自动触发预热逻辑,你可以把函数初始化、Cosmos DB连接初始化的逻辑放在预热触发器中,提前完成所有准备工作,用户的实际访问不会碰到首次初始化耗时。 - 配置接口缓存
如果评论数据对实时性要求不高,可以在函数层面对响应结果做内存缓存,或者配置CDN缓存接口响应,命中缓存时响应耗时可降低到100ms以内。 - 精简项目依赖
检查项目package.json中的依赖项,移除所有未使用的依赖,也可以将项目代码打包为单文件,减少运行时加载依赖的耗时。
内容的提问来源于stack exchange,提问作者user776490
相关产品推荐
相关产品推荐

