Skip to content

Commit 5f11ad1

Browse files
committed
start gzipping search.json
1 parent 779138a commit 5f11ad1

File tree

3 files changed

+22
-6
lines changed

3 files changed

+22
-6
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ elm-stuff
99

1010
all-packages.json
1111
packages
12-
search.json
12+
search.json.gz
1313
sitemap.xml

src/backend/Main.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ serve artifacts token memory =
115115
-- STATIC STUFF
116116
S.route
117117
[ ("assets", serveDirectory "assets")
118-
, ("search.json", serveFile "search.json")
118+
, ("search.json", ServeGzip.serveGzippedFile "application/json" "search.json.gz")
119119
, ("robots.txt", serveFile "robots.txt")
120120
, ("sitemap.xml", serveFile "sitemap.xml")
121121
]

src/backend/Memory.hs

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,18 @@ import Control.Concurrent
1919
import Control.Monad (forever, join)
2020
import Control.Monad.Trans (liftIO)
2121
import qualified Data.ByteString as BS
22+
import qualified Data.ByteString.Builder as B
2223
import qualified Data.List as List
2324
import qualified Data.Map as Map
2425
import qualified Data.Maybe as Maybe
2526
import qualified Data.Utf8 as Utf8
2627
import Snap.Core (Snap)
2728
import qualified System.Directory as Dir
2829
import System.FilePath ((</>))
30+
import qualified System.IO.Streams.ByteString as SB
31+
import qualified System.IO.Streams.Core as S
32+
import qualified System.IO.Streams.File as SF
33+
import qualified System.IO.Streams.Zlib as SZ
2934

3035
import qualified Elm.Constraint as C
3136
import qualified Elm.Licenses as License
@@ -180,6 +185,12 @@ generateAllPackagesJson packages =
180185
E.dict Pkg.toJsonString (E.list V.encode . _versions) packages
181186

182187

188+
write :: FilePath -> E.Value -> IO ()
189+
write path json =
190+
do let temp = "temp-" ++ path
191+
E.writeUgly temp json
192+
Dir.renameFile temp path
193+
183194

184195

185196
-- GENERATE sitemap.xml
@@ -196,7 +207,7 @@ generateSitemap packages =
196207

197208
generateSearchJson :: Map.Map Pkg.Name Summary -> IO ()
198209
generateSearchJson packages =
199-
write "search.json" $
210+
gzipAndWrite "search.json.gz" $
200211
E.list id $ Maybe.mapMaybe maybeEncodeSummary $
201212
List.sortOn (negate . _weight . snd) (Map.toList packages)
202213

@@ -216,10 +227,15 @@ maybeEncodeSummary ( pkg, Summary versions maybeDetails _ ) =
216227
]
217228

218229

219-
write :: FilePath -> E.Value -> IO ()
220-
write path json =
230+
gzipAndWrite :: FilePath -> E.Value -> IO ()
231+
gzipAndWrite path json =
221232
do let temp = "temp-" ++ path
222-
E.writeUgly temp json
233+
let lbs = B.toLazyByteString (E.encodeUgly json)
234+
input <- SB.fromLazyByteString lbs
235+
236+
SF.withFileAsOutput temp $ \output ->
237+
S.connect input =<< SZ.gzip (SZ.CompressionLevel 9) output
238+
223239
Dir.renameFile temp path
224240

225241

0 commit comments

Comments
 (0)