web-dev-qa-db-fra.com

Pourquoi HTML / JavaScript / CSS ne sont pas des langages compilés et le seront-ils jamais?

Pourquoi HTML/JavaScript/CSS ne deviennent pas des langues compilées (ou peut-être même fusionnent en une seule langue compilée)? Et si les navigateurs exécutaient "Browser Virtual Machine" et que les sources html/javascript/css pouvaient être compilées en "navigateur bytecode". Cela n'aiderait-il pas beaucoup les développeurs et les utilisateurs?

Je peux voir quelques défis:

  1. Que faire des millions de pages existantes? Rendez cette compilation facultative, donc si vous le souhaitez, vous pouvez utiliser du vieux HTML simple. Si vous souhaitez alimenter un navigateur avec une page compilée, utilisez simplement .chtml par exemple.

  2. Comment les moteurs de recherche indexeraient-ils les pages? Créez un décompilateur qui décompilerait le bytecode en sources originales exactes (par exemple, comme flash peut être décompilé). Ou les fournisseurs de recherche peuvent utiliser la même machine virtuelle et obtenir les données dont ils ont besoin à partir de là.

  3. Comment le rendre compatible avec tous les navigateurs? Avoir un développeur centralisé (disons w3c) pour développer cette machine virtuelle, puis chaque navigateur l'intégrera.

Mais qu'en est-il des avantages:

  1. La vitesse.
  2. Taille.
  3. Plus de HTML "lâche" et "semi-correct". Il est correct ou ne se compile pas.
  4. La même apparence dans tous les navigateurs (pris en charge).

Si ce n'est pas un bytecode, alors au moins une compression native est en cours, le html n'est probablement pas le moyen le plus efficace de stockage de données. Je sais qu'il y a gzip mais pourquoi compresser des pages à chaque fois sur un serveur et décompresser dans un navigateur si nous pouvons le compresser une fois et le nourrir dans un navigateur?

Alors, qu'est-ce qui nous empêche de prendre cette route (enfin, en plus d'un énorme effort pour que tout se passe)?

40
serg

Ah, mais Javascript IS devient une langue compilée. Découvrez Firefox 3.5 avec TraceMonkey . C'est incroyablement rapide comparé au navigateur de vous savez qui. Il est vrai que JS ne sera jamais C, mais c'est un langage beaucoup plus dynamique que C, et à bien des égards, il est plus expressif et puissant.

En ce qui concerne le HTML, je ne pense pas que le manque de validité du HTML soit un énorme préjudice à la vitesse. Je pense que les moteurs qui assemblent la représentation visuelle et manipulent le DOM doivent être beaucoup mieux (euh, IE, je regarde dans votre direction générale ...). La conformité CSS doit s'améliorer et le CSS lui-même doit devenir plus puissant. (Montez dans le bus avec CSS 3 personnes!)

Mais je pense que la vitesse va s'améliorer sur Firefox et Chrome à tel point que les gens vont vraiment commencer à l'utiliser pour le développement d'applications grand public. C'est drôle. Adobe semble vendre Flash comme plate-forme pour le contenu Web dynamique, MSFT vend Silverlight pour le contenu Web dynamique, et Google veut juste vraiment améliorer HTML et Javascript pour afficher le contenu Web dynamique. Et Google s'en sort plutôt bien jusqu'à présent, je dois dire ...

19
Dave Markle

Puisque HTML et CSS ne sont pas du code, ils ne peuvent pas être compilés. Le moteur V8 de Google Chrome convertit en fait JS en code octet, attendez-vous à ce que d'autres moteurs de rendu emboîtent le pas!

http://code.google.com/apis/v8/design.html

Nous avons récemment retravaillé un système de modèles php que j'ai aidé à créer pour utiliser minify pour compresser plusieurs JS et CSS en un seul fichier, en voyant nos tailles de fichiers chuter à environ 20% des tailles combinées d'origine. Minify fait également du gzip et de la mise en cache, donc c'est vraiment incroyable pour accélérer les sites Web.

http://code.google.com/p/minify/

En bref, vous ne pouvez pas compiler de non-code, qui sont HTML et CSS. JS peut être compilé et commence à l'être, mais tout dépend de ce que les navigateurs ont envie de faire.

Les navigateurs doivent simplement être sur la balle en ce qui concerne la prise en charge des normes Web. Plus les navigateurs le font, moins les développeurs Web ont de maux de tête. J'étais assez satisfait de la baisse de support très publique de YouTube pour IE6. Nous avons besoin de plus d'actions comme celle-ci pour que le Web progresse.

4
Simon

Vos idées sont valables lorsqu'elles sont appliquées à JavaScript. Comme d'autres l'ont noté, à un degré ou à un autre, plusieurs fournisseurs tentent d'appliquer ces principes à JS même maintenant. Une autre grande étape dans ce domaine sera probablement le Chrome OS Google a annoncé. Cependant, en ce qui concerne (X) HTML et CSS, je pense que vos idées peuvent manquer le point.

Le World Wide Web n'est pas une plate-forme d'application boguée et incohérente mais une collection massive et sans précédent de documents interconnectés. La puissance du Web réside dans l'abstraction des données des dispositions visuelles souvent rigides (et cassables) et des fonctionnalités de page de plus en plus complexes largement fournies via JavaScript. L'encodage de ces pages en (X) HTML est idéal pour les rendre accessibles au plus large public possible tant en termes de navigateurs qu'en termes de connaissances techniques nécessaires à la création d'une page.

