Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

113
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda