Why is Object.create so much slower than a constructor?

后端 未结 4 1713
南旧
南旧 2021-02-07 12:00

Background

In a project I\'m maintaining we make extensive use of null prototype objects as a poor man\'s alternative to (string key only) Maps, which are not natively

4条回答
  •  半阙折子戏
    2021-02-07 12:29

    This question is pretty much invalid, because jsperf is broken, it skews results for whatever reason. I checked it personally when I was making my own map implementation ( one based on integers ).

    There is purely no difference between these two methods.

    BTW I think this an easier way to create an empty object with the same syntax:

    var EmptyV2 = function() { return Object.create(null); };
    

    I wrote my little own test that prints the time to create whatever amount of these 3 methods.

    Here it is:

    
    
        
            
        
        
        

    I am sorry, it is a bit rigid. Just paste it into an index.html and run. I think this method of testing is far superior to jsperf.

    Here are my results:

    |createEmpties| started: 1451996562280 --- ended: 1451996563073 --- time: 793
    |createEmptiesV2| started: 1451996563181 --- ended: 1451996564033 --- time: 852
    |createNullObjects| started: 1451996564148 --- ended: 1451996564980 --- time: 832


    |createEmpties| started: 1451996565085 --- ended: 1451996565926 --- time: 841
    |createEmptiesV2| started: 1451996566035 --- ended: 1451996566863 --- time: 828
    |createNullObjects| started: 1451996566980 --- ended: 1451996567872 --- time: 892

    |createEmpties| started: 1451996567986 --- ended: 1451996568839 --- time: 853
    |createEmptiesV2| started: 1451996568953 --- ended: 1451996569786 --- time: 833
    |createNullObjects| started: 1451996569890 --- ended: 1451996570713 --- time: 823

    |createEmpties| started: 1451996570825 --- ended: 1451996571666 --- time: 841
    |createEmptiesV2| started: 1451996571776 --- ended: 1451996572615 --- time: 839
    |createNullObjects| started: 1451996572728 --- ended: 1451996573556 --- time: 828

    |createEmpties| started: 1451996573665 --- ended: 1451996574533 --- time: 868
    |createEmptiesV2| started: 1451996574646 --- ended: 1451996575476 --- time: 830
    |createNullObjects| started: 1451996575582 --- ended: 1451996576427 --- time: 845

    |createEmpties| started: 1451996576535 --- ended: 1451996577361 --- time: 826
    |createEmptiesV2| started: 1451996577470 --- ended: 1451996578317 --- time: 847
    |createNullObjects| started: 1451996578422 --- ended: 1451996579256 --- time: 834

    |createEmpties| started: 1451996579358 --- ended: 1451996580187 --- time: 829
    |createEmptiesV2| started: 1451996580293 --- ended: 1451996581148 --- time: 855
    |createNullObjects| started: 1451996581261 --- ended: 1451996582098 --- time: 837

    |createEmpties| started: 1451996582213 --- ended: 1451996583071 --- time: 858
    |createEmptiesV2| started: 1451996583179 --- ended: 1451996583991 --- time: 812
    |createNullObjects| started: 1451996584100 --- ended: 1451996584948 --- time: 848

    |createEmpties| started: 1451996585052 --- ended: 1451996585888 --- time: 836
    |createEmptiesV2| started: 1451996586003 --- ended: 1451996586839 --- time: 836
    |createNullObjects| started: 1451996586954 --- ended: 1451996587785 --- time: 831

    |createEmpties| started: 1451996587891 --- ended: 1451996588754 --- time: 863
    |createEmptiesV2| started: 1451996588858 --- ended: 1451996589702 --- time: 844
    |createNullObjects| started: 1451996589810 --- ended: 1451996590640 --- time: 830

提交回复
热议问题