import json import timeit import os import simdjson import orjson import ujson # Cargar el archivo una sola vez 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 # stdlib json t_json = timeit.timeit(lambda: json.loads(raw_str), number=ITERS) # orjson t_orjson = timeit.timeit(lambda: orjson.loads(raw_bytes), number=ITERS) # ujson t_ujson = timeit.timeit(lambda: ujson.loads(raw_str), number=ITERS) # simdjson.loads (drop-in) t_simdjson_loads = timeit.timeit(lambda: simdjson.loads(raw_str), number=ITERS) # simdjson Parser reutilizado parser = simdjson.Parser() t_simdjson_parser = timeit.timeit(lambda: parser.parse(raw_bytes), number=ITERS) # simdjson Parser + as_dict (convierte todo) t_simdjson_dict = timeit.timeit( lambda: parser.parse(raw_bytes).as_dict(), number=ITERS ) # Imprimir resultados 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")