• X
    significant speedup of AC::Parameters#permit · 26dd9b26
    Xavier Noria 提交于
    The current implementation of AC::Parameters#permit builds permitted hashes and
    then calls permit! on them.
    
    This filtering is recursive, so we call permit! on terminal branches, but then
    ascendants call permit! on themselves when the recursion goes up the stack,
    which recurses all the way down again because permit! is recursive itself.
    Repeat this for every parent node and you get some scary O-something going on
    that I don't even want to compute.
    
    Instead, since the whole point of the permit recursion is to build permitted
    hashes along the way and at that point you know you've just come up with a
    valid filtered version, you can already switch the toggle on the spot.
    
    I have seen 2x speedups in casual benchmarks with small structures. As the
    previous description shows, the difference in performance is going to be a
    function of the nesting.
    
    Note that that the involved methods are private and used only by permit.
    26dd9b26
strong_parameters.rb 33.1 KB