react-docker-optimization/startup_bench.nu
2025-01-12 21:03:07 +01:00

46 lines
1.8 KiB
Text

def main [bench_size:int=5] {
let res_dir = 'start_results'
(mkdir $res_dir)
let bench = [
['tag', 'image', 'hport', 'dport'];
['simple-dockerfile', 'react-simple', 3000, 3000],
['multi-stage-dockerfile', 'react-multistage', 3000, 3000],
['node-alpine-dockerfile', 'react-multistage-alpine', 3000, 3000],
['nginx-dockerfile', 'react-nginx', 80, 80],
['nginx-alpine-dockerfile', 'react-nginx-alpine', 80, 80],
['bun-rspack-dockerfile', 'react-bun-rspack', 80, 80],
['nginx-distroless-dockerfile', 'react-nginx-distroless', 80, 8080]
]
mut bench_results = []
for entry in $bench {
(docker stop $entry.image)
(docker container rm $entry.image)
(docker run -d -p $'($entry.hport):($entry.dport)' --name $entry.image $entry.image)
(docker stop $entry.image)
print $'Starting bench for image ($entry.image)'
let total_time = timeit {
mut csv_results = []
for i in 1..$bench_size {
let time = timeit {
(docker start $entry.image)
let hport = $entry.hport
mut curl_res = curl -s --write-out '%{http_code}' $'http://localhost:($entry.hport)' | str substring (-3..)
while curl_res != '200' {
$curl_res = (curl -s --write-out '%{http_code}' $'http://localhost:($entry.hport)' | str substring (-3..))
if $curl_res == '200' {
break
}
}
(docker stop $entry.image)
}
$csv_results = ($csv_results ++ [['tag', 'image', 'time']; [$entry.tag, $entry.image, $time]])
print $'Time for ($i) out of ($bench_size) for image ($entry.image) : ($time)'
}
$csv_results | to csv | save -f $'./($res_dir)/($entry.tag).csv'
print $csv_results
}
print $'Total time for image ($entry.image): ($total_time)'
}
}