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 c6ed82faef..d13eb58c46 100644 Binary files a/javascript/benchmark/platform-buffer.jpg and b/javascript/benchmark/platform-buffer.jpg differ diff --git a/javascript/benchmark/platform-buffer.js b/javascript/benchmark/platform-buffer.js index cacd4bd166..bf56235a8f 100644 --- a/javascript/benchmark/platform-buffer.js +++ b/javascript/benchmark/platform-buffer.js @@ -29,14 +29,14 @@ const jsonString = JSON.stringify({ async function start() { const result = { - browserCompare: {}, - browserVsNativeWrite: {}, - browserVsNativeToString: {}, + writeComparison: {}, + toStringComparison: {}, } { const platformBufferA = new BrowserBuffer(jsonString.length); const platformBufferB = new BrowserBuffer(jsonString.length); + const nativeBuffer = Buffer.alloc(jsonString.length); var suite = new Benchmark.Suite(); suite @@ -46,36 +46,17 @@ async function start() { .add("browser write", function () { platformBufferB.write(jsonString, 0, 'utf8'); }) - .on("complete", function (e) { - e.currentTarget.forEach(({ name, hz }) => { - 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, }