Olen aika ajoin kokeillut erilaisten web-frameworkien maksiminopeutta tekemällä kullekin yksinkertaisen hello world -sovelluksen. Tällä tavalla mittaamalla selviää, paljonko frameworkilta itseltään kuluu resursseja pyyntöjen käsittelyyn ja sivujen renderöimiseen.

Tulos on siis teoreettinen maksimi sille, miten tehokkaita sovelluksia frameworkilla voi kehittää.

Tällä kertaa vertailin Django 1.2.4:n, Ruby on Rails 3.0.3:n sekä Node.js 0.2.6 Expressin nopeutta. Tulokset olivat seuraavat:

FrameworkNopeus
Ruby on Rails (Ruby 1.8)  387 req/s
Ruby on Rails (Ruby 1.9.2)  428 req/s
Django  1093 req/s
Node.js Express  2830 req/s

Tästä kokeilusta käy selvästi ilmi, miten eri luokissa eri frameworkit painivat. Toivoin alun perin, että saisin Railsista enemmän tehoa irti, mutta edes Ruby 1.9.x:n käyttäminen ei näyttänyt auttavan kovin paljon.

On mahdollista, että Railsiakin saa viriteltyä tehokkaammaksi, mutta tällaisia tuloksia saa oletusasennuksella.

Djangossa palvelimena toimi Gunicorn ja Railsissa Thin. Molemmissa oli 10 prosessia palvelemassa pyyntöjä UNIX-socketien kautta. Testi ajettiin kahden Medium-luokan EC2-virtuaalikoneen välillä Amazonin sisäisillä IP-osoitteilla. Testiohjelmana toimi ab (ApacheBench). Web-palvelimena Gunicornin ja Thinin edessä oli Nginx. Ruby 1.8 oli Ubuntun oletuspaketti ja 1.9.2 RVM:llä asennettu, itse käännetty Ruby. Rails-environment oli production ja Djangosta DEBUG = False. Node.js oli itse käännetty ja Expressiä ajettiin production-tilassa TCP-socketin kautta. Testejä ajettiin useita kertoja läpi ja tulokset pysyivät aina saman suuntaisina.

Published 17.1.2011