J'ai un code qui s'appuie fortement sur yaml pour le contre-la langue de la sérialisation et tout en travaillant sur l'accélération de certains trucs, j'ai remarqué que yaml a été incroyablement lent par rapport à d'autres méthodes de sérialisation (par exemple, cornichon, json).
Ce qui a vraiment des coups de mon esprit, c'est que json est donc beaucoup plus rapide que yaml lorsque la sortie est à peu près identique.
>>> import yaml, cjson; d={'foo': {'bar': 1}}
>>> yaml.dump(d, Dumper=yaml.SafeDumper)
'foo: {bar: 1}\n'
>>> cjson.encode(d)
'{"foo": {"bar": 1}}'
>>> import yaml, cjson;
>>> timeit("yaml.dump(d, Dumper=yaml.SafeDumper)", setup="import yaml; d={'foo': {'bar': 1}}", number=10000)
44.506911039352417
>>> timeit("yaml.dump(d, Dumper=yaml.CSafeDumper)", setup="import yaml; d={'foo': {'bar': 1}}", number=10000)
16.852826118469238
>>> timeit("cjson.encode(d)", setup="import cjson; d={'foo': {'bar': 1}}", number=10000)
0.073784112930297852
PyYaml de CSafeDumper et cjson sont écrits en C, donc c'est pas comme si c'est un C vs Python problème de vitesse. J'ai même ajouté des données aléatoires pour voir si cjson est de faire toute la mise en cache, mais c'est encore de manière plus rapide que PyYaml. Je me rends compte que yaml est un sur-ensemble de json, mais comment le yaml sérialiseur être de 2 ordres de grandeur plus faible avec une telle entrée simple?