From 9751d38ba529b99ca15821f47185bb8d4e2b7e5e Mon Sep 17 00:00:00 2001 From: rakeshkky <12475069+rakeshkky@users.noreply.github.com> Date: Wed, 25 Sep 2019 21:18:49 +0530 Subject: [PATCH 1/2] optimise brotli and gzip compression speed --- server/src-lib/Hasura/Server/Compression.hs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/server/src-lib/Hasura/Server/Compression.hs b/server/src-lib/Hasura/Server/Compression.hs index d35a91ba8bb10..16d0289b52764 100644 --- a/server/src-lib/Hasura/Server/Compression.hs +++ b/server/src-lib/Hasura/Server/Compression.hs @@ -24,6 +24,14 @@ compressionTypeToTxt :: CompressionType -> T.Text compressionTypeToTxt CTGZip = "gzip" compressionTypeToTxt CTBrotli = "brotli" +brotliCompressionParams :: BR.CompressParams +brotliCompressionParams = + BR.defaultCompressParams{BR.compressLevel = BR.CompressionLevel4} + +gzipCompressionParams :: GZ.CompressParams +gzipCompressionParams = + GZ.defaultCompressParams{GZ.compressLevel = GZ.compressionLevel 1} + compressResponse :: NH.RequestHeaders -> BL.ByteString @@ -32,8 +40,8 @@ compressResponse reqHeaders unCompressedResp = let compressionTypeM = getRequestedCompression reqHeaders appendCompressionType (res, headerM) = (res, headerM, compressionTypeM) in appendCompressionType $ case compressionTypeM of - Just CTBrotli -> (BR.compress unCompressedResp, Just brHeader) - Just CTGZip -> (GZ.compress unCompressedResp, Just gzipHeader) + Just CTBrotli -> (BR.compressWith brotliCompressionParams unCompressedResp, Just brHeader) + Just CTGZip -> (GZ.compressWith gzipCompressionParams unCompressedResp, Just gzipHeader) Nothing -> (unCompressedResp, Nothing) getRequestedCompression :: NH.RequestHeaders -> Maybe CompressionType From 891b875ba7a63039e75eb25a2771b4d485599d45 Mon Sep 17 00:00:00 2001 From: rakeshkky <12475069+rakeshkky@users.noreply.github.com> Date: Thu, 26 Sep 2019 11:49:28 +0530 Subject: [PATCH 2/2] no-op refactor; move compression params inside function As requested by @lexi-lambda --- server/src-lib/Hasura/Server/Compression.hs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/server/src-lib/Hasura/Server/Compression.hs b/server/src-lib/Hasura/Server/Compression.hs index 16d0289b52764..34eec6fba9f58 100644 --- a/server/src-lib/Hasura/Server/Compression.hs +++ b/server/src-lib/Hasura/Server/Compression.hs @@ -24,14 +24,6 @@ compressionTypeToTxt :: CompressionType -> T.Text compressionTypeToTxt CTGZip = "gzip" compressionTypeToTxt CTBrotli = "brotli" -brotliCompressionParams :: BR.CompressParams -brotliCompressionParams = - BR.defaultCompressParams{BR.compressLevel = BR.CompressionLevel4} - -gzipCompressionParams :: GZ.CompressParams -gzipCompressionParams = - GZ.defaultCompressParams{GZ.compressLevel = GZ.compressionLevel 1} - compressResponse :: NH.RequestHeaders -> BL.ByteString @@ -39,11 +31,16 @@ compressResponse compressResponse reqHeaders unCompressedResp = let compressionTypeM = getRequestedCompression reqHeaders appendCompressionType (res, headerM) = (res, headerM, compressionTypeM) + brotliCompressionParams = + BR.defaultCompressParams{BR.compressLevel = BR.CompressionLevel4} + gzipCompressionParams = + GZ.defaultCompressParams{GZ.compressLevel = GZ.compressionLevel 1} in appendCompressionType $ case compressionTypeM of Just CTBrotli -> (BR.compressWith brotliCompressionParams unCompressedResp, Just brHeader) Just CTGZip -> (GZ.compressWith gzipCompressionParams unCompressedResp, Just gzipHeader) Nothing -> (unCompressedResp, Nothing) + getRequestedCompression :: NH.RequestHeaders -> Maybe CompressionType getRequestedCompression reqHeaders | "br" `elem` acceptEncodingVals = Just CTBrotli