v/examples/js_dom_draw_bechmark_chart
Turiiya c4a679186f
examples, readme: fix typos (#18994)
2023-07-29 15:27:03 +03:00
..
chart examples: fix typos (#18229) 2023-05-25 16:54:46 +03:00
typescript_vanilla_typeorm examples: js_dom_draw_bechmark_chart (#15518) 2022-09-07 01:55:32 +03:00
v_vweb_orm/src orm: enforce that queries always return a Result, a query-resulting array can be used as a V array in place. (#17871) 2023-04-04 08:23:06 +03:00
README.md examples, readme: fix typos (#18994) 2023-07-29 15:27:03 +03:00

README.md

JS DOM Benchmark Chart

image

Running the App

NOTE
The following steps require Node.js. To install Node, please refer to the download page or the installation via your operating systems package manager.

The steps below assume that your current directory path is the examples project directory.

cd examples/js_dom_draw_bechmark_chart

Execute the following commands in separate terminal instances.

Run the Benchmarks Typescript Part

npm i --prefix typescript_vanilla_typeorm
npm run start:dev --prefix typescript_vanilla_typeorm

Run the Benchmarks V Part

v run v_vweb_orm

Run the Chart

cd chart/ && v run .

Dockerfile

[docker build] => Docker image
[docker run] => Docker container

sudo docker build -t <name> .
sudo docker run --name <container name> --interactive --tty --publish 3001:3001 <name>
v run .
# A message like `[Vweb] Running app on http://localhost:3001/` should appear
exit

Implementing New Benchmarks in V

In v_vweb_orm/src/main.v, create a route that returns a Response struct.

['/sqlite-memory/:count']
pub fn (mut app App) sqlite_memory(count int) vweb.Result {
	mut insert_stopwatchs := []int{}
	mut select_stopwatchs := []int{}
	mut update_stopwatchs := []int{}

	mut sw := time.new_stopwatch()

	mut db := sqlite.connect(':memory:') or { panic(err) }

	sql db {
		create table Task
	}!

	task_model := Task{
		title: 'a'
		status: 'done'
	}

	for i := 0; i < count; i++ {
		sw.start()
		sql db {
			insert task_model into Task
		} or { []Task{} }
		sw.stop()
		insert_stopwatchs << int(sw.end - sw.start)
	}

	sql db {
		drop table Task
	}!

	response := Response{
		insert: insert_stopwatchs
		@select: select_stopwatchs
		update: update_stopwatchs
	}
	return app.json(response)
}

In chart/main.v, create a service to request the benchmark data and decode the response as FrameworkBenchmarkResponse.

fn typescript_sqlite_memory() ?FrameworkBenchmarkResponse {
	url := 'http://localhost:3000/sqlite-memory/${benchmark_loop_length}'
	res := http.get(url) or { panic(err) }
	framework_benchmark_response := json.decode(FrameworkBenchmarkResponse, res.body)!
	return framework_benchmark_response
}

Then update insert_framework_benchmark_times(), select_framework_benchmark_times() and update_framework_benchmark_times() to include the numbers := FrameworkPlatform{ for the newly added function.

Roadmap

02/09/2022

  • select bench (easy)
  • vsql (easy)