Depuis que Mozilla et Google ont sortis des moteurs Javascript très performants ont voit sortir de plus en plus de petits projets visant à implémenter le Javascript côté serveur. Traditionnellement, dans le cadre de développement web, ont est plus habitué à rencontrer du PHP, Python, Ruby, Java ou autre...
Aujourd'hui, Spidermonkey/TraceMonkey et Google V8 sont facilement embarquable dans un programme écrit en C/C++. Il devient alors possible d'exposer des fonctions en Javascript depuis du C/C++. Ce qui permet d'étendre et d'ajouter de nouvelles fonctionnalités.
Site officiel de Google V8 : http://code.google.com/p/v8/
Tracemonkey : https://wiki.mozilla.org/JavaScript:TraceMonkey
Il existe également le projet Rhino de Mozilla qui est une implémentation de Javascript en Java. Cependant Rhino n'a pas pour but d'être aussi performant que les solutions présentés ci-dessus.
Page officiel du projet Rhino : http://www.mozilla.org/rhino/
De plus Mozilla s'intéresse à ce sujet car il tente de normaliser les implémentations Javascript côté serveur en établissant des recommandations connues initialement sous le nom de ServerJS aujourd'hui appelé CommonJS. Ces recommandations sont définies en concertations avec les personnes présentes sur la Mailing-list du projet.
Page officiel de CommonJS : http://wiki.commonjs.org/wiki/CommonJS
Par exemple, "SecurableModule" fut la première recommandation ratifiée. Celle-ci vise à normaliser le chargement de modules externes depuis du code en Javascript. Plus d'informations par ici : http://wiki.commonjs.org/wiki/Modules/SecurableModules
Désormais le projet vise à normaliser une API commune pour toutes les implémentations. Par la force des choses on risque de se retrouver avec quelque chose d'aussi puissant et extensible que du PHP/Python/Ruby.... mais en Javascript.
Voici quelques implémentations de Javascript côté serveur, celles-ci sont ne sont pas forcément compatible avec CommonJS car se sont des projets qui ont bien souvent débutés avant cela. De plus certains projets visent à rendre le Javascript comme un langage à tout faire en y exposant un maximum de bibliothèques existantes.
nodejs : http://tinyclouds.org/node/
L'un des projets les plus prometteur je pense, il utilise le moteur Google V8 et il est codé en C++. Mais son gros point fort est qu'il est pensé pour fonctionner de manière totalement asynchrone. C'est à dire que toutes les entrées/sorties sont gérées de manières asynchrone ce qui colle bien au Javascript avec les closures et callbacks. Histoire de ne pas réinventer la roue le projet utilise les librairies libev et libeio.
Mais le point qui devient intéressant se sont les benchmarks ! Les performances atteintes par nodejs sont du même ordre que thin/EventMachine du monde Ruby. Ce qui est pas si mal.
Le benchmark : http://four.livejournal.com/1019177.html
A noter que nodejs utilise sont propre serveur HTTP et non pas un système de CGI ou FastCGI couplé avec un autre serveur HTTP.
De plus le développeur a commencé à concevoir un système de module que l'on peut charger dynamiquement. Le premier module permet d'interagir avec Postgresql de manière asynchrone.
Certains ont même commencé à concevoir des frameworks au-dessus de nodejs.
Bref affaire à suivre.
v8cgi : http://code.google.com/p/v8cgi/
Comme son nom l'indique le but ici est d'utiliser le Javascript comme CGI ou bien en tant que module Apache. Il utilise le moteur de Google et il est codé en C++. Il expose plusieurs librairies comme GD, Mysql, SQlite etc...
Son principe de fonctionnement est similaire à PHP, un système de base et des modules externes écrits en C/C++. Malheureusement, CGI ou module Apache ne permettent pas d'obtenir de bonnes performances face à des solutions comme nodejs.
Pour moi ce projet ne fait que répéter l'existant et n'apporte pas de réelle innovation.
Helma NG : http://helma.org/wiki/Helma+NG/
Projet développé en Java et utilisant Rhino de Mozilla. Je n'ai pas vraiment suivi ce projet car le Java ne m'intéresse peu. Cependant Helma vise à implémenter une solution côté serveur complète en y apportant un ensemble de module et même un framework.
Sans l'avoir testé son principal défaut, est à mon avis, les faibles performances notamment à cause de Rhino. (cf. benchmark de nodejs avec narwhal qui utilise Rhino comme backend).
flussperfd : http://redmine.flusspferd.org/projects/show/flusspferd
Ce projet est plutôt généraliste il a pour but de faciliter le développement de modules. Il est basé cette fois sur Spidermonkey. Bon j'ai pas vraiment testé...
jslibs : http://code.google.com/p/jslibs/
Le but ici est clairement de faire de Javascript un langage généraliste. Basé sur Spidermonkey, il propose plusieurs modules qui expose des librairies connues telles que libpng, libjpeg, libvorbis, sqlite etc... Plusieurs exemples de code sont donnés sur la page d'accueil, on voit qu'il est possible de lire un fichier audio ou de capturer les images d'une webcam en quelques lignes de Javascript. Apparement le développement du projet est plutôt orienté sur des plateformes Windows.
Conclusion
Bon il existe des dizaines de projets différents, impossible de tous les présenter. Mais ils ont tous un but commun, utiliser le Javascript comme un langage généraliste.
Alors quels avantages par rapport aux solutions existantes comme Python ou Ruby ?
Dans le cadre de développement d'applications web (que je différencie de site web) on peut imaginer un partage de code entre le serveur et le client. C'est ce que fait par exemple Jaxer développé par Aptana ( http://jaxer.org/ ).
On peut aussi penser que dans une application web qui utilise de manière intensive le Javascript côté client, utiliser du Javascript côté serveur peut simplifier les choses. On utilise un seul langage des 2 côtés, le ou les développeurs web n'a plus qu'a connaître un seul langage.
Le Javascript est normalisé par l'ECMA, développer avec langage de base standardisé est peut-être un gage de pérennité dans le temps pour son application ?
Pour beaucoup de gens Javascript est un langage de seconde classe cantonné au navigateur web. Mais aujourd'hui on possède des moteurs Javascript libre très performants, qui peuvent selon moi tout à fait concurrencer du Python/PHP/Ruby. En utilisant des serveurs applicatifs avec des I/O asynchrones on peut atteindre de très bonnes performances et une bonne montée en charge (scalable). Après tout se sont ces techniques qui sont utilisés par nginx/lighttpd/haproxy.
Alors vous en pensez quoi de Javascript côté serveur ? intéressant ou pas ? Une chance face à Python/Ruby/PHP5 ?
# haxe
Posté par Antoine . Évalué à 5.
http://haxe.org/
[^] # Re: haxe
Posté par Frédéric . Évalué à 2.
A voir si ça vaut le coup.
[^] # Re: haxe
Posté par Antoine . Évalué à 4.
[^] # Re: haxe
Posté par blackshack . Évalué à 1.
Et pour information, c'est le créateur de mtasc (compilateur libre d'AS2, plus stricte que ne l'était le compilateur officiel de feu Macromedia, et pondant un bytecode plus véloce) qui est aussi le créateur de Haxe (et consort, c'est à dire Neko/NekoVM, ....)
Et autre petite information, les différents jeux MotionTwin (www.motion-twin.com) sont basés dessus.
[^] # Re: haxe
Posté par CrEv (site web personnel) . Évalué à 4.
Ha bon ?
Etrange, car j'ai juste l'impression de faire de l'orienté objet tous les jours en javascript...
Attention à ne pas confondre langage orienté objet et langage à classes.
Le javascript (l'ecmascript) est un langage à prototype et non un langage à class, mais ça n'enlève pas le côté objet.
As3 permet de créer des classes, interfaces, etc mais si je ne me trompe c'est tout de même traduit en prototype par derrière.
[^] # Re: haxe
Posté par blackshack . Évalué à 1.
[^] # Re: haxe
Posté par tfeserver tfe (site web personnel) . Évalué à -7.
Python / Ruby / PHP5 c'est bien beau mais c'est dépassé!
# Un bout de temps que c'est utilisé !!! [NON LIBRE]
Posté par Clément David (site web personnel) . Évalué à 3.
Opera utilise ainsi une technologie qui leur permet d'évaluer la page web coté serveur et transmet la page résultant sous forme binaire appelée OBML [http://dev.opera.com/articles/view/opera-binary-markup-langu(...)]. L'avantage de cette solution à l'avantage de consommer très peu de bande passante et de diminuer le calcul coté client.
Implémenté dans la version 5 du navigateur Opera Mini, le support du javascript coté serveur est assez impressionnant [http://dev.opera.com/articles/view/opera-mini-5-beta-develop(...)]. En effet celui-ci permet de naviguer sur facebook, twitter, etc...
Peut-être cette technique va-t-elle se répandre dans l'avenir ? (à vos réflexions)
[^] # Re: Un bout de temps que c'est utilisé !!! [NON LIBRE]
Posté par Frédéric . Évalué à 1.
http://en.wikipedia.org/wiki/Server-side_JavaScript
Après il me semble que Opera l'utilise également pour son truc Opera Unite.
[^] # Une approche très prometteuse
Posté par Amine Mokhtari . Évalué à 2.
Pour le reste, l'approche utilisée par Opera Mini, me semble très prometteuse. Elle permet d'éviter beaucoup de problèmes (de sécurité notamment) dès le départ. Sans compter les autres avantages qu'elle véhicule et que tu as cité.
indéniablement, cela donne un avantage incontestable au JS par rapport aux autres langages PHP et compagnies.
Cela simplifiera énormément les usines à gaze qui servent actuellement d'application Web+ serveur Web. En terme d'architecture cela se simplifiera grandement.
[^] # Re: Un bout de temps que c'est utilisé !!! [NON LIBRE]
Posté par Moogle . Évalué à 3.
[^] # Re: Un bout de temps que c'est utilisé !!! [NON LIBRE]
Posté par BohwaZ (site web personnel, Mastodon) . Évalué à 6.
Leur FAQ est très claire à ce sujet :
Est-ce qu'Opera Software peut voir, en clair, mes mots de passe et numéro de carte de crédit ? De quel chiffrement profitent ces données ?
Le chiffrement utilisé a pour but de protéger la communication d'une intrusion entre le client (le navigateur sur le mobile) et le serveur/convertisseur d'Opera Mini. Si vous n'avez pas confiance en Opera Software, assurez-vous de ne pas utiliser nos applications pour communiquer toutes sortes d'informations sensibles.
« Je vois bien à quels excès peut conduire une démocratie d'opinion débridée, je le vis tous les jours. » (Nicolas Sarkozy)
[^] # Re: Un bout de temps que c'est utilisé !!! [NON LIBRE]
Posté par BohwaZ (site web personnel, Mastodon) . Évalué à 2.
« Je vois bien à quels excès peut conduire une démocratie d'opinion débridée, je le vis tous les jours. » (Nicolas Sarkozy)
# Ce que j'en pense...
Posté par neriki (site web personnel) . Évalué à 5.
Visiblement, même en arrivant après, Python, Ruby et PHP ont eu plus de chances. :D
[^] # Re: Ce que j'en pense...
Posté par Frédéric . Évalué à 4.
[^] # Re: Ce que j'en pense...
Posté par franck villaume (site web personnel) . Évalué à 3.
[^] # Re: Ce que j'en pense...
Posté par fredoche . Évalué à 2.
A ceux qui disent "détester le javascript", je leur conseille de regarder les vidéos de Douglas Crockford; ils comprendront que les défauts qu'ils trouvent à Javascript sont en fait liés à l'environnement du navigateur, le DOM, ou le BOM, qui sont franchement hostiles. Le langage en lui même est plutôt agréable à manipuler, via la notion d'objet/hashmap, les regexp intégrées, les lambdas/closures...
[^] # Re: Ce que j'en pense...
Posté par Antoine . Évalué à 3.
Le modèle objet un peu foutraque ne donne pas non plus du code très lisible.
[^] # Re: Ce que j'en pense...
Posté par gazbhan . Évalué à 1.
http://www.sitepen.com/blog/2009/06/23/unobtrusive-javascrip(...)
D'ailleurs, une initiative a rajouter à la liste est le projet persevere de la meme société: avoir des bases de données en .... JavaScript !
http://sitepen.com/labs/persevere.php
[^] # Re: Ce que j'en pense...
Posté par Antoine . Évalué à 2.
http://www.sitepen.com/blog/2009/06/23/unobtrusive-javascrip(...)
Mignon mais ça ne remédie pas à la conversion implicite des types de base etc.
Ça convertit Javascript en une sorte de langage à typage statique faible, avec des vérifications aux interfaces définies par l'utilisateur mais pas à l'intérieur des implémentations.
# Pas con...
Posté par Snarky . Évalué à 1.
[^] # Re: Pas con...
Posté par _mad_ . Évalué à 1.
[^] # Re: Pas con...
Posté par Brioche4012 (site web personnel) . Évalué à 2.
[^] # Re: Pas con...
Posté par blackshack . Évalué à 1.
# Bof
Posté par alice . Évalué à 7.
[^] # Re: Bof
Posté par suJeSelS . Évalué à 1.
[^] # Re: Bof
Posté par alice . Évalué à 1.
[^] # Re: Bof
Posté par Sebastien (site web personnel) . Évalué à 2.
[^] # Re: Bof
Posté par Moogle . Évalué à 1.
[^] # Re: Bof
Posté par yellowiscool . Évalué à 1.
Même plus que le ruby pour certaines choses. Le problème, c'est plus les api des navigateurs. Mais le langage en lui même a vraiment des bonnes idées.
Bon, il a aussi des trucs nuls comme pas de valeurs par défaut pour les paramètres d'une fonction.
Envoyé depuis mon lapin.
# CouchDB
Posté par nicolas_o . Évalué à 2.
Les applications lourdes en javascript ont de plus en plus tendance à générer leur HTML à partir de données encodées en JSON (http://www.json.org/ ). Plutôt que de générer ce json côté serveur à partir de la base de données, l'idée est de stocker directement ces données en JSON, et de les accéder avec un moteur puissant et distribué écrit (partiellement) en Erlang (http://www.erlang.org/ ).
Les requêtes base de données sont écrites en javascript en suivant le principe MapReduce(http://labs.google.com/papers/mapreduce.html ). Cela représente un peu plus de travail en perspective que les requêtes bases de données abstraites habituellement par un framework Web comme Rails ou Django, mais au moins, le développeur n'a pas l'impression de confier une partie critique de son appli web à un blob SQL dont il ne maîtrise (habituellement) pas tous les rouages. Et puis, si l'application est populaire, les problèmes de montée en charge reviennent à la face du développeur qui doit optimiser ses accès base de données de toute façon.
L'inconvénient majeur par rapport à SQL est que, si le système est distribué, le contenu de la base n'est pas cohérent : en parlant à deux serveurs différents, on peut avoir deux versions chronologiquement décalées du même objet. Mais le problème n'est pas si important dans l'univers des applis web (les données à jour apparaîtront au prochain rechargement). Et CouchDB gère les conflits.
Il est donc possible, avec un moteur de Javascript serveur et CouchDB, d'avoir un framework web qui génère en Javascript la page lors du chargement initial. Puis lorsque l'utilisateur interagit avec le site, le visuel est regénéré côté client, en utilisant les mêmes fonctions, et le client interagit directement en échangeant du JSON avec l'interface REST de CouchDB (http://en.wikipedia.org/wiki/Representational_State_Transfer ) plutot qu'avec le framework.
Bref, je vous encourage à l'essayer. Un peu jeune pour être en production mais c'est tellement plus naturel que du SQL :)
[^] # Re: CouchDB - J'ose!
Posté par Brioche4012 (site web personnel) . Évalué à 9.
OH OUI! Plus fort!!!!!
[^] # Re: CouchDB
Posté par yellowiscool . Évalué à 7.
Je n'ose imaginer une base de donnée de taille normale (prenons linuxfr) en json.
Il m'arrive de stocker trois trucs dans du json, mais de là à en faire le format de stockage d'une base de donnée, faut vraiment avoir des xeons à n'en plus finir, et ne pas être écolo.
Envoyé depuis mon lapin.
[^] # Re: CouchDB
Posté par Antoine . Évalué à 2.
Et pour les jointures, les requêtes imbriquées etc., ça reste "naturel" ? :)
# Witty
Posté par Nicolas Charlery (site web personnel) . Évalué à 1.
http://www.webtoolkit.eu/wt
http://www.webtoolkit.eu/widgets#/
En plus de proposer une façon de programmer similaire à QT, on peut également developper avec du Java et du Ruby.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.