URL: https://linuxfr.org/users/lovasoa/journaux/taptempo-du-web-en-sql-avec-sqlpage Title: TapTempo du Web en SQL avec SQLPage Authors: lovasoa Date: 2023年07月25日T22:29:17+02:00 License: CC By-SA Tags: sqlpage, taptempo_web, web et développement_web Score: 8 L'été dernier, il y a eu une mode sur LinuxFR: le [TapTempo du Web](https://linuxfr.org/users/niconico/journaux/le-taptempo-du-web). C'est une sorte de concours (pas très malin), où le but est de montrer que son langage de programmation est meilleur que les autres, parce qu'il peut traiter plus de requêtes HTTP par seconde que les autres. ### Les règles du jeu - Choisir un langage de programmation et un *framework* pour construire un serveur web avec. - Écrire un tout petit serveur web qui ne fait qu'une chose: une redirection vers une autre page - Mesurer les performances du serveur, sur son ordinateur, avec [ab](https://httpd.apache.org/docs/2.4/programs/ab.html) - Comparer son langage et son framework avec les autres de manière pas du tout scientifique, puisque chacun implémente un programme un peu différent et mesure les performances sur son propre ordinateur. ### Ma participation Je propose de relancer le concours cet été, et je commence avec une soumission pour le [constructeur de site web *low-code* SQLPage](https://sql.ophir.dev) (présenté précédemment sur linuxfr [dans cette dépêche sous forme de tutoriel](https://linuxfr.org/news/ecrire-une-appli-web-en-une-journee-avec-sqlpage)) #### Code source en SQL ```sql select 'redirect' as component, 'http://example.com' as link; ``` #### Benchmark Avec mon CPU *11th Gen Intel Core i7-11390H @ 3.40GHz* ``` ❯ ab -n 100000 -c 10 -e /tmp/profile.csv 'http://localhost:8080/x.sql' This is ApacheBench, Version 2.3 <$revision: 1879490 $> [...] Time taken for tests: 4.693 seconds Complete requests: 100000 Failed requests: 0 [...] Requests per second: 21308.09 [#/sec] (mean) Time per request: 0.469 [ms] (mean) Time per request: 0.047 [ms] (mean, across all concurrent requests) Transfer rate: 5014.89 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 2 Processing: 0 0 0.8 0 25 Waiting: 0 0 0.7 0 25 Total: 0 0 0.8 0 25 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% 25 (longest request) ``` #### Interprétation On sert donc, en SQL, 21 000 requêtes par seconde, et 90% des requêtes sont servies en moins d'une milliseconde 🤯 Pas mal ! À titre de comparaison, sur le même ordinateur, [la version en python de l'année dernière](https://linuxfr.org/nodes/128004/comments/1893482) sert 900 requêtes par seconde (23 fois moins), avec plus de 12ms de latence sur les requêtes les plus lentes (12x plus lent). 