Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

114
Vistas
¿Dart `startsWith` es mega más lento que el mismo método en JavaScript?

Un enlace a una prueba comparativa en DartPad que ejecuta código Dart y lo compila en JavaScript.

https://dartpad.dev/?id=e110b8bc0ad72298517fb286d21bccdc

El código de prueba es simple

 void _test1(int count) { final source = ' 123 '; for (var i = 0; i < count; i++) { var x = source.startsWith('123', 1); } } void _test2(int count) { final source = ' 123 '; for (var i = 0; i < count; i++) { var ok = source.codeUnitAt(1) == 0x31 && source.codeUnitAt(2) == 0x32 && source.codeUnitAt(3) == 0x33; var x = ok; } }

Resultados para JavaScript:

 Time passed: 0.000, Test 'startsWith': 105.4 ms Time passed: 0.106, Test 'codeUnitAt': 87.8 ms Time passed: 0.194, Test 'startsWith': 86.7 ms Time passed: 0.280, Test 'codeUnitAt': 87.101 ms Time passed: 0.368, Test 'startsWith': 87 ms Time passed: 0.455, Test 'codeUnitAt': 87.2 ms Time passed: 0.542, Test 'startsWith': 86.699 ms Time passed: 0.629, Test 'codeUnitAt': 85.6 ms Time passed: 0.715, Test 'startsWith': 85.7 ms Time passed: 0.801, Test 'codeUnitAt': 86.6 ms

Sin preguntas.

Resultados para dardo (JIT):

 Time passed: 0.000, Test 'startsWith': 837.2 ms Time passed: 0.842, Test 'codeUnitAt': 125.094 ms Time passed: 0.968, Test 'startsWith': 924.482 ms Time passed: 1.892, Test 'codeUnitAt': 131.861 ms Time passed: 2.024, Test 'startsWith': 736.603 ms Time passed: 2.761, Test 'codeUnitAt': 76.636 ms Time passed: 2.838, Test 'startsWith': 792.341 ms Time passed: 3.631, Test 'codeUnitAt': 61.732 ms Time passed: 3.693, Test 'startsWith': 721.816 ms Time passed: 4.415, Test 'codeUnitAt': 73.93 ms

85,7 ms frente a 721,816 ms

Estos resultados plantean una gran cantidad de preguntas y la principal es: "¿Por qué startsWith es tan lento en comparación con JavaScript? ¿Cuál es la razón?"

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Su prueba muestra que Google Chrome es excelente para detectar funciones que no hacen nada y/o funciones que terminan con el mismo resultado dado el mismo valor de entrada.

En general, es bastante difícil hacer este tipo de pruebas comparativas en las que queremos que se realice alguna optimización, pero no demasiada, ya que corremos el riesgo de optimizar lo que queríamos probar.

Por ejemplo, su bucle for interno simplemente está recorriendo los mismos datos y guarda el resultado en una variable local no utilizada. Cuanto más inteligente es el compilador, más termina deshaciéndose.

Entonces, la pregunta rápidamente se convierte en: "¿qué es lo que realmente queremos probar aquí?"

La prueba actual muestra con certeza que Dart VM es peor que Chrome cuando se trata de optimizar las funciones para no hacer básicamente nada.

Si, en cambio, cambiamos la prueba para que tanto Chrome como Dart VM sean menos predecibles (y, por lo tanto, realicemos menos optimizaciones), podríamos intentar algo como esto:

 Random _rnd = Random(); void _test1(int count) { final source = ' 123 '; var x = false; for (var i = 0; i < count; i++) { x = source.startsWith('123', _rnd.nextBool() ? 0 : 1); } print(x); }

Luego Chrome regresa (he eliminado los resultados de codeUnitAt ):

 true Time passed: 0.000, Test 'startsWith': 3531 ms false Time passed: 3.531, Test 'startsWith': 3498 ms false Time passed: 7.029, Test 'startsWith': 3289 ms true Time passed: 10.319, Test 'startsWith': 3316 ms true Time passed: 13.635, Test 'startsWith': 3266 ms

Y dardo VM:

 false Time passed: 0.000, Test 'startsWith': 2119 ms false Time passed: 2.121, Test 'startsWith': 1901 ms true Time passed: 4.023, Test 'startsWith': 2012 ms true Time passed: 6.035, Test 'startsWith': 1998 ms false Time passed: 8.033, Test 'startsWith': 2009 ms

Y Dart compilado en un archivo exe:

 false Time passed: 0.000, Test 'startsWith': 1364 ms true Time passed: 1.365, Test 'startsWith': 1360 ms true Time passed: 2.726, Test 'startsWith': 1369 ms false Time passed: 4.095, Test 'startsWith': 1355 ms false Time passed: 5.451, Test 'startsWith': 1362 ms

También se puede ver algo similar si cambiamos la prueba codeUnitAt .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda