Skip to content

Performance comparison of node.js postgres js and PHP PDO

akidee edited this page Sep 13, 2010 · 4 revisions

I wrote the same code both in node and PHP. In PHP I used prepared statements. In node:

var sys = require('sys'),
    p = require('postgres-js/lib/postgres-pure'),
    step = require('step/lib/step');
  
global.max = 100000;
global.doTrunc = true;

step(

    function a() {

        C = new p.Connection({database:'test',username:'zltl'});
            
        t = (new Date).getTime();
        
        var values, group = this.group();
        for (var i = 0; i < max; i++) {

            values = [
                '1012345678912345356',
                true,
                "Damit sind sowohl Arbeitsministerin Ursula von der Leyen als auch Finanzminister Wolfgang Schäuble aus dem Rennen. Beide CDU-Politiker, insbesondere die frühere Familienministerin, galten seit dem Rücktritt von Bundespräsident Horst Köhler am Montagmittag als Favoriten für das Amt. Doch ihre Nominierung soll am Widerstand des konservativen CDU-Flügels, unter anderem an Baden-Württembergs Ministerpräsident Stefan Mappus, gescheitert sein. Sie ist in bestimmten Bereichen durchsetzungsfähig, aber für die jüngere Generation ein Antityp, formulierte es der FDP-Fraktionsvize Jürgen Koppelin und verwies damit die von ihr maßgeblich durchgesetzten Internet-Sperren. Genau dies scheint mit dem Kandidat Wulff nicht realisierbar: Die Koalition trifft in der Bundesversammlung auf zwei Gegenkandidaten. So wollen SPD und Grüne den früheren Bundesbeauftragten für die Stasi-Unterlagen, Joachim Gauck, aufstellen. Auch die Linkspartei will einen eigenen Anwärter ins Rennen schicken. Die beiden Vorsitzenden Klaus Ernst und Gesine Lötzsch würden den Parteigremien in den nächsten Tagen einen entsprechenden Vorschlag machen. Ein Name wurde noch nicht genannt.",
                null
            ];
          
            C.query('INSERT INTO t VALUES (?, ?, ?, ?)', values, group());
        }

    },
    
    function b() {

        sys.puts((new Date).getTime() - t);
        doTrunc 
            ? global.C.query('TRUNCATE table t', this)
            : this();
    },
    
    function c() {
    
         C.end();
    }
    
);

Results:

t = {
	100: {
		php: (0.056 + 0.088 + 0.085) / 3,
		node: (.140 + .138 + .104) / 3
	},
	1000: {
		php: (1.262 + 1.054 + 0.980) / 3,
		node: (1.249 + 1.769 + 1.122) / 3
	},
	10000: {
		php: (13.220 + 10.947) / 2,
		node: (13.374 + 13.114) / 2
	},
	100000: {
		php: (125.682 + 123.129) / 2,
		node: (157.149 + 155.098) / 2
	}
};

for (n in t) { t[n].ratio = t[n].php / t[n].node }

PHP is slightly faster than node. What about adding prepared statements to postgres-js?

Clone this wiki locally