Michael Hixson b472c2f4dd Remove source_code files, count all files instead (#3715) 7 years ago
..
meta 04b812cc68 Importing improvements to Ur/Web Meta library 11 years ago
README.md b472c2f4dd Remove source_code files, count all files instead (#3715) 7 years ago
bench.ur 28ae46d456 Remove unnecessary code from Ur/Web benchmark implementation 11 years ago
bench.urp 9ce3f7caea Remove unnecessary line from Ur/Web configuration file 11 years ago
bench.urs 1ed86d2601 Moving Ur frameworks 11 years ago
benchmark_config.json 2020f423ee Ur/urweb framework fix (#2455) 9 years ago
urweb-mysql.dockerfile 4841f45892 Ur/* remove TE dependencies and urweb-base (#3510) 7 years ago
urweb.dockerfile 4841f45892 Ur/* remove TE dependencies and urweb-base (#3510) 7 years ago

README.md

TechEmpower Framework Benchmark: Ur/Web

This is a benchmark solution in the Ur/Web language: http://www.impredicative.com/ur/

Caveats, in Comparing with Other Frameworks

Ur/Web is unusual in a few ways of favoring simplicity over performance, which has consequences for the results in this benchmark comparison. For instance:

  • Security: The design of Ur/Web favors making common security mistakes impossible. Most such mechanisms have no run-time costs, but some do. For instance, the standard-library random number generator is cryptographically secure, which adds overhead to the benchmarks that generate many random numbers.
  • Concurrency: The concurrency model of Ur/Web is transactions. An Ur/Web programmer never needs to think about an interleaving semantics for threads. The implementation relies on the transaction features of SQL engines, which add an overhead (e.g., extra database round-trips to begin/end transactions) to those tests that most other solutions avoid by accepting more complex concurrency semantics. (We hope there will be an explicit transactions test soon!)

Code Structure & Build Instructions

To compile a standalone executable running on port 8080, run urweb bench. See setup.py for fancier options.

bench.ur is the main source file. bench.urs is the signature file describing the module's exported functions. bench.urp is the project file giving compilation directives.

benchmark_config.json includes metadata for the framework comparison.

__init__.py and setup.py are for starting and stopping the Ur/Web server. setup_mysql.py is a variant using MySQL instead of PostgreSQL.