De plus en plus, le Web est utilisé comme plate-forme d'application - ce qui est une utilisation puissante et passionnante de cette technologie - mais nous ne pouvons pas perdre de vue que ces applications "Web 2.0" basées sur Ajax ne sont que des documents avec des fonctionnalités étendues. La compilation n'a pas de sens pour un document et la compression est déjà en cours (via gzip et autres).

Sur une note plus pratique, le W3C évolue au rythme d'un glacier et les fournisseurs de navigateurs alternent entre les fonctionnalités expérimentales de prise en charge des spécifications inachevées et le temps passé à prendre en charge d'autres spécifications qui sont sur la table et d'usage courant depuis des années. . L'ensemble du processus est comme l'élevage de chats. Je ne retiendrais pas mon souffle pour qu'ils fassent le genre de changements radicaux que vous proposez de si tôt.

4
Josh Thaxton

Le moteur javascript V8 (également intégré à Google Chrome, mais il est open-source et sous licence généreuse, vous pouvez donc l'utiliser dans le prochain navigateur que vous écrivez!) Compile Javascript en code machine natif - - bien sûr, il le fait "juste à temps" (comme la plupart des compilateurs modernes - Java, C #, etc!), pas "à l'avance" (comme Fortran l'a fait en 1954 lorsque les ordinateurs étaient tout simplement trop faibles pour gérer la compilation dans le en cours d'exécution). Je serais surpris si d'autres bons moteurs JS, comme ceux des tout derniers Firefox et Safari, ne faisaient pas de même.

On dirait que vous ne préconisez pas "javascript comme langage compilé" (car il est déjà évident IS compilé, si vous utilisez un bon moteur JS), mais plutôt "à l'avance" "Compilation pour cela (juste au moment où la plupart des langages modernes abandonnent essentiellement la compilation anticipée). Pousser le code machine plutôt que le code compilable dans le fil sonne comme une idée généralement horrible - taille beaucoup plus grande, difficultés à supporter un CPU contre un autre , cauchemars de sécurité pour le sandboxer correctement, etc, etc) avec peu de bénéfices compensatoires.

Cela dit, si vous voulez vraiment pousser le code machine vers le client, essayez nativeclient (tant que le client est une machine x86 - oubliez tous les téléphones intelligents de la planète, de nombreux netbooks, bon vieux macs, etc.) - au moins, il promet une solution aux cauchemars de sécurité. Si et quand vous êtes satisfait de nativeclient, transformer un compilateur juste à temps en un compilateur d'avance est un défi technique beaucoup plus facile (si vous voulez continuer à utiliser Javascript pour les sources plutôt que d'autres langues, bien sûr ).

2
Alex Martelli

Voir ici pour une discussion précédente sur la question

Toutes les raisons invoquées ne sont pas nécessairement valables, mais l'une des plus importantes est que, à moins que vous ne soyez Google, les cycles CPU côté serveur sont beaucoup plus précieux que les cycles côté client: il est donc plus facile pour le client de compiler/optimiser ce que est assez souvent généré dynamiquement HTML/JavaScript, plutôt que le serveur.

Ken

1
Ken Smith

La vitesse.

Vous supposez que l'analyse HTML prend beaucoup de temps. Cependant, il se peut que ce temps soit insignifiant par rapport au temps requis pour autre chose, par ex. le temps nécessaire à la mise en page du texte dans la fenêtre de l'utilisateur final.

Plus de HTML "lâche" et "semi-correct". Il est correct ou ne se compile pas.

Vous obtenez déjà cela, en utilisant [X] HTML.

La même apparence dans tous les navigateurs (pris en charge).

Vous semblez dire qu'il ne devrait y avoir qu'un seul navigateur ou que tous les navigateurs le prendraient également en charge.

Les normes Internet ne se produisent pas en ayant un seul corps (le w3c) implémentant quelque chose et en le déclarant standard. Au lieu de cela, les normes Internet se produisent lorsque plusieurs organismes indépendants créent plusieurs implémentations. Une conséquence est:

  • Certaines personnes ont développé quelque chose qui n'est pas encore standard (c'est-à-dire qu'elles sont en avance sur la norme)
  • Certaines personnes n'ont pas encore développé quelque chose de standard (c'est-à-dire qu'elles sont en retard par rapport à la norme)
1
ChrisW

Je pense que votre idée est bonne, mais il n'y a toujours aucun moyen d'appliquer une norme. Ainsi, s'il y avait une fonctionnalité non prise en charge, il y a de fortes chances que la page entière n'affiche tout simplement rien. Dans la configuration actuelle, les informations critiques peuvent toujours être transmises.

0
Alex S

Google V8 , qui est l'un des nombreux moteurs javascript de nouvelle génération "compile" javascript en pseudocode, un peu comme .NET "compile" c # à la volée. Rien de magique ici. Attendez-vous à plus de celui-ci esp. alors que les webapps deviennent plus lourdes et plus exigeantes

0
Scott Evernden

HTML

HTML est à peu près XML. La DTD existe pour différentes versions et les développeurs peuvent vérifier cela à tout moment.

CSS

CSS n'est pas un langage de programmation, mais je suis d'accord pour dire que le CSS "compilé" pourrait fonctionner car la compilation le comprimerait. Cependant, avec le support de CSS et avec le nombre de hacks essentiels dont tout CSS a besoin, vous n'arriveriez jamais à le compiler sans erreurs.

JS

Comme d'autres l'ont mentionné, JS IS devient un langage compilé sauf que le navigateur le compile pour vous et non pour vous-même.

0
Darko Z