Necesitaba hacer un pequeño benchmark para seleccionar que lenguaje de "transporte de datos" iba a usar, json o xml, a la hora de devolver la respuesta del servidor.

Para ello realizé uno que se basaba en el parseo de 100 elementos almacenados en el array videos, en igual de condiciones( las que me permite mi maquina claro).

Parseo de todos los atributos de los objetos:

  • to_json
  •  total=0; 50.times{b = Benchmark.measure{videos.to_json()}; total+=b.real }; puts total/50
     0.384012351036072
     
  • to_xml
  •  total=0; 50.times{b = Benchmark.measure{videos.to_xml()}; total+=b.real }; puts total/50
     0.271145639419556

Como podemos apreciar, el to_xml es un poco mas rápido, por lo que la balanza se empezó a inclinar hacia el uso de xml en el parseo, pero decidí seguir haciendo pruebas a ver que tal ...

Parseo de los objetos pero restringiendonos a unos atributos concretos.

  • to_json:
  • total=0; 50.times{b = Benchmark.measure{videos.to_json(:only => [:titulo, :num_videos, :rating])}; total+=b.real }; puts total/50
     0.0077793550491333
  • to_xml
  • total=0; 50.times{b = Benchmark.measure{videos.to_xml(:only => [:titulo, :num_videos, :rating])}; total+=b.real }; puts total/50
     0.0196503305435181

Ahora curiosamente el to_json es más rapido y nada mas y nada menos que un 250%.

Mi último experimento se basaba en los mismo que el anterior, pero en este caso uno de los campos seleccionados era un datetime.

Parseo restringiendo los atributos y teniendo uno del tipo datetime

  • to_json
  • total=0; 50.times{b = Benchmark.measure{videos.to_json(:only => [:titulo, :num_videos, :created_at])}; total+=b.real }; puts total/50
     0.168494687080383
  • to_xml
  • total=0; 50.times{b = Benchmark.measure{videos.to_xml(:only =>[:titulo, :num_videos, :created_at])}; total+=b.real }; puts total/50
     0.0479027700424194

to_xml un 350% mas rápido, ¿algún problema en el parseo de fechas del to_json?

Veamos los resultados en la siguiente tabla:

to_json to_xml to_json/to_xml %
todos los campos 0.384012351036072 0.271145639419556 to_xml 70% mas rápido
selectivo, ningún datetime 0.0077793550491333 0.0196503305435181 to_json 252% mas rápido
selectivo, un datetime 0.168494687080383 0.0479027700424194 to_xml 350% mas rápido

¿Alguien me lo explica?
¿Obteneis comportamientos parecidos?