nodejs / nodejs/node

Node-API performance

Ouverte
#49,922 8 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

feature request never-stale performance
Langage dominant
JavaScript
Étoiles
122k
Forks
37.3k
Merge moyen
4 j 2 h
PR mergées (30 j)
283

Description

What is the problem this feature will solve?

Improve performance when creating large V8 objects which is critical since these must always be created on the main thread, blocking the event loop.

Currently, the overhead of each method is very significant - especially for the primitive operations such as simply setting a property.

As a very typical example of the current problem, you can consider these two methods for setting a property on an object:

napi_status napi_set_property(napi_env env,
                                          napi_value object,
                                          napi_value key,
                                          napi_value value);
napi_status napi_set_named_property(napi_env env,
                                          napi_value object,
                                          const char* utf8name,
                                          napi_value value);

Naively, one expects that using the first one will be faster when the key is already UTF-16. However calling this method requires to first call napi_create_string_utf16 and the combined overhead of the two calls offsets the single call of the second method when the key is not very long (which is usually the case).

What is the feature you are proposing to solve the problem?

Step 1: napi_set_named_property that takes UTF-16 (not needed, see below)

Step 2: Methods that can create in one call a whole array/object from a C data structure - especially ones for strings already encoded in UTF-16

What alternatives have you considered?

No response

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par les points d’entrée de Node-API napi_set_property, napi_set_named_property et napi_create_string_utf16, puis examinez comment les gros objets V8 et les opérations de propriétés primitives sont créés sur le thread principal. L’issue ne nomme ni fichiers ni tests ; sa réalisation nécessiterait de définir le périmètre de l’API pour la création en masse de tableaux/objets basés sur des données C, ainsi que de fournir des éléments montrant que les opérations proposées réduisent le surcoût de création.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
cpp, javascript, node.js
Domaine
api, backend
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
Calme
Clarté
À clarifier
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.