Skip to content

Instantly share code, notes, and snippets.

@jashkenas
Created October 17, 2012 13:40
Show Gist options
  • Save jashkenas/3905579 to your computer and use it in GitHub Desktop.
Save jashkenas/3905579 to your computer and use it in GitHub Desktop.
Quick Benchmark vs. Haml vs. ERB. vs. Slim (http://news.ycombinator.com/item?id=4663724)
var http = require('http');
var fs = require('fs');
var _ = require('underscore');
var items = {
"Headline 1": "Link1 Link2 Link3 Link4 Link5 Link6 Link7".split(' '),
"Headline 2": "Link1 Link2 Link3 Link4 Link5 Link6 Link7".split(' '),
"Headline 3": "Link1 Link2 Link3 Link4 Link5 Link6 Link7".split(' '),
"Headline 4": "Link1 Link2 Link3 Link4 Link5 Link6 Link7".split(' ')
};
var template = _.template(fs.readFileSync('page.jst').toString());
http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(template({items: items}));
}).listen(1337, '127.0.0.1');
var fs = require('fs');
var _ = require('underscore');
var express = require('express');
var items = {
"Headline 1": "Link1 Link2 Link3 Link4 Link5 Link6 Link7".split(' '),
"Headline 2": "Link1 Link2 Link3 Link4 Link5 Link6 Link7".split(' '),
"Headline 3": "Link1 Link2 Link3 Link4 Link5 Link6 Link7".split(' '),
"Headline 4": "Link1 Link2 Link3 Link4 Link5 Link6 Link7".split(' ')
};
var template = _.template(fs.readFileSync('page.jst').toString());
var app = express();
app.get('/index.html', function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(template({items: items}));
});
app.listen(1337);
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title> Testanwendung </title>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="#">Project name</a>
<div class="nav-collapse collapse">
<p class="navbar-text pull-right">
Logged in as <a href="#" class="navbar-link">Username</a>
</p>
<ul class="nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span3">
<div class="well sidebar-nav">
<ul class="nav nav-list">
<% for (var key in items) { %>
<li class="nav-header"><%= key %></li>
<% for (var i = 0, l = items[key].length; i < l; i++) { %>
<li><a href="#"><%= items[key][i] %></a></li>
<% } %>
<% } %>
</ul>
</div><!--/.well -->
</div><!--/span-->
<div class="span9">
<div class="hero-unit">
<h1>Hello, world!</h1>
<p>This is a template for a simple marketing or informational website. It includes a large callout called the hero unit and three supporting pieces of content. Use it as a starting point to create something more unique.</p>
<p><a class="btn btn-primary btn-large">Learn more &raquo;</a></p>
</div>
<div class="row-fluid">
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
</div><!--/row-->
<div class="row-fluid">
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn" href="#">View details &raquo;</a></p>
</div><!--/span-->
</div><!--/row-->
</div><!--/span-->
</div><!--/row-->
<hr>
<footer>
<p>&copy; Company 2012</p>
</footer>
</div>
</body>
</html>
~ > ab -n 1000 -c 1 http://127.0.0.1:1337/index.html
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:
Server Hostname: 127.0.0.1
Server Port: 1337
Document Path: /index.html
Document Length: 6445 bytes
Concurrency Level: 1
Time taken for tests: 0.533 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 6568000 bytes
HTML transferred: 6445000 bytes
Requests per second: 1876.81 [#/sec] (mean)
Time per request: 0.533 [ms] (mean)
Time per request: 0.533 [ms] (mean, across all concurrent requests)
Transfer rate: 12037.95 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 3
Processing: 0 0 0.2 0 3
Waiting: 0 0 0.2 0 3
Total: 0 1 0.3 0 6
ERROR: The median and mean for the total time are more than twice the standard
deviation apart. These results are NOT reliable.
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 0
80% 0
90% 1
95% 1
98% 1
99% 2
100% 6 (longest request)
~ > ab -n 1000 -c 10 http://127.0.0.1:1337/index.html
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:
Server Hostname: 127.0.0.1
Server Port: 1337
Document Path: /index.html
Document Length: 6445 bytes
Concurrency Level: 10
Time taken for tests: 0.366 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 6568000 bytes
HTML transferred: 6445000 bytes
Requests per second: 2730.46 [#/sec] (mean)
Time per request: 3.662 [ms] (mean)
Time per request: 0.366 [ms] (mean, across all concurrent requests)
Transfer rate: 17513.32 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 3
Processing: 0 3 2.3 3 18
Waiting: 0 3 2.2 3 17
Total: 0 4 2.3 3 18
Percentage of the requests served within a certain time (ms)
50% 3
66% 4
75% 5
80% 5
90% 6
95% 7
98% 8
99% 15
100% 18 (longest request)
~ > ab -n 1000 -c 1 http://127.0.0.1:1337/index.html
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:
Server Hostname: 127.0.0.1
Server Port: 1337
Document Path: /index.html
Document Length: 6445 bytes
Concurrency Level: 1
Time taken for tests: 0.577 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 6545000 bytes
HTML transferred: 6445000 bytes
Requests per second: 1732.41 [#/sec] (mean)
Time per request: 0.577 [ms] (mean)
Time per request: 0.577 [ms] (mean, across all concurrent requests)
Transfer rate: 11072.85 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 2
Processing: 0 0 0.7 0 18
Waiting: 0 0 0.6 0 18
Total: 0 1 0.7 0 19
WARNING: The median and mean for the total time are not within a normal deviation
These results are probably not that reliable.
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 1
80% 1
90% 1
95% 1
98% 2
99% 3
100% 19 (longest request)
~ >
~ >
~ > ab -n 1000 -c 10 http://127.0.0.1:1337/index.html
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software:
Server Hostname: 127.0.0.1
Server Port: 1337
Document Path: /index.html
Document Length: 6445 bytes
Concurrency Level: 10
Time taken for tests: 0.422 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 6545000 bytes
HTML transferred: 6445000 bytes
Requests per second: 2370.86 [#/sec] (mean)
Time per request: 4.218 [ms] (mean)
Time per request: 0.422 [ms] (mean, across all concurrent requests)
Transfer rate: 15153.59 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.6 0 10
Processing: 0 4 4.3 3 30
Waiting: 0 3 4.0 2 30
Total: 0 4 4.4 3 31
Percentage of the requests served within a certain time (ms)
50% 3
66% 4
75% 4
80% 5
90% 7
95% 12
98% 22
99% 26
100% 31 (longest request)
@tim-smart
Copy link

That wasn't expected... Quite interesting though.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment