我的HTTP响应速度很慢

二手的Go和Fasthttp

package main

import (
    "fmt"
    "github.com/valyala/fasthttp"
)

func fastHTTPHandler(ctx *fasthttp.RequestCtx) {
    var s string = ""
    for i := 1; i <= 100000; i++ {
        s += "hello "
    }
    ctx.SetBodyString(s)
}

func main() {
    fmt.Print("Started")
    fasthttp.ListenAndServe(":8081", fastHTTPHandler)
}

并在“失眠症”(邮递员)中进行测试。执行时间3-4秒。 PHP上的类似代码在900毫秒内执行。

PHP img

Golang img

最佳答案

在几乎所有语言中都使用+=来连接大字符串通常会产生糟糕的性能,因此我不会将它用作衡量任何相关性能的指标。这就是为什么大多数语言的标准库中都包含一些用于构建大型字符串的原因。在Java中,您可以使用java.lang.StringBuilder。在Go语言中,他们不久前添加了strings.Builder。我还没有运行它,但是我很有信心这将产生更好的性能:

s := strings.Builder{}
for i := 1; i <= 100000; i++ {
    s.WriteString("hello ")
}
ctx.SetBodyString(s.String())

10-08 06:43