tengo轻舞-对比在golang中嵌入使用js和tengo

main.go:

package main

import (
    "context"
    "fmt"
    "github.com/d5/tengo/v2"
    "github.com/robertkrimen/otto"
    "time"
)

func Tengo_Sum(a int, b int) (int, error) {
    // create a new Script instance
    script := tengo.NewScript([]byte(`sum := a + b`))
    // set values
    _ = script.Add("a", a)
    _ = script.Add("b", b)
    // run the script
    compiled, err := script.RunContext(context.Background())
    if err != nil {
      return 0, err
    }
    // retrieve values
    sum := compiled.Get("sum")
    return sum.Int(), nil
}

func Js_Sum(a int, b int) (int, error) {
    vm := otto.New()

    _ = vm.Set("a", a)
    _ = vm.Set("b", b)

    // 执行 JavaScript 代码
    _, err := vm.Run(`
  sum = a + b;
  `)
    if err != nil {
      return 0, err
    }
    sumVal, err := vm.Get("sum")
    if err != nil {
      return 0, err
    }
    sum, err := sumVal.ToInteger()
    if err != nil {
      return 0, err
    }
    return int(sum), nil
}

func main() {
    startT := time.Now()
    sum, err := Tengo_Sum(1, 9)
    if err != nil {
      panic(err)
    }
    fmt.Printf("Tengo_Sum: sum:1+9=%d, 程序执行时间: %v
", sum, time.Since(startT))

    startT = time.Now()
    sum, err = Js_Sum(1, 9)
    if err != nil {
      panic(err)
    }
    fmt.Printf("Js_Sum: sum:1+9=%d, 程序执行时间: %v
", sum, time.Since(startT))

    println("done.")
}

运行:

PS > go run main.go
Tengo_Sum: sum:1+9=10, 程序执行时间: 531.9µs
Js_Sum: sum:1+9=10, 程序执行时间: 1.099ms
done.

说明:

这个例子对比了在golang中嵌入tengo脚本,和嵌入javascript脚本的执行时间对比,使用的第三方库可能会有必定的影响,但基本的数量级应该是差不多的。

初步的结论是:tengo的执行效率的确 是挺高的,但javascript/python等生态会更好一些。具体的需要根据项目的实际需求来定。

tengo的生态还需要有待完善,但tengo自身已经能够实现许多的功能了,如果能够满足项目的实际需要,我的理解还是可以思考一下tengo的。

最后,放一个tengo官方网址上的benchmark结果,作为展示:

tengo轻舞-对比在golang中嵌入使用js和tengo

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 共2条

请登录后发表评论