簡體   English   中英

網絡中的Haskell simpleHTTP.HTTP.Conduit對獲取請求的執行緩慢

[英]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

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM