我正在尝试编写一个对性能敏感的Go http处理程序(特别是我希望最小化使用的RAM量)。处理程序为每个请求设置一堆标头。所有标题始终相同且具有相同的值。
有没有办法为所有标题使用单个const
并在一次调用中设置它们?
实施例。而不是为所有请求执行此操作:
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
......做这样的事情:
const staticHeaders = `
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive`
w.Headers.WriteRaw(staticHeaders)
这可能吗?
答案 0 :(得分:6)
你可以劫持连接,并直接写入标题,但这只会节省你一半的标题分配,因为传入的请求仍然会分配一个地图和字符串填写Request结构。这也意味着从那时起你需要自己处理原始TCP连接。
您应该彻底剖析以确保标头分配实际上是您的应用程序的瓶颈。 http请求的开销远远超过标头。
您还可以尝试其他http堆栈,例如github.com/valyala/fasthttp
,以尽量减少分配。