From a444c321940263b6ce8f240c0eb7293b6c7d8db5 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Mon, 12 Jul 2021 03:36:57 -0500 Subject: [PATCH 1/3] perf: don't use ref in foreach for parallel files --- Readme.md | 4 ++-- src/native/lib.d | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Readme.md b/Readme.md index fdacec0..0fce779 100644 --- a/Readme.md +++ b/Readme.md @@ -92,14 +92,14 @@ minifyFiles(["file1.json", "file2.json"], true); On AMD Ryzen 7 4800H: - minifyString: minijson is 4178 times faster than jsonMinify -- minifyFiles: minijson is 1198 times faster than jsonMinify. +- minifyFiles: minijson is 1894 times faster than jsonMinify. ``` ❯ .\dist\minijson-benchmark.exe --benchmark-minifyString --benchmark-minifyFiles Benchmark minifyString 14 ms Benchmark minifyFiles -49 ms +31 ms ❯ node .\benchmark\js-benchmark.mjs Benchmark minifyString diff --git a/src/native/lib.d b/src/native/lib.d index acab581..c0de13b 100644 --- a/src/native/lib.d +++ b/src/native/lib.d @@ -175,7 +175,7 @@ void minifyFiles(in string[] files, in bool hasComment = false) import std.parallelism : parallel; import std.file : readText, write; - foreach (ref file; files.parallel()) + foreach (file; files.parallel()) { const string jsonString = readText(file); const minifiedJsonString = minifyString(jsonString, hasComment); From 33ab5040a58a71360d7dfd679331eecf28ab8236 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Mon, 12 Jul 2021 03:38:08 -0500 Subject: [PATCH 2/3] perf: inline variables to enforce moving --- src/native/lib.d | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/native/lib.d b/src/native/lib.d index c0de13b..307ebf3 100644 --- a/src/native/lib.d +++ b/src/native/lib.d @@ -177,8 +177,6 @@ void minifyFiles(in string[] files, in bool hasComment = false) foreach (file; files.parallel()) { - const string jsonString = readText(file); - const minifiedJsonString = minifyString(jsonString, hasComment); - write(file, minifiedJsonString); + write(file, minifyString(readText(file), hasComment)); } } From 60e6b2e0e2c62fc447ea1d09ca650f84d4720d47 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Mon, 12 Jul 2021 03:45:43 -0500 Subject: [PATCH 3/3] perf: merge !noleftContext condition --- src/native/lib.d | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/native/lib.d b/src/native/lib.d index 307ebf3..17ba70f 100644 --- a/src/native/lib.d +++ b/src/native/lib.d @@ -47,15 +47,13 @@ string minifyString(in string jsonString, in bool hasComment = false) @trusted { auto leftContextSubstr = match.pre()[prevFrom .. $]; const noLeftContext = leftContextSubstr.length == 0; - if (!in_string && !noLeftContext) - { - leftContextSubstr = remove_spaces(leftContextSubstr); - } - if (!noLeftContext) - { + if (!noLeftContext) { + if (!in_string) + { + leftContextSubstr = remove_spaces(leftContextSubstr); + } result ~= leftContextSubstr; } - if (matchFrontHit == "\"") { if (!in_string || noLeftContext || hasNoSlashOrEvenNumberOfSlashes(leftContextSubstr))