on master help sign in
Encoding performance: compare like with like.
e358efbBryan O'Sullivan
benchmarks/CompareWithJSON.hs+7−2
@@ -1,5 +1,7 @@
1{-# OPTIONS_GHC -fno-warn-orphans #-}
1{-# OPTIONS_GHC -fno-warn-orphans #-}
2
2
3+import Blaze.ByteString.Builder (toLazyByteString)
4+import Blaze.ByteString.Builder.Char.Utf8 (fromString)
3import Control.DeepSeq (NFData(rnf))
5import Control.DeepSeq (NFData(rnf))
4import Criterion.Main
6import Criterion.Main
5import qualified Data.Aeson as A
7import qualified Data.Aeson as A
@@ -33,6 +35,9 @@ decodeA s = case A.decode s of
33 Just v -> v
35 Just v -> v
34 Nothing -> error "fail to parse via Aeson"
36 Nothing -> error "fail to parse via Aeson"
35
37
38+encodeJ :: J.JSValue -> BL.ByteString
39+encodeJ = toLazyByteString . fromString . J.encode
40+
36main :: IO ()
41main :: IO ()
37main = do
42main = do
38 let enFile = "json-data/twitter100.json"
43 let enFile = "json-data/twitter100.json"
@@ -55,11 +60,11 @@ main = do
55 , bgroup "encode" [
60 , bgroup "encode" [
56 bgroup "en" [
61 bgroup "en" [
57 bench "aeson" $ nf A.encode (decodeA enA)
62 bench "aeson" $ nf A.encode (decodeA enA)
58− , bench "json" $ nf J.encode (decodeJ enJ)
63+ , bench "json" $ nf encodeJ (decodeJ enJ)
59 ]
64 ]
60 , bgroup "jp" [
65 , bgroup "jp" [
61 bench "aeson" $ nf A.encode (decodeA jpA)
66 bench "aeson" $ nf A.encode (decodeA jpA)
62− , bench "json" $ nf J.encode (decodeJ jpJ)
67+ , bench "json" $ nf encodeJ (decodeJ jpJ)
63 ]
68 ]
64 ]
69 ]
65 ]
70 ]
benchmarks/aeson-benchmarks.cabal+1
@@ -10,6 +10,7 @@ executable aeson-benchmark-compare-with-json
10 build-depends:
10 build-depends:
11 aeson == 0.4.0.0,
11 aeson == 0.4.0.0,
12 base,
12 base,
13+ blaze-builder,
13 bytestring,
14 bytestring,
14 criterion,
15 criterion,
15 json
16 json