How is it that json serialization is so much faster than yaml serialization in Python?

前端 未结 5 1897
不思量自难忘°
不思量自难忘° 2020-12-12 15:12

I have code that relies heavily on yaml for cross-language serialization and while working on speeding some stuff up I noticed that yaml was insanely slow compared to other

5条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-12 15:38

    A cursory look at python-yaml suggests its design is much more complex than cjson's:

    >>> dir(cjson)
    ['DecodeError', 'EncodeError', 'Error', '__doc__', '__file__', '__name__', '__package__', 
    '__version__', 'decode', 'encode']
    
    >>> dir(yaml)
    ['AliasEvent', 'AliasToken', 'AnchorToken', 'BaseDumper', 'BaseLoader', 'BlockEndToken',
     'BlockEntryToken', 'BlockMappingStartToken', 'BlockSequenceStartToken', 'CBaseDumper',
    'CBaseLoader', 'CDumper', 'CLoader', 'CSafeDumper', 'CSafeLoader', 'CollectionEndEvent', 
    'CollectionNode', 'CollectionStartEvent', 'DirectiveToken', 'DocumentEndEvent', 'DocumentEndToken', 
    'DocumentStartEvent', 'DocumentStartToken', 'Dumper', 'Event', 'FlowEntryToken', 
    'FlowMappingEndToken', 'FlowMappingStartToken', 'FlowSequenceEndToken', 'FlowSequenceStartToken', 
    'KeyToken', 'Loader', 'MappingEndEvent', 'MappingNode', 'MappingStartEvent', 'Mark', 
    'MarkedYAMLError', 'Node', 'NodeEvent', 'SafeDumper', 'SafeLoader', 'ScalarEvent', 
    'ScalarNode', 'ScalarToken', 'SequenceEndEvent', 'SequenceNode', 'SequenceStartEvent', 
    'StreamEndEvent', 'StreamEndToken', 'StreamStartEvent', 'StreamStartToken', 'TagToken', 
    'Token', 'ValueToken', 'YAMLError', 'YAMLObject', 'YAMLObjectMetaclass', '__builtins__', 
    '__doc__', '__file__', '__name__', '__package__', '__path__', '__version__', '__with_libyaml__', 
    'add_constructor', 'add_implicit_resolver', 'add_multi_constructor', 'add_multi_representer', 
    'add_path_resolver', 'add_representer', 'compose', 'compose_all', 'composer', 'constructor', 
    'cyaml', 'dump', 'dump_all', 'dumper', 'emit', 'emitter', 'error', 'events', 'load', 
    'load_all', 'loader', 'nodes', 'parse', 'parser', 'reader', 'representer', 'resolver', 
    'safe_dump', 'safe_dump_all', 'safe_load', 'safe_load_all', 'scan', 'scanner', 'serialize', 
    'serialize_all', 'serializer', 'tokens']
    

    More complex designs almost invariably mean slower designs, and this is far more complex than most people will ever need.

提交回复
热议问题