Comportamiento curioso - .to_json Vs .to_xml
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
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
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
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?
