2017-09-19 5 views
4

Aujourd'hui, j'ai fait peu de benchmarking sur ma machine locale pour comparer la vitesse du texte brut de différents frameworks web Haskell, et j'ai remarqué quelque chose d'étrange. Presque tous les frameworks que j'ai testés, fonctionnaient mieux lorsqu'ils étaient exécutés à partir de GHCi par rapport à la version compilée. voici mes résultatshaskell webframeworks vitesse, GHCi vs compilé

+------------------------------------ 
|framework| GHCi rpm | compiled rpm 
+---------+------------+------------- 
|snap  | 8000  | 150 
+---------+------------+------------- 
|yesod | 6000  | 2500 
+---------+------------+------------- 
|scotty | 22000  | 9500 
+---------+------------+------------- 
|servant | 17000  | 8500 
+---------+------------+------------- 
|spock | 3300  | 2700 
+---------+------------+------------- 

Je sais que ces chiffres ne reflètent pas sur ces cadres de vitesse, car ils ne sont pas bien réglés ou optimisés, mais ma question est pourquoi ces cadres performants mieux lorsqu'ils sont lancés à partir GHCi. Est-ce que je fais quelque chose de mal ?

afin de les construire, je vous suffit d'exécuter stack build

+1

Sans le code, il est difficile de commenter. S'il vous plaît pouvez-vous partager vos benchmarks et publier un problème sur le tracker? –

+1

En effet, c'est assez surprenant et ce serait génial d'avoir du code à regarder. – bgamari

+0

@MatthewPickering Ok, je vais nettoyer mon code et le télécharger sur github. –

Répondre

3

Ce fut une question récente, par Harendra Kumar également dans ce GHC ticket. Vous pouvez voir la discussion pertinente ghc-dev mailing list ici. Voir cette observation spécifique Harendra:

Tout en essayant de trouver un exemple minimal, j'ai découvert une plus chose déroutante. runghc est le plus rapide, ghc est plus lent, ghc avec l'optimisation est la plus lente. Ceci est complètement inverse de l'ordre attendu .

Si possible, je vous suggère de proposer un benchmark minimal pour la même chose et de mettre à jour le ticket ghc avec votre référentiel.

+0

J'ai téléchargé mon code sur github. lien dans les commentaires. –