亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Golang標(biāo)準(zhǔn)庫(kù)和外部庫(kù)的性能比較

 更新時(shí)間:2021年10月18日 15:59:27   投稿:hqx  
這篇文章主要介紹Golang標(biāo)準(zhǔn)庫(kù)和外部庫(kù)的性能比較,下面文章講圍繞這兩點(diǎn)展開(kāi)內(nèi)容,感興趣的小伙伴可以參考一下

前言:

我已經(jīng)在生產(chǎn)中使用 Go 一段時(shí)間了,因?yàn)樗臉?gòu)建規(guī)模較小,并且由 goroutines 提供的并發(fā)性能以及直接在機(jī)器上運(yùn)行構(gòu)建的能力,所以我非常喜歡它的快速和可靠。

由于標(biāo)準(zhǔn)包的速度非常快,您可以在不使用任何第三方庫(kù)或框架的情況下構(gòu)建生產(chǎn)就緒的微服務(wù)。這并不是說(shuō) Go 中沒(méi)有提供更多靈活性或速度的框架,只是它們不那么受歡迎。

官方通常告訴你堅(jiān)持使用標(biāo)準(zhǔn)庫(kù)。具有諷刺意味的是, golang 框架 的頂級(jí) Google 搜索結(jié)果一般都是關(guān)于為什么不應(yīng)該使用標(biāo)準(zhǔn)庫(kù)。

我對(duì)標(biāo)準(zhǔn)庫(kù)的替代品進(jìn)行了一些研究和基準(zhǔn)測(cè)試,以了解它們的表現(xiàn)。我將它們分為我認(rèn)為是關(guān)鍵的微服務(wù)組件。

所有基準(zhǔn)測(cè)試都在下面列出的配置上運(yùn)行。雖然正常的基準(zhǔn)測(cè)試時(shí)間只有 1 秒,但我將所有測(cè)試運(yùn)行了 10 秒,以確保每個(gè)測(cè)試周期都是一致的。

  • 處理器 — 2.7 GHz Intel Core i7
  • RAM — 16GB — 16 GB 2133 MHz LPDDR3
  • Bench Time 10s 而不是標(biāo)準(zhǔn)的 1s
  • go test -bench=. -benchtime=10s

1、路由

標(biāo)準(zhǔn)的 http Go 服務(wù)器帶有一個(gè)不錯(cuò)的路由器,可以讀取查詢參數(shù)但不能讀取命名參數(shù),例如,

/students/:studentID/grades/:gradeID


任何具有上述嵌套資源的 REST 服務(wù)都必須使用外部路由庫(kù)來(lái)解析它們。Gin、EchoBeego、Gorilla Mux Goji 只是其中幾個(gè)知名框架(根據(jù) Github 關(guān)注量)。

其中一些是具有路由功能的成熟中間件框架,而另一些則僅僅只是路由庫(kù)。

這些庫(kù)針對(duì)單個(gè)命名參數(shù)進(jìn)行了測(cè)試,結(jié)果如下所示,Gin 擁有最快的路由器,Echo 排在第二位。

2、JSON 序列化和反序列化

一旦 API 請(qǐng)求通過(guò)路由器并傳遞到控制器或處理程序,下一步就是在返回響應(yīng)時(shí)對(duì)請(qǐng)求 JSON Encode 進(jìn)行解碼。

Go 有一個(gè)非常好的encoding包,它支持多種格式,比如json, XML, csv,但是快速瀏覽一下替代品會(huì)向你展示大量的庫(kù)。我針對(duì)標(biāo)準(zhǔn)encoding/json包對(duì) Jsoniter、EasyJson 進(jìn)行了基準(zhǔn)測(cè)試,結(jié)果如下。

下面是編碼的結(jié)果,結(jié)果表明性能差異并不顯著

但是對(duì)于解碼 JSON,jsoniter執(zhí)行速度比標(biāo)準(zhǔn)編碼包快 5 倍。

現(xiàn)在,如果您的請(qǐng)求已被解碼,下一步可能是應(yīng)用您的業(yè)務(wù)邏輯,并可能執(zhí)行一些數(shù)據(jù)庫(kù)操作。

3、是否使用ORM框架

大多數(shù)流行的語(yǔ)言都依賴(lài)于框架來(lái)構(gòu)建與數(shù)據(jù)庫(kù)交互的微服務(wù)。在 Java 世界中,HibernateActive Record for Rails Django ORM 非常流行。ORM(對(duì)象關(guān)系映射器)有時(shí)有助于更好地處理事務(wù)、表之間的關(guān)系,并有助于避免為簡(jiǎn)單連接編寫(xiě)復(fù)雜的 SQL。

但是 Go 再次擁有一個(gè)非常好的database標(biāo)準(zhǔn)庫(kù),它使連接到關(guān)系數(shù)據(jù)庫(kù)變得非常容易,而且速度也非??臁5?,一個(gè)痛點(diǎn)是查詢。當(dāng)您查詢某些行時(shí),您必須手動(dòng)映射行中的每個(gè)字段,然后將它們分配給struct. 這有效,但很快就會(huì)變得混亂并讓您編寫(xiě)大量代碼。sqlx是一個(gè)庫(kù),它允許您將整行掃描到您的結(jié)構(gòu)變量中。

雖然sqlx減少了為構(gòu)建 CRUD 而編寫(xiě)的典型行數(shù),但最終仍會(huì)多次編寫(xiě)重復(fù)代碼。使用 ORM 可以幫助減少它并專(zhuān)注于您的業(yè)務(wù)邏輯。

database, database + sqlx, gorm , go-pg 對(duì)查詢進(jìn)行了基準(zhǔn)測(cè)試,下面是結(jié)果。令人驚訝的是,go-pgORM 的執(zhí)行速度比標(biāo)準(zhǔn)包甚至sqlx還要快. GORM雖然在生態(tài)系統(tǒng)中非常有名,但速度相對(duì)較慢。

API 調(diào)用的每個(gè)步驟中,都有更好的框架或外部庫(kù),它們將使您的響應(yīng)更快并提供一定的靈活性。

4、總結(jié)

雖然一些外部庫(kù)的性能改進(jìn)非常明顯,但這不應(yīng)該成為遠(yuǎn)離標(biāo)準(zhǔn)庫(kù)的原因。諸如測(cè)試代碼的難易程度、開(kāi)源庫(kù)的長(zhǎng)期維護(hù)、團(tuán)隊(duì)的學(xué)習(xí)曲線等都應(yīng)該考慮在內(nèi)。盡管如此,我認(rèn)為像 echo + jsoniter + go-pgGo 等標(biāo)準(zhǔn)庫(kù)功能的所有令人敬畏的東西將是構(gòu)建微服務(wù)并避免冗余代碼的最快方法。

到此這篇關(guān)于Golang標(biāo)準(zhǔn)庫(kù)和外部庫(kù)的性能比較的文章就介紹到這了,更多相關(guān)Golang標(biāo)準(zhǔn)庫(kù)和外部庫(kù)的性能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang字符串常用函數(shù)的使用

    Golang字符串常用函數(shù)的使用

    Golang提供了許多內(nèi)置的字符串函數(shù),這些函數(shù)可在處理字符串?dāng)?shù)據(jù)時(shí)幫助執(zhí)行一些操作,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • golang 如何替換掉字符串里面的換行符\n

    golang 如何替換掉字符串里面的換行符\n

    這篇文章主要介紹了golang 替換掉字符串里面的換行符\n操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • go語(yǔ)言實(shí)現(xiàn)通過(guò)FTP庫(kù)自動(dòng)上傳web日志

    go語(yǔ)言實(shí)現(xiàn)通過(guò)FTP庫(kù)自動(dòng)上傳web日志

    這篇文章主要介紹了go語(yǔ)言實(shí)現(xiàn)通過(guò)FTP庫(kù)自動(dòng)上傳web日志,非常簡(jiǎn)單實(shí)用,需要的小伙伴快來(lái)參考下吧。
    2015-03-03
  • golang?http請(qǐng)求未釋放造成的錯(cuò)誤問(wèn)題

    golang?http請(qǐng)求未釋放造成的錯(cuò)誤問(wèn)題

    這篇文章主要介紹了golang?http請(qǐng)求未釋放造成的錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • golang之資源釋放/異常錯(cuò)誤處理解析

    golang之資源釋放/異常錯(cuò)誤處理解析

    這篇文章主要為大家介紹了golang之資源釋放/異常錯(cuò)誤處理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 基于Golang編寫(xiě)貪吃蛇游戲

    基于Golang編寫(xiě)貪吃蛇游戲

    這篇文章主要為大家學(xué)習(xí)介紹了Golang如何基于終端庫(kù)termbox-go做個(gè)功能較簡(jiǎn)單的貪吃蛇游戲,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值
    2023-07-07
  • golang中的并發(fā)和并行

    golang中的并發(fā)和并行

    這篇文章主要介紹了golang中的并發(fā)和并行用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • 詳解golang中模板的常用語(yǔ)法

    詳解golang中模板的常用語(yǔ)法

    這篇文章主要介紹了golang模板中的常用語(yǔ)法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • 詳解Go?中的時(shí)間處理

    詳解Go?中的時(shí)間處理

    這篇文章主要介紹了Go?中的時(shí)間處理,本文將介紹?time?庫(kù)中一些重要的函數(shù)和方法,希望能幫助到那些一遇到?Go?時(shí)間處理問(wèn)題就需要百度的童鞋,需要的朋友可以參考下
    2022-07-07
  • golang如何用type-switch判斷interface變量的實(shí)際存儲(chǔ)類(lèi)型

    golang如何用type-switch判斷interface變量的實(shí)際存儲(chǔ)類(lèi)型

    這篇文章主要介紹了golang如何用type-switch判斷interface變量的實(shí)際存儲(chǔ)類(lèi)型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評(píng)論