Benckmark: switch con caracteres

En esta ocasión traemos una prueba sencilla para comprobar si es más rápido tener un switch en el que se comprueben cadenas de un carácter, o por el contrario es más veloz convertir antes dichos caracteres a su valor ASCII. En el segundo caso nos valdremos del uso de charCodeAt().

Función 1. Switch con cadenas

Para la primera función, tan sólo tendremos un switch que compruebe las cadenas que queramos “controlar”. Tanto, en esta función, como en la siguiente, se ha dejado el código del case vacío, de forma que se evite obtener datos falseados por operaciones que se realicen en dicho case.

function switchString(value) {
  switch (value) {
      case 'z': break;
      case 'y': break;
      case 'x': break;
      case 'w': break;
      case 'v': break;
      case 'a': break;
  }
}

Función 2. Switch con ASCII

Con la segunda función se convierte el “caracter” recibido en su correspondiente valor ASCII. De forma que, el switch se llevará a cabo sobre dicho valor. Como podréis comprobar el código no contiene comprobaciones extra para evitar que se alteren los resultados.

function switchAscii(value) {
  let code = value.charCodeAt(0);
  switch (code) {
      case 122: break;
      case 121: break;
      case 120: break;
      case 119: break;
      case 118: break;
      case 97: break;
  }
}

La batería de pruebas

El código encargado de medir los tiempos para las dos pruebas será el mismo en ambos casos. Llamando a una u otra función dependiendo de la prueba.

function test() {
    var roundTime = 0,
        lap, startTime, i, endTime, currentResult;

    for (lap = 0; lap < 10; ++lap) {
        startTime = new Date();
        for (i = 0; i < 10000000; ++i) {
            switchString('a');
            // switchAscii('a');
        }
        endTime = new Date();

        currentResult = endTime.getTime() - startTime.getTime()
        roundTime += currentResult;

        console.log('Resultado: '  + currentResult);
    }

    console.log('Media: ' + (roundTime / 10) + 'ms');
}

Resultados

Para mí ha sido una sorpresa ver lo lento que ha funcionado convertir a ASCII, siendo el ganador con diferencia el switch de caracteres:

FunciónPaso 1Paso 2Paso 3Paso 4Paso 5Paso 6Paso 7Paso 8Paso 9Paso 10Media
String188778766778.1
Ascii245232232232231235239231237239235.3

Como resultado de las pruebas, se observa una clara vencedora, la función con el switch de cadenas. Esta función es casi 30 veces más rápida que la encargada de convertir el carácter a ASCII.

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

El tiempo límite ha expirado. Por favor, recarga el CAPTCHA.