From 2921dd618348ae09b0b4d7af4b36963f6c797912 Mon Sep 17 00:00:00 2001 From: "lijiacheng.ljc" Date: Mon, 19 Feb 2024 16:50:02 +0800 Subject: [PATCH] chore: update benchmark --- javascript/benchmark/platform-buffer-draw.py | 60 ++++++------------- javascript/benchmark/platform-buffer.jpg | Bin 55653 -> 36432 bytes javascript/benchmark/platform-buffer.js | 40 ++++--------- 3 files changed, 31 insertions(+), 69 deletions(-) diff --git a/javascript/benchmark/platform-buffer-draw.py b/javascript/benchmark/platform-buffer-draw.py index 9ff73d5b69..5c9a803e92 100644 --- a/javascript/benchmark/platform-buffer-draw.py +++ b/javascript/benchmark/platform-buffer-draw.py @@ -19,31 +19,31 @@ import sys [ - _, browser_utf8_write, browser_write, - browser_write_1, native_write, browser_to_string, native_to_string, -] = sys.argv[0:7] +] = sys.argv[1:6] -# 创建图形和子图 -fig, axs = plt.subplots(nrows=1, ncols=3, figsize=(15, 5), sharey=True) +browser_utf8_write = int(browser_utf8_write) +browser_write = int(browser_write) +native_write = int(native_write) +browser_to_string = int(browser_to_string) +native_to_string = int(native_to_string) + +fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10, 5), sharey=True) -# 绘制第一部分比较:browser utf8Write 和 browser write axs[0].bar( - ["browser utf8Write", "browser write"], - [browser_utf8_write, browser_write], - color=["b", "g"], + ["browser utf8Write", "browser write", "native write"], + [browser_utf8_write, browser_write, native_write], + color=["b", "g", "r"], ) -axs[0].set_title("Browser UTF8 Write vs Browser Write") -axs[0].set_xlabel("Operation Type") -axs[0].set_xticklabels(["browser utf8Write", "browser write"]) -axs[0].set_ylabel("Tps") +axs[0].set_title("Write Comparison") +axs[0].set_xticklabels(["browser utf8Write", "browser write", "native write"]) +axs[0].set_ylabel("TPS") -# 在柱形图上添加数值标签 for p in axs[0].patches: axs[0].annotate( format(p.get_height(), ".0f"), @@ -54,38 +54,16 @@ textcoords="offset points", ) -# 绘制第二部分比较:browser write 和 native write axs[1].bar( - ["browser write", "native write"], [browser_write_1, native_write], color=["g", "r"] -) -axs[1].set_title("Browser Write vs Native Write") -axs[1].set_xlabel("Operation Type") -axs[1].set_xticklabels(["browser write", "native write"]) - -# 在柱形图上添加数值标签 -for p in axs[1].patches: - axs[1].annotate( - format(p.get_height(), ".0f"), - (p.get_x() + p.get_width() / 2.0, p.get_height()), - ha="center", - va="center", - xytext=(0, 9), - textcoords="offset points", - ) - -# 绘制第三部分比较:browser toString 和 native toString -axs[2].bar( ["browser toString", "native toString"], [browser_to_string, native_to_string], color=["b", "r"], ) -axs[2].set_title("Browser ToString vs Native ToString") -axs[2].set_xlabel("Operation Type") -axs[2].set_xticklabels(["browser toString", "native toString"]) +axs[1].set_title("toString Comparison") +axs[1].set_xticklabels(["browser toString", "native toString"]) -# 在柱形图上添加数值标签 -for p in axs[2].patches: - axs[2].annotate( +for p in axs[1].patches: + axs[1].annotate( format(p.get_height(), ".0f"), (p.get_x() + p.get_width() / 2.0, p.get_height()), ha="center", @@ -94,9 +72,7 @@ textcoords="offset points", ) -# 调整布局以避免重叠 plt.tight_layout() -# 显示图形 plt.show() fig.savefig("./platform-buffer.jpg") diff --git a/javascript/benchmark/platform-buffer.jpg b/javascript/benchmark/platform-buffer.jpg index c6ed82faef336cf8e849a6540bbbf5b8db947406..d13eb58c4631d1f723200f975d3cbf81b800b689 100644 GIT binary patch literal 36432 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

(Kkq?E^@9FdojXUX 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 { - result.browserCompare[name] = Math.ceil(hz); - }); - }) - .run({ async: false }); - console.log("Write operation per second") - console.table(result.browserCompare); - } - - { - const browserBuffer = new BrowserBuffer(jsonString.length); - const nativeBuffer = Buffer.alloc(jsonString.length); - - var suite = new Benchmark.Suite(); - suite - .add("browser write", function () { - browserBuffer.write(jsonString, 0, 'utf8'); - }) .add("native write", function () { nativeBuffer.write(jsonString, 0, 'utf8'); }) .on("complete", function (e) { e.currentTarget.forEach(({ name, hz }) => { - result.browserVsNativeWrite[name] = Math.ceil(hz); + result.writeComparison[name] = Math.ceil(hz); }); }) .run({ async: false }); console.log("Write operation per second") - console.table(result.browserVsNativeWrite); + console.table(result.writeComparison); } { @@ -94,17 +75,22 @@ async function start() { }) .on("complete", function (e) { e.currentTarget.forEach(({ name, hz }) => { - result.browserVsNativeToString[name] = Math.ceil(hz); + result.toStringComparison[name] = Math.ceil(hz); }); }) .run({ async: false }); console.log("toString operation per second") - console.table(result.browserVsNativeToString); + console.table(result.toStringComparison); } + const args = ['platform-buffer-draw.py', result.writeComparison['browser utf8Write'], result.writeComparison['browser write'], result.writeComparison['native write'], result.toStringComparison['browser toString'], result.toStringComparison['native toString']]; + + console.log("Running python script to draw the graph") + console.log("python3", ...args) + spawn( `python3`, - ['platform-buffer-draw.py', result.browserCompare["browser utf8Write"], result.browserCompare["browser write"], result.browserVsNativeWrite["browser write"], result.browserVsNativeWrite["native write"], result.browserVsNativeToString["browser toString"], result.browserVsNativeToString["native toString"]], + ['platform-buffer-draw.py', result.writeComparison['browser utf8Write'], result.writeComparison['browser write'], result.writeComparison['native write'], result.toStringComparison['browser toString'], result.toStringComparison['native toString']], { cwd: __dirname, }