Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

119
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!