自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

幾個(gè)秒殺 Go 官方庫(kù)的第三方開(kāi)源庫(kù)

存儲(chǔ) 存儲(chǔ)軟件
Go 語(yǔ)言官方庫(kù)給我們一貫的印象是:強(qiáng)大、好用。但是,金無(wú)足赤,人無(wú)完人,在一些性能要求苛刻的場(chǎng)景例如 json 解析,某些官方庫(kù)的表現(xiàn)不盡如人意。

[[427966]]

本文轉(zhuǎn)載自微信公眾號(hào)「Golang技術(shù)分享」,作者機(jī)器鈴砍菜刀。轉(zhuǎn)載本文請(qǐng)聯(lián)系Golang技術(shù)分享公眾號(hào)。

Go 語(yǔ)言官方庫(kù)給我們一貫的印象是:強(qiáng)大、好用。但是,金無(wú)足赤,人無(wú)完人,在一些性能要求苛刻的場(chǎng)景例如 json 解析,某些官方庫(kù)的表現(xiàn)不盡如人意。

本文介紹幾個(gè)對(duì)標(biāo)官方庫(kù)的開(kāi)源庫(kù),它們的性能遠(yuǎn)超前者。當(dāng)讀者在使用這些官方庫(kù)遇到性能問(wèn)題時(shí),可以嘗試替換優(yōu)化。

net/http -> fasthttp

地址:https://github.com/valyala/fasthttp

fasthttp號(hào)稱比net/http快十倍,其優(yōu)化的核心思路很簡(jiǎn)單:資源復(fù)用。

  • 復(fù)用 goroutine,減輕 runtime 調(diào)度壓力;
  • 對(duì)象復(fù)用,大量使用 sync.Pool 減輕 GC 壓力。

除了復(fù)用,還有其他的一些優(yōu)化手段,例如盡量避免 string 與 []byte 的轉(zhuǎn)換開(kāi)銷等。

這些優(yōu)化技巧和最佳實(shí)踐,在其 Github 主頁(yè)上已經(jīng)貼心給出:https://github.com/valyala/fasthttp#fasthttp-best-practices,建議閱讀學(xué)習(xí)。

因?yàn)閒asthttp的實(shí)現(xiàn)與標(biāo)準(zhǔn)庫(kù)差距較大,所以它與net/http的 API 接口是不同的,這導(dǎo)致從net/http重構(gòu)為fasthttp需要一些學(xué)習(xí)成本。

使用fasthttp的知名項(xiàng)目:Fiber、Gearbox、atreugo 等。

encoding/json -> jsoniter

地址:https://github.com/json-iterator/go

jsoniter(json-iterator)是一款快且靈活的 JSON 解析器,同時(shí)提供 Java 和 Go 兩個(gè)版本。官方稱 Golang 版本可以比標(biāo)準(zhǔn)庫(kù)(encoding/json)快 6 倍之多。

最重要的是,它與標(biāo)準(zhǔn)庫(kù)encoding/json完全兼容。

  • Marshal()
  1. # encoding/json  
  2. import "encoding/json" 
  3. json.Marshal(&data) 
  4.  
  5. # jsoniter 
  6. import jsoniter "github.com/json-iterator/go" 
  7.  
  8. var json = jsoniter.ConfigCompatibleWithStandardLibrary 
  9. json.Marshal(&data) 
  • Unmarshal()
  1. # encoding/json 
  2. import "encoding/json" 
  3. json.Unmarshal(input, &data) 
  4.  
  5. # jsoniter 
  6. import jsoniter "github.com/json-iterator/go" 
  7.  
  8. var json = jsoniter.ConfigCompatibleWithStandardLibrary 
  9. json.Unmarshal(input, &data) 

對(duì)其優(yōu)化原理感興趣的讀者可以看這里:http://jsoniter.com/benchmark.html#optimization-used

golang/protobuf -> gogo/protobuf

地址:https://github.com/gogo/protobuf

ProtoBuf 的全稱是 Protocol Buffers,它是由 Google 開(kāi)發(fā)和定義的與 XML、JSON 類似的一種協(xié)議格式,用于高效存儲(chǔ)與讀取結(jié)構(gòu)化數(shù)據(jù)。它基于二進(jìn)制,因此使用 ProtoBuf 能將數(shù)據(jù)壓縮得更小。

