|
| 1 | +# Le javascript est une syntaxe |
| 2 | + |
| 3 | +## neolectron — 29/05/2019 : |
| 4 | + |
| 5 | +**le javascript est une syntaxe** (a prendre avec des pincettes - lisez bien) |
| 6 | + |
| 7 | +Le js n'a **pas** de stdlib qui permet de lire des fichiers, ça ne peut pas non plus manipuler du html, ni envoyer des requêtes réseau. |
| 8 | + |
| 9 | +**le js n'a pas d'io** |
| 10 | + |
| 11 | +le js ça peut rien faire.. c'est **purement algorithmique**. |
| 12 | + |
| 13 | +ça contient que des while, des if des for. |
| 14 | +ça contient quelques types a la con (primitifs ou non), genre Number Array Object Date etc... |
| 15 | +donc on peut RIEN faire en javascript. surtout que ... ça n'a pas interpréteur officiel. |
| 16 | + |
| 17 | +donc le js c'est juste une norme, en gros c'est un bout de papier qui dit "quand on tape ça , ça doit faire ça" |
| 18 | +(papier rédigé par la société ECMA qui gère aussi la norme du C# btw) |
| 19 | +tu peux run du js nulle part par defaut. le programme qui run du js n'existe pas... |
| 20 | + |
| 21 | +-- |
| 22 | + |
| 23 | +donc comment ça marche ? |
| 24 | + |
| 25 | +-- |
| 26 | + |
| 27 | +les navigateurs ont du implémenter chacun pour leur gueule, un programme qui parse le js, et qui exécute les bonnes instructions en conséquence. |
| 28 | + |
| 29 | +donc ils ont crée des interpréteurs js, qui parse du js et run des trucs en C ou ASM en backend finalement. |
| 30 | + |
| 31 | +sachant que les navigateurs faisaient plus ou moins ce qu'ils voulaient a l'époque, personne vérifiait réellement si tout était normalisé. |
| 32 | + |
| 33 | +donc certains implémentaient des trucs que d'autres n'avaient pas et vice versa. |
| 34 | +le seul truc qu'ils avaient en commun, c'est qu'ils devaient injecter dans le langage, des fonctions pour manipuler le HTML sinon ça servirait a rien. |
| 35 | +(encore une fois chacun a leur sauce) |
| 36 | + |
| 37 | +-- |
| 38 | + |
| 39 | +suite ça on en arrive en 2000, quand les devs en ont eu marre que tout les navigateurs implémentaient leur merde a leur sauce, |
| 40 | + |
| 41 | +donc ils ont fait une lib super-lourde qui fait des if, pour savoir quelle api appeler en fonction des navigateurs. |
| 42 | + |
| 43 | +cette lib c'est jQuery. ça sert QUE a faire des if pour voir si le navigateur implémente ou non la feature que tu veux utiliser. |
| 44 | + |
| 45 | +-- |
| 46 | + |
| 47 | +aujourd'hui la plupart des navigateurs suivent a la lettre les normes ECMA, et le support a bien progressé. |
| 48 | +(du coup si tu veux pas de support de vieux browser jQuery ne sert qu'a avoir des perfs pourries sur ton site.) |
| 49 | + |
| 50 | +-- |
| 51 | + |
| 52 | +ducoup on en était là. on a une syntaxe un peu universelle qui run sur différents interpréteurs. |
| 53 | + |
| 54 | +c'est la guerre des navigateurs , tout le monde s'y met, microsoft/mozilla/apple/google, |
| 55 | + |
| 56 | +spoil: google a gagné. |
| 57 | + |
| 58 | +pourquoi ? => leur navigateur est plus rapide. |
| 59 | +pourquoi ? => leur moteur js est plus rapide. |
| 60 | + |
| 61 | +-- |
| 62 | + |
| 63 | +donc finallement la guerre des navigateurs c'était une guerre des engine JS. |
| 64 | + |
| 65 | +-- |
| 66 | + |
| 67 | +là certains mecs qui aimaient bien la syntaxe du js se sont dit que ça serait chouette d'en faire un langage, et d'avoir une stdlib, |
| 68 | + |
| 69 | +pour lire des fichiers ou même envoyer des requêtes réseau.. ce genre de trucs qui permettraient de faire du js un vrai langage. |
| 70 | + |
| 71 | +Ces mecs, s'appelle la team node (meme si c'était ptet pas les premier a avoir eu l'idée). |
| 72 | + |
| 73 | +Ils ont codé une api en C++ qui permet d'ouvrir/lire/écrire dans des fichiers, faire des requêtes etc etc. |
| 74 | + |
| 75 | +Ils l'ont juste injecté dans le moteur javascript de google (celui qui est dans chrome [le v8 de son pti nom]) et voilà. |
| 76 | +On a un moteur js codé par google qui a une stdlib dedans qui peut faire autant de choses que d'autres langages :) |
| 77 | +et ça c'est node-js. |
| 78 | + |
| 79 | +-- |
| 80 | + |
| 81 | +pour dive un peu plus dans node : |
| 82 | +la team node a décidé de faire un language avec des io non-bloquantes. |
| 83 | +ce que ça veut dire, c'est que chaque io (des operations sur fichier / network / autres) serait asynchrone. |
| 84 | + |
| 85 | +en gros ça fonctionne avec une file d'attente, par ex : |
| 86 | + |
| 87 | +1- tu fais ta demande de request réseau. |
| 88 | + |
| 89 | +2- node enregistre une fonction nommée callback, qui sera déclenchée a la fin de ta request. |
| 90 | + |
| 91 | +2- tout le reste de ton code continue de s'exécuter même si cette request est pas finie (oui c'est ça l'async) |
| 92 | + |
| 93 | +3- quand la reponse a ta request réseau revient dans l'engine node, ils appellent ton callback en lui filant en paramètre la réponse. |
| 94 | + |
| 95 | +4- le code dans ta fonction de callback s'exécute. |
| 96 | + |
| 97 | +voilà ce que c'est node. |
| 98 | + |
| 99 | +(le schéma de base qui aide pas mal a se représenter le runtime) |
| 100 | + |
| 101 | + |
0 commit comments