• [^] # Re: Mais donc les performances ?

    Posté par . En réponse à la dépêche Retour d'expérience sur sql.js. Évalué à 5.

    Browserscope donne les performances du backend Javascript sur différent browsers, mais il manquait les comparaisons avec la bibliothèque C de départ. Je viens de m'en occuper.

    J'ai tapé "sqlite python tutorial" dans Google, choisi le premier lien venu, et adapté le code pour reproduire le code SQL utilisé sur la page JSperf. Ça donne ça:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import sqlite3 as lite
    import sys
    con = None
    # comment one or another
    #test = "insert"
    test = "select"
    try:
     con = lite.connect(':memory:')
     cur = con.cursor()
     cur.execute("DROP TABLE IF EXISTS t1")
     cur.execute("CREATE TABLE t1(a,b);")
     cur.execute("INSERT INTO t1 VALUES(?,?)", (1, 'hello'))
     if (test == "insert"):
     for i in range(250*1347):
     cur.execute("INSERT INTO t1 VALUES(?,?)", (1, 'hello'))
     if (test == "select"):
     for i in range(50*6795):
     cur.execute("SELECT * FROM t1").fetchall()
     print(cur.execute("SELECT COUNT(*) FROM t1").fetchall())
    except lite.Error, e:
     print "Error %s:" % e.args[0]
     sys.exit(1)
    finally:
     if con:
     con.close()

    J'ai pris les valeurs 1347 et 6795 qui correspondent au meilleur nombre d'opération par seconde dans le JsPerf (Firefox 30.0), et regardé par combien de fois il faut multiplier le nombre d'opération pour que le programme Python tourne en une seconde. J'ai laissé les valeurs que j'ai obtenues expérimentalement sur ma machine (en comparaison j'obtiens 1175 INSERT/s et 2542 SELECT/s sur le JsPerf):

    • le programme Python fait 250 fois plus d'itérations de INSERT en une seconde
    • le programme Python fait 50 fois plus d'itérations de SELECT en une seconde

    Ça laisse à penser qu'utiliser la lib C compilée sur ma machine, avec un frontend Python, est entre 50 et 250 fois plus rapide que d'utiliser la version compilée vers Javascript, avec un frontend Javascript—pour l'instant, on peut espérer que emscripten et les moteurs Javascript continuent à s'améliorer.

    Le benchmark pourrait être faussé par le coût de récupération des données (entre le retour de SQLite et la présentation des résultats au programme Javascript appelant). Il vaudrait mieux faire des tests sur des requêtes qui demandent plus de calcul à la base de donnée qu'au client. lovasoa, si tu es motivé...