[英]Haskell simpleHTTP of Network.HTTP.Conduit performing slowly for get requests
在我的haskell代碼中,我將Network.HTTP.Conduit
導入為
import Network.HTTP.Conduit
在我的主要功能中,我使用simpleHTTP
發出了一個簡單的GET
請求
main = do
response <- simpleHttp "https://github.com/trending?l=ruby"
return ()
完成100個api請求花了6分鍾42秒
time for NUM in `seq 1 1 100`; do ./Testhttp; done
real 6m42.839s
user 0m12.115s
sys 0m2.652s
而使用Net::HTTP.get(URI.parse("https://github.com/trending?l=ruby"))
100次api調用僅需要153秒的ruby
我在haskell代碼中做錯了嗎? 什么是simpleHTTP
的高性能和高效替代simpleHTTP
?
注意:此功能將創建一個新的Manager。 在生產代碼中應避免使用它。
您的代碼為每個請求創建一個新的經理。 如果將其更改為重用單個管理器,則速度可能會快很多。 您可以使用newManager
創建管理器。 例如:
import Network.HTTP.Conduit
main = do
request <- parseUrl "https://github.com/trending?l=ruby"
manager <- newManager conduitManagerSettings
_response <- httpLbs request manager
return ()
我的猜測是您正在使用的Haskell庫正在執行類似IPv6 DNS請求的操作,該請求在回落到IPv4之前超時,而Go和Ruby直接在執行IPv4請求。 每個請求幾秒鍾可能會導致DNS超時,並且沒有其他可能的解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.