gogo/protobuf是基于官方庫(kù)golang/protobuf的增強(qiáng)版實(shí)現(xiàn):

  • 比golang/protobuf更快地序列化與反序列化;
  • 更規(guī)范的 Go 結(jié)構(gòu);
  • 兼容golang/protobuf;
  • 可選地生成額外的幫助代碼,減少代碼輸入;
  • 可以生成測(cè)試代碼和 benchmark 代碼;
  • 其他序列化格式;

有很多知名項(xiàng)目都在使用該庫(kù),例如 etcd、k8s、docker swarmkit、tidb、nakama 等。

html/template -> valyala/quicktemplate

地址:https://github.com/valyala/quicktemplate

quicktemplate啟發(fā)自 Python 的 Mako 項(xiàng)目,是一個(gè)快速、強(qiáng)大且易于使用的 Go 模板渲染引擎,它的主要特性如下:

  • quicktemplate會(huì)先將編寫的模板代碼轉(zhuǎn)換為 Go 語(yǔ)言代碼,再進(jìn)行編譯渲染。因此,它比標(biāo)準(zhǔn)庫(kù)html/template快 20 倍以上。
  • quicktemplate的語(yǔ)法與 Go 語(yǔ)法非常類似,幾乎沒(méi)有學(xué)習(xí)成本。
  • 幾乎所有的 bug 都能在模板編譯時(shí)被捕獲,因此在實(shí)際項(xiàng)目中,很少會(huì)有受模板相關(guān)的bug影響。
  • 模板中可以嵌入任意 Go 代碼。

雖然quicktemplate的主要目的是生成 HTML,但它也可用于生成其他數(shù)據(jù)。

例如,使用quicktemplate可以輕松實(shí)現(xiàn) JSON 和 XML 序列化,并且通過(guò)quicktemplate的序列化通常也會(huì)比通過(guò)標(biāo)準(zhǔn)庫(kù)encoding/json與encoding/xml更快。

總結(jié)

本文列出這幾個(gè)庫(kù)并不是讓你去立刻替換官方庫(kù)。例如net/http包,實(shí)際上它已經(jīng)可以滿足大多數(shù)使用場(chǎng)景。

在使用官方庫(kù)時(shí)遇到了問(wèn)題,我們很容易通過(guò)搜索引擎找到解決方案,或者直接向 Go 官方提 issue 。當(dāng)切換為開(kāi)源庫(kù)時(shí),如果遇到了問(wèn)題,并不一定能及時(shí)得到處理。

官方庫(kù)的 API 幾乎可以保證能與 Go 版本的迭代一直兼容,而三方庫(kù)可能存在潛在的版本兼容問(wèn)題,這也是切換時(shí)需要考慮的問(wèn)題。

本文列出來(lái)的幾個(gè)開(kāi)源庫(kù),它們的重點(diǎn)都是優(yōu)化對(duì)應(yīng)官方庫(kù)的性能問(wèn)題。我們可以從這些開(kāi)源庫(kù)中,學(xué)到很多實(shí)用的 Go 代碼優(yōu)化技巧。

當(dāng)然,如果你的項(xiàng)目中因?yàn)檫@些官方庫(kù)而導(dǎo)致了性能問(wèn)題,不妨一試。

 

責(zé)任編輯:武曉燕 來(lái)源: Golang技術(shù)分享
相關(guān)推薦

2019-07-30 11:35:54

AndroidRetrofit庫(kù)

2013-01-15 13:50:22

iOS開(kāi)發(fā)開(kāi)源庫(kù)

2021-01-27 10:04:46

鴻蒙HarmonyOS動(dòng)畫

2014-07-22 10:56:45

Android Stu第三方類庫(kù)

2011-07-25 14:14:49

iPhone SQLITE Pldatabase

2022-06-06 07:50:55

PythonJSON

2021-03-05 09:58:50

鴻蒙HarmonyOS開(kāi)源

2021-06-24 12:57:04

開(kāi)源安全軟件

2021-03-04 08:46:32

鴻蒙HarmonyOS應(yīng)用

2015-11-05 16:44:37

第三方登陸android源碼

2010-03-03 15:10:49

第三方Python庫(kù)

2013-08-14 09:50:32

iOS類庫(kù)

2022-05-21 23:56:16

Python庫(kù)搜索Python

2012-01-04 14:02:26

JsonCpp

2022-01-14 09:57:14

鴻蒙HarmonyOS應(yīng)用

2020-10-29 09:56:23

Linux靜態(tài)庫(kù)動(dòng)態(tài)庫(kù)

2022-09-05 09:01:47

第三方庫(kù)API

2017-03-14 13:03:18

Android架構(gòu)第三方庫(kù)

2023-03-01 07:21:33

2021-08-03 10:07:41

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)