zvvq技术分享网

golang框架中依赖注入的性能影响(golang实现依赖

作者:zvvq博客网
导读在 go 框架中,di 会带来性能开销:反射、对象实例化和依赖查找。使用 gin 框架的基准测试表明 di 处理时间比不使用 di 多 0.1 秒,证明 di 的性能影响较小。 Go 框架中依赖注入的性能影

在 go 框架中,di 会引发特性花销:反射、对象实例化和依赖搜索。应用 gin 框架的基准测试说明di 解决时间比不使用di 多 0.1 秒,证实di 性能影响较小。

本文来自zvvq

zvvq好,好zvvq

Go 框架中依赖注入性能危害

zvvq.cn

依赖注入 (DI) 是 Go 框架中常用的一种设计模式。它允许我们在运行时动态地向目标提供其依存关系。可是,DI 也可能对应用程序的特性造成影响。 copyright zvvq

特性花销 copyright zvvq

DI 架构必须创建一个对象图,其中包括全部依存关系。这可能会引进一些特性花销,特别是在应用软件具备很多依存关系时。以下是DI产生的常见特性花销: zvvq好,好zvvq

反射应用:DI 架构频繁使用反射来动态创建目标。反射应用反射能够比直接创建对象慢。 对象实例化:DI 架构必须实例化对象并把它注入到依靠的对象中。这需要额外的内存与运算花销。 依靠搜索:DI 器皿必须搜索并查找依存关系。这会涉及遍历对象图,这可能是一个昂贵操作。实战案例 :Gin 架构 zvvq好,好zvvq

为了了解DI 性能危害,我们会在应用DI 和不使用DI 的场景中检测Gin 架构。Gin 是一个流行的 Go 架构,具备内置的DI 作用。 zvvq

//应用 DI

内容来自samhan666

package main 内容来自zvvq,别采集哟

import (

内容来自zvvq,别采集哟

"github.com/gin-gonic/gin"

zvvq好,好zvvq

) 内容来自zvvq,别采集哟

type UserService interface { copyright zvvq

GetUser(id int) (user User, err error)

copyright zvvq

} zvvq.cn

type UserController struct {

内容来自samhan

userService UserService zvvq好,好zvvq

}

内容来自samhan

func main() { 本文来自zvvq

r := gin.New()

内容来自zvvq

r.GET("/user/:id", func(c gin.Context) {

内容来自samhan

userService := c.MustGet("userService").(UserService) 内容来自zvvq

id := c.Param("id") 内容来自samhan

user, err := userService.GetUser(id) 内容来自zvvq,别采集哟

if err != nil {

内容来自zvvq,别采集哟

c.AbortWithError(500, err)

copyright zvvq

}

内容来自samhan

c.JSON(200, user) 本文来自zvvq

}) 内容来自samhan666

r.Run() 内容来自zvvq

} 内容来自samhan666

// 不使用 DI 内容来自zvvq,别采集哟

package main

zvvq.cn

import ( copyright zvvq

"github.com/gin-gonic/gin" 内容来自zvvq,别采集哟

) 本文来自zvvq

type UserService interface {

内容来自samhan

GetUser(id int) (user User, err error)

zvvq.cn

} 本文来自zvvq

type UserController struct {

本文来自zvvq

userService UserService

内容来自zvvq,别采集哟

} 内容来自zvvq,别采集哟

func main() {

copyright zvvq

userService := NewUserService() 内容来自zvvq

userController := &UserController{userService: userService}

zvvq好,好zvvq

r := gin.New()

内容来自zvvq

r.GET("/user/:id", userController.GetUser)

内容来自samhan

r.Run() 内容来自zvvq

}

内容来自zvvq,别采集哟

检测结果

zvvq.cn

大家在具备 1,000,000 个路由请求的基准测试上对二种情景进行了测试。下列结果显示DI 具备轻微特性花销: 本文来自zvvq

情景处理时间应用DI 1.2秒不使用DI 1.1秒结果 zvvq好,好zvvq

DI 可以在 Go 框架中给予很多益处,但它也可能对性能造成轻微危害。使用DI 时,衡量其益处与花销至关重要。在很多情况下,DI 带来的收益会大于其性能花销。可是,针对对性能尤为重要的应用程序,手动管理依存关系可能是更好的方法。

内容来自samhan

以上就是golang框架中依赖注入性能危害的详细内容,大量请关注其他类似文章!

zvvq.cn