2026-08-08 17:14:48 -05:00
|
|
|
import json
|
|
|
|
|
import timeit
|
|
|
|
|
import os
|
|
|
|
|
|
|
|
|
|
import simdjson
|
|
|
|
|
import orjson
|
|
|
|
|
import ujson
|
|
|
|
|
|
2026-08-08 17:16:42 -05:00
|
|
|
# Cargar el archivo una sola vez
|
2026-08-08 17:14:48 -05:00
|
|
|
FILE = r'C:\Users\USER\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Shared Projects\JsonParserByLeo\Test\Ben\twitter.json'
|
|
|
|
|
assert os.path.exists(FILE), f"No se encontró {FILE}"
|
|
|
|
|
|
|
|
|
|
with open(FILE, "rb") as f:
|
|
|
|
|
raw_bytes = f.read()
|
|
|
|
|
|
|
|
|
|
raw_str = raw_bytes.decode("utf-8")
|
|
|
|
|
|
|
|
|
|
print(f"Archivo : {FILE}")
|
|
|
|
|
print(f"Tamaño : {len(raw_bytes) / 1024:.1f} KB")
|
|
|
|
|
print(f"Iters : 1000\n")
|
|
|
|
|
print(f"{'Librería':<22} {'Total (s)':>10} {'Por iter (ms)':>14} {'Speedup vs json':>16}")
|
|
|
|
|
print("─" * 68)
|
|
|
|
|
|
|
|
|
|
ITERS = 1000
|
|
|
|
|
|
2026-08-08 17:16:42 -05:00
|
|
|
# stdlib json
|
2026-08-08 17:14:48 -05:00
|
|
|
t_json = timeit.timeit(lambda: json.loads(raw_str), number=ITERS)
|
|
|
|
|
|
2026-08-08 17:16:42 -05:00
|
|
|
# orjson
|
2026-08-08 17:14:48 -05:00
|
|
|
t_orjson = timeit.timeit(lambda: orjson.loads(raw_bytes), number=ITERS)
|
|
|
|
|
|
2026-08-08 17:16:42 -05:00
|
|
|
# ujson
|
2026-08-08 17:14:48 -05:00
|
|
|
t_ujson = timeit.timeit(lambda: ujson.loads(raw_str), number=ITERS)
|
|
|
|
|
|
2026-08-08 17:16:42 -05:00
|
|
|
# simdjson.loads (drop-in)
|
2026-08-08 17:14:48 -05:00
|
|
|
t_simdjson_loads = timeit.timeit(lambda: simdjson.loads(raw_str), number=ITERS)
|
|
|
|
|
|
2026-08-08 17:16:42 -05:00
|
|
|
# simdjson Parser reutilizado
|
2026-08-08 17:14:48 -05:00
|
|
|
parser = simdjson.Parser()
|
|
|
|
|
t_simdjson_parser = timeit.timeit(lambda: parser.parse(raw_bytes), number=ITERS)
|
|
|
|
|
|
2026-08-08 17:16:42 -05:00
|
|
|
# simdjson Parser + as_dict (convierte todo)
|
2026-08-08 17:14:48 -05:00
|
|
|
t_simdjson_dict = timeit.timeit(
|
|
|
|
|
lambda: parser.parse(raw_bytes).as_dict(), number=ITERS
|
|
|
|
|
)
|
|
|
|
|
|
2026-08-08 17:16:42 -05:00
|
|
|
# Imprimir resultados
|
2026-08-08 17:14:48 -05:00
|
|
|
results = [
|
|
|
|
|
("json (stdlib)", t_json),
|
|
|
|
|
("ujson", t_ujson),
|
|
|
|
|
("orjson", t_orjson),
|
|
|
|
|
("simdjson.loads", t_simdjson_loads),
|
|
|
|
|
("simdjson.Parser", t_simdjson_parser),
|
|
|
|
|
("simdjson.Parser+as_dict",t_simdjson_dict),
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
baseline = t_json
|
|
|
|
|
for name, t in results:
|
|
|
|
|
per_iter = (t / ITERS) * 1000
|
|
|
|
|
speedup = baseline / t
|
|
|
|
|
print(f"{name:<22} {t:>10.3f}s {per_iter:>13.2f}ms {speedup:>14.2f}x")
|