Maison  >  Article  >  interface Web  >  En plus du fait que l'asynchrone est 10 fois plus rapide, qu'apporte JavaScript d'autre ?

En plus du fait que l'asynchrone est 10 fois plus rapide, qu'apporte JavaScript d'autre ?

青灯夜游
青灯夜游avant
2020-06-28 13:51:082303parcourir

Le JavaScript d'aujourd'hui est omniprésent. En utilisant JavaScript de manière traditionnelle, les développeurs peuvent créer des applications Web dans divers navigateurs Web ; via Node.js, ils peuvent développer des outils de ligne de commande et des applications serveur et dans le domaine du bureau, sur plusieurs plates-formes ; les applications de bureau peuvent être créées via le framework Electron basé sur JavaScript et les technologies Web telles que HTML et CSS ; React Native peut être utilisé pour développer des applications mobiles multiplateformes et JavaScript peut même s'exécuter sur des appareils IoT ;

Ecma TC39 gère le développement de l'écosystème ECMAScript. Il s'agit du standard derrière le langage JavaScript actuel. L'équipe Google V8 a participé activement aux travaux de normalisation liés à JavaScript.

V8 est le moteur JavaScript open source de Google (également un moteur WebAssembly). Les plates-formes telles que Chrome, Node.js et Electron sont toutes basées sur la V8. Dans le même temps, outre Chrome, une série de navigateurs Web basés sur Chromium, comme Opera et le prochain Microsoft Edge, sont également basés sur la V8 en bas.

Apprentissage recommandé : "Tutoriel vidéo JavaScript"

Lors de Google I/O 2019 il y a quelques jours, Mathias Bynens de l'équipe V8 et Sathya Gunasekaran a partagé les derniers progrès de développement en JavaScript.

En plus du fait que lasynchrone est 10 fois plus rapide, quapporte JavaScript dautre ?
L'équipe V8 a déclaré que sa mission est de diriger les hautes performances du JavaScript et du WebAssembly modernes. Il convient de noter que le partageur a utilisé le « monde réel » pour décrire les performances et a introduit le. Les soi-disant « performances du monde réel » sont opposées aux performances qui sont uniquement destinées aux données de référence. Google souligne que ce qu'il souhaite atteindre, c'est qu'il puisse réellement atteindre des performances élevées dans la vie réelle, plutôt que d'être si « hors de -le-monde".

Ils ont donné plusieurs exemples. Depuis Chrome 61, l'équipe V8 a doublé la vitesse d'analyse JavaScript brute et ces données sont testées sur de vrais sites Web. Dans le même temps, ils ont réussi à supprimer 40 % du travail d’analyse et de compilation du thread principal, rendant ainsi le démarrage des pages Web plus fluide.

En plus du fait que lasynchrone est 10 fois plus rapide, quapporte JavaScript dautre ?

En plus de Chrome, des améliorations de vitesse sont également évidentes dans Node.js. Par rapport à Node.js 7, Node.js 12 a la vitesse asynchrone augmentée de 10. Times, Promise.all est 12 fois plus rapide.

En plus du fait que lasynchrone est 10 fois plus rapide, quapporte JavaScript dautre ?

En plus de l'amélioration de la vitesse d'analyse et des performances d'exécution, l'utilisation de la mémoire a également été réduite de Chrome 70 à Chrome 76, la consommation de mémoire liée à l'exécution d'applications Web réelles. sur Android a été réduit de 20 %.

En plus du fait que lasynchrone est 10 fois plus rapide, quapporte JavaScript dautre ?

L'orateur a ensuite partagé quelques nouvelles fonctionnalités de JavaScript, couvrant une grande partie du contenu. Voici une brève introduction à certaines des fonctionnalités les plus intéressantes :

Utiliser l'API d'affichage familier en dialecte des expressions temporelles

Il s'agit de l'une des nombreuses nouvelles API d'Intl.*, et c'est également une fonctionnalité qui a été davantage discutée par le public d'Intl.*. fait référence à la fonctionnalité d'internationalisation.

Lorsque nous faisons référence au temps dans notre vie quotidienne, nous utilisons des expressions familières telles que "la semaine dernière", "le mois dernier" et "il y a 42 secondes". En utilisant la nouvelle fonction Intl.RelativeTimeFormat(), le programme. peut utiliser des expressions spécifiques. Le langage renvoie ces phrases au lieu des phrases « il y a une semaine », « il y a un mois » et « il y a 42 secondes ».

L'orateur a démontré cette fonctionnalité en anglais et en tamoul, et l'effet est le suivant :

En plus du fait que lasynchrone est 10 fois plus rapide, quapporte JavaScript dautre ?

