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