From d1680e70fd6e64cab8b89c6dcaec3cef2352742e Mon Sep 17 00:00:00 2001 From: Mohabbat Date: Tue, 13 Jan 2026 12:11:21 +0600 Subject: [PATCH] bench: add client benchmark for js-framework-benchmark (#38) --- benches/client/.gitignore | 10 ++ benches/client/README.md | 28 ++++ benches/client/assets/main.wasm | Bin 0 -> 55298 bytes benches/client/build.zig | 32 +++++ benches/client/build.zig.zon | 17 +++ benches/client/favicon.ico | Bin 0 -> 4286 bytes benches/client/index.html | 8 ++ benches/client/package-lock.json | 13 ++ benches/client/package.json | 27 ++++ benches/client/site/main.zig | 34 +++++ benches/client/site/pages/layout.zx | 17 +++ benches/client/site/pages/page.zx | 174 +++++++++++++++++++++++++ benches/client/site/public/favicon.ico | Bin 0 -> 4286 bytes benches/client/src/root.zig | 3 + 14 files changed, 363 insertions(+) create mode 100644 benches/client/.gitignore create mode 100644 benches/client/README.md create mode 100644 benches/client/assets/main.wasm create mode 100644 benches/client/build.zig create mode 100644 benches/client/build.zig.zon create mode 100644 benches/client/favicon.ico create mode 100644 benches/client/index.html create mode 100644 benches/client/package-lock.json create mode 100644 benches/client/package.json create mode 100644 benches/client/site/main.zig create mode 100644 benches/client/site/pages/layout.zx create mode 100644 benches/client/site/pages/page.zx create mode 100644 benches/client/site/public/favicon.ico create mode 100644 benches/client/src/root.zig diff --git a/benches/client/.gitignore b/benches/client/.gitignore new file mode 100644 index 00000000..83937100 --- /dev/null +++ b/benches/client/.gitignore @@ -0,0 +1,10 @@ +# Zig +.zig-cache +# zig-out + +# ZX +/dist +/bundle + +# Node.js +node_modules \ No newline at end of file diff --git a/benches/client/README.md b/benches/client/README.md new file mode 100644 index 00000000..81b9c834 --- /dev/null +++ b/benches/client/README.md @@ -0,0 +1,28 @@ +# ZX +This website is built with [ZX](https://github.com/nurulhudaapon/zx). + +**[Full Documentation →](https://ziex.dev)** + +## Installation of ZX + +##### Linux/macOS +```bash +curl -fsSL https://ziex.dev/install | bash +``` + +##### Windows +```powershell +powershell -c "irm ziex.dev/install.ps1 | iex" + +``` +##### Installing Zig +```bash +brew install zig # macOS +winget install -e --id zig.zig # Windows +``` +[_See for other platforms →_](https://ziglang.org/learn/getting-started/) + +## Running this Project +```bash +zx serve +``` \ No newline at end of file diff --git a/benches/client/assets/main.wasm b/benches/client/assets/main.wasm new file mode 100644 index 0000000000000000000000000000000000000000..239c2fdcd883eb55755caec98b930e7356d7034e GIT binary patch literal 55298 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 literal 0 HcmV?d00001 diff --git a/benches/client/build.zig b/benches/client/build.zig new file mode 100644 index 00000000..bd2000f8 --- /dev/null +++ b/benches/client/build.zig @@ -0,0 +1,32 @@ +const std = @import("std"); +const zx = @import("zx"); + +pub fn build(b: *std.Build) !void { + // --- Target and Optimize from `zig build` arguments --- + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + // --- Root Module --- + const mod = b.addModule("root_mod", .{ + .root_source_file = b.path("src/root.zig"), + .target = target, + .optimize = optimize, + }); + + // --- ZX Setup (sets up ZX, dependencies, executables and `serve` step) --- + const site_exe = b.addExecutable(.{ + .name = "zx_site", + .root_module = b.createModule(.{ + .root_source_file = b.path("site/main.zig"), + .target = target, + .optimize = optimize, + .imports = &.{ + .{ .name = "root_mod", .module = mod }, + }, + }), + }); + + _ = try zx.init(b, site_exe, .{ + .experimental = .{ .enabled_csr = true }, + }); +} diff --git a/benches/client/build.zig.zon b/benches/client/build.zig.zon new file mode 100644 index 00000000..86a3565e --- /dev/null +++ b/benches/client/build.zig.zon @@ -0,0 +1,17 @@ +.{ + .name = .zx_site, + .version = "0.0.0", + .fingerprint = 0xc04151551dc3c31d, + .minimum_zig_version = "0.15.2", + .dependencies = .{ + .zx = .{ + .url = "git+https://github.com/nurulhudaapon/zx#a94b0efab6d9d2c30ccaa22eb80bb8051e76ee34", + .hash = "zx-0.1.0-dev.562-8okzKu7fgQAQaD7ebNtUdcIzmcdxEjtCvO3-GKhrojWv", + }, + }, + .paths = .{ + "build.zig", + "build.zig.zon", + "src", + }, +} diff --git a/benches/client/favicon.ico b/benches/client/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..db14b3fffd2086bf662843de93065877ccd7628d GIT binary patch literal 4286 zcmZQzU}RuqP*4ET3Jfa*7#PGD7#K7d7#I{77#JKFAmR)lAi%(&Dh9zIE*fTGU|^79 zU|>+DF$UQIvJ2UIQ3eKvZUzR1s|*Yb_i2nlc7W^x*$Hw36V&ei3=9nP#2`0->;{F$ z6*}7u@+Zhnklmp8zBd5&gX{#^4Z@%}2f2x!7-T2NZV(2s>1j8}E|8rdyFnPl28q!V zgX{#^4ZU0wgDrl$T+PEN*(L2^z`PGGf;j*kD+ z($fBig@yg+;o$+Bft;2tEiJ)j#l*z?7ZMUemIv7hvKxd!Y_J>)3(Nlv8#eqW1XitD z1y&ET_v_cM|9}4c`9CQs2`mP)UqM0P|D{Wpz(%cHx$-|ZH#f38$WD;mAPi!|<#Ka# z|Ns8|`~Sax|Nd{=w(Wm+clZC^-d;HF@9+N~7Z>-Rk&*E~J3IUT`Sa(4?YMH~%6}y# zC9pZn%*_9LdV0X(j~+exZ)|J~7KgbFTE>Fx24NKYd3kyNuU@?xtar}AWHjo{lczN^Y4cHIm<>e^qLGt+Q2g&Q|>i)lV>lWC|+S*!hT!X}M z;jFAIaG1S)`}TiGNXUPXyFr@w@8ADlL_~yS`$6`^$H)Kw{{8#^*RNmycX4sSW(Hi0 zkB{&FrcIkbR{nqS;>G`8zkdCH|Ni}dcXxNV8jzVt7!>B9um@of8$%r^ZfDJ!1vc~O z(WC#RrKK^{Aer~y+S(fIR(Jo!H;9U!YgVuS1i*$u)VHdeD06&3%VJ9iFj zBq(lKSy{2F1DR`MWAh&r=U~PE|NoydWeUaigUt2w^ZWnd!-xN$KYs?tEl3OxG59;DaK z&JLUwKxIgAaWPyiNDhiYeg^p+gh6bu8c_KM%1fZQn>1C+#V-_x4_@9G=16dwqC&+FP2C>0% zAa{fEIw|AW+rhKBwJrBNg~ zkewjAK^Vja+m9qqYd*+Mkli2*V$<3_bn`)Wg6sxi5F1^d)_jniAiF^r#HO`<=;nj$ z1lbM3ptdl&Jgxa4J3)4X`T(H50IlsqHy>mt$Zk*{2-Fusm!~x!WGBdOP#+M~7XMV4=^w=H-Lr+z&!d9AUi>J0{~Tt B>XrZi literal 0 HcmV?d00001 diff --git a/benches/client/index.html b/benches/client/index.html new file mode 100644 index 00000000..1cbd6e21 --- /dev/null +++ b/benches/client/index.html @@ -0,0 +1,8 @@ + +ZX

ZX Client-Side keyed

+ + \ No newline at end of file diff --git a/benches/client/package-lock.json b/benches/client/package-lock.json new file mode 100644 index 00000000..0a423d3c --- /dev/null +++ b/benches/client/package-lock.json @@ -0,0 +1,13 @@ +{ + "name": "js-framework-benchmark-zx", + "version": "1.1.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "js-framework-benchmark-zx", + "version": "1.1.1", + "license": "Apache-2.0" + } + } +} diff --git a/benches/client/package.json b/benches/client/package.json new file mode 100644 index 00000000..65923f4a --- /dev/null +++ b/benches/client/package.json @@ -0,0 +1,27 @@ +{ + "name": "js-framework-benchmark-zx", + "version": "1.1.1", + "description": "Vanilla.JS demo", + "main": "index.js", + "js-framework-benchmark": { + "frameworkVersion": "", + "issues": [ + 772 + ] + }, + "scripts": { + "dev": "exit 0", + "build-prod": "exit 0" + }, + "keywords": [ + "react", + "webpack" + ], + "author": "Stefan Krause", + "license": "Apache-2.0", + "homepage": "https://github.com/krausest/js-framework-benchmark", + "repository": { + "type": "git", + "url": "https://github.com/krausest/js-framework-benchmark.git" + } +} diff --git a/benches/client/site/main.zig b/benches/client/site/main.zig new file mode 100644 index 00000000..09f1b63b --- /dev/null +++ b/benches/client/site/main.zig @@ -0,0 +1,34 @@ +const meta = @import("zx_meta").meta; +const std = @import("std"); +const zx = @import("zx"); +const builtin = @import("builtin"); + +const config = zx.App.Config{ .server = .{}, .meta = meta }; + +pub fn main() !void { + if (zx.platform == .browser) return; + + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + const allocator = gpa.allocator(); + defer _ = gpa.deinit(); + + const app = try zx.App.init(allocator, config); + defer app.deinit(); + + app.info(); + try app.start(); +} + +var client = zx.Client.init( + zx.client_allocator, + .{ .components = &@import("zx_components").components }, +); + +export fn mainClient() void { + if (zx.platform != .browser) return; + + client.info(); + client.renderAll(); +} + +pub const std_options = zx.std_options; diff --git a/benches/client/site/pages/layout.zx b/benches/client/site/pages/layout.zx new file mode 100644 index 00000000..b8efe4df --- /dev/null +++ b/benches/client/site/pages/layout.zx @@ -0,0 +1,17 @@ +pub fn Layout(ctx: zx.LayoutContext, children: zx.Component) zx.Component { + return ( + + + ZX + + + + + {children} +