JsonParserByLeo/BenOther/Py/main.py

61 lines
1.7 KiB
Python
Raw Permalink Normal View History

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")