En plus du fait que lasynchrone est 10 fois plus rapide, quapporte JavaScript dautre ?

Actuellement, cette fonctionnalité est pris en charge Représentation d'expressions de secondes, minutes, heures, jours, semaines, mois et saisons, et prise en charge de plusieurs langues (je ne sais pas si la prise en charge du chinois est disponible), les développeurs n'ont plus besoin de maintenir une liste dédiée d'expressions temporelles relatives.

globalThis

Si vous souhaitez écrire du JavaScript pour différentes plateformes, qu'il s'agisse de Node.js ou d'un navigateur Web, vous devez disposer du code correspondant pour vous adapter au situation globale." this", comme un navigateur Web, vous devez utiliser "window" pour juger, mais lorsque "window" n'est pas disponible, vous devez également utiliser "self" pour vérifier Dans Node, vous pouvez utiliser ". global" pour en juger, mais s'il s'agit d'un environnement shell JavaScript indépendant, la situation a encore changé.

En plus du fait que lasynchrone est 10 fois plus rapide, quapporte JavaScript dautre ?

Les facteurs environnementaux sont très complexes et divers environnements de plate-forme nécessitent des processus d'adaptation compliqués, ce qui sera très pénible pour les développeurs, c'est pourquoi l'équipe V8 a ajouté une fonctionnalité " globalThis ", qui peut facilement accéder au « ceci » global sans compter sur l'environnement.

Actuellement, Chrome, FireFox, Safari et Node.js prennent tous en charge cette fonctionnalité. Elle est également applicable à polyfill et à d'autres bibliothèques qui nécessitent un accès global à « ceci ». De ce point de vue, cette fonctionnalité constitue une amélioration relativement importante.

WeakRef

Habituellement, la référence d'objet en JavaScript signifie que tant que l'objet est référencé, il ne sera pas GC en référence faible, si d'autres objets le sont. l'objet n'est plus référencé, le mécanisme GC récupérera automatiquement la mémoire occupée par l'objet, que l'objet soit toujours ou non dans la structure référencée.

Actuellement, il existe deux méthodes de référence faibles en JavaScript : WeakMap et WeakSet. Tant qu'un objet est ajouté à WeakMap ou WeakSet, le GC peut récupérer la mémoire occupée par celui-ci lorsqu'une condition est déclenchée.

WeakRef est une API plus avancée qui fournit une fenêtre sur le cycle de vie des objets et peut résoudre le scénario dans lequel WeakMap ne prend en charge que le type d'objet comme clé.

L'orateur a pris comme exemple la mise en cache des images. Map verrouillera la clé et la valeur de l'image afin que le nom de l'image et les données de l'image ne soient pas GC car ils sont toujours référencés. D'un autre côté, la référence faible WeakMap ne fonctionnera pas ici, car le nom de l'image est de type chaîne et WeakMap stipule que sa clé ne peut être que de type objet.

WeakRef résout ce problème en mettant directement en cache l'objet image. Le nom de l'image est utilisé comme clé et la référence faible WeakRef est stockée dans le cache comme valeur. Mais cela posera un autre problème : comme le nom de l'image est Key, map conservera toujours ces chaînes de nom d'image. Idéalement, ces chaînes seraient également GCed.

En plus du fait que lasynchrone est 10 fois plus rapide, quapporte JavaScript dautre ?

La solution pour WeakRef est d'introduire une nouvelle API "FinalizationGroup()", d'enregistrer une fonction de rappel et de supprimer les "résidus" mentionnés précédemment du cache lorsque le GC est déclenchée.

En plus du fait que lasynchrone est 10 fois plus rapide, quapporte JavaScript dautre ?

En plus de ces points, les nouvelles fonctionnalités du langage JavaScript incluent également :

  • les fichiers de classe peuvent être directement dans la classe Initialise les variables sans les écrire dans le constructeur

  • Setter et getter privés

  • String .matchAll peut effectuer plusieurs correspondances régulières

  • pour améliorer la lisibilité des nombres. Les séparateurs numériques peuvent utiliser "_" comme séparateur lors de l'écriture des nombres <.>

  • Nouveau type de grand nombre BigInt

  • Ajoutez des API Intl.*, c'est-à-dire utilisez-les pour l'internationalisation API, telles que l'affichage des nombres formatés localisés Intl.NumberFormat, Intl.RelativeTimeFormat() et Intl.DateTimeFormat() l'heure d'affichage localisée

  • Attente de niveau supérieur, non besoin d'écrire async

  • Nouvelle fonction Promise Promise.allSettled() et Promise.any()

Pour un contenu spécifique, vous pouvez visionner la vidéo du discours :

https://www.youtube.com/watch?v=c0oy0vQKEZE

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer