2 votes

Performances lors de la conversion d'un String en Uint32Array

J'ai besoin de convertir des chaînes de caractères en tableaux typés (et de les reconvertir en chaînes de caractères) dans ES6. Actuellement, cela se fait avec les fonctions suivantes :

function string2array(s) {
    return Uint32Array.from(s, (c) => c.codePointAt(0));
}

function array2string(a) {
    return String.fromCodePoint(...a);
}

string2array est deux fois plus lent que array2string . Je m'attendais à ce que les deux fonctions soient aussi rapides l'une que l'autre. Ma conception de leur fonctionnement est la suivante :

string2array(s):
allocate memory for array of length=s.length 
foreach character (or surrogate pair):
    get codePoint
    push to array
return array

array2string(a):
allocate memory for string of lenght=a.length
foreach item in array
    get String.fromCodePoint
    push to string
return string

Ils me semblent donc assez comparables.

  1. Pourquoi string2array est-il plus lent ?
  2. Existe-t-il un moyen plus rapide pour string2array ?

Voici mon cas d'essai :

function testConversions() {
  "use strict";
  const data = "

0voto

bluehipy Points 1653

Votre test devrait être un peu différent parce que vous string2array fait plus que array2string .

Si vous créez : string_2_code_point_array code_point_array_2_uint_array uint_array_2_string vous verrez que les deux derniers ont des temps comparables.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X