1. 30 7月, 2015 13 次提交
    • S
      Cut string ActionView template allocations · 9b189a31
      schneems 提交于
      The instrument method creates new strings, the most common action to instrument is "!render_template` so we can detect when that action is occurring and use a frozen string instead.
      
      This change buys us 113,714 bytes of memory and 1,790 fewer objects per request.
      9b189a31
    • S
      Optimize hash key · 2e95d2ef
      schneems 提交于
      No idea why on earth this hash key isn't already optimized by MRI, but it isn't. 💩
      
      This change buys us 74,077 bytes of memory and 1,852 fewer objects per request.
      2e95d2ef
    • S
      Decrease string allocation in content_tag_string · 2a4d4301
      schneems 提交于
      When an unknonwn key is passed to the hash in `PRE_CONTENT_STRINGS` it returns nil, when you call "#{nil}" it allocates a new empty string. We can get around this allocation by using a default value `Hash.new { "".freeze }`. We can avoid the `to_sym` call by pre-populating the hash with a symbol key in addition to a string key.
      
      We can freeze some strings when using Array#* to reduce allocations.
      
      Array#join can take frozen strings.
      
      This change buys us 86,600 bytes of memory and 1,857 fewer objects per request.
      2a4d4301
    • S
      Reduce hash allocations in route_set · 1a14074f
      schneems 提交于
      When generating a url with `url_for` the hash of arguments passed in, is dup-d and merged a TON. I wish I could clean this up better, and might be able to do it in the future. This change removes one dup, since it's literally right after we just dup-d the hash to pass into this constructor.
      
      This may be a breaking, change but the tests pass...so :shipit: we can revert if it causes problems
      
      This change buys us 205,933 bytes of memory and 887 fewer objects per request.
      1a14074f
    • S
      Decrease route_set allocations · 0cbec58a
      schneems 提交于
      In handle_positional_args `Array#-=` is used which allocates a new array. Instead we can iterate through and delete elements, modifying the array in place.
      
      Also `Array#take` allocates a new array. We can build the same by iterating over the other element.
      
      This change buys us 106,470 bytes of memory and 2,663 fewer objects per request.
      0cbec58a
    • S
      Speed up journey missing_keys · 097ec6fb
      schneems 提交于
      Most routes have a `route.path.requirements[key]` of `/[-_.a-zA-Z0-9]+\/[-_.a-zA-Z0-9]+/` yet every time this method is called a new regex is generated on the fly with `/\A#{DEFAULT_INPUT}\Z/`. OBJECT ALLOCATIONS BLERG!
      
      This change uses a special module that implements `===` so it can be used in a case statement to pull out the default input. When this happens, we use a pre-generated regex.
      
      This change buys us 1,643,465 bytes of memory and 7,990 fewer objects per request.
      097ec6fb
    • S
      Speed up journey extract_parameterized_parts · 9b825881
      schneems 提交于
      Micro optimization: `reverse.drop_while` is slower than `reverse_each.drop_while`. This doesn't save any object allocations.
      
      Second, `keys_to_keep` is typically a very small array. The operation `parameterized_parts.keys - keys_to_keep` actually allocates two arrays. It is quicker (I benchmarked) to iterate over each and check inclusion in array manually.
      
      This change buys us 1774 fewer objects per request
      9b825881
    • S
      Decrease string allocations in url_options · 83ee043c
      schneems 提交于
      The request.script_name is dup-d which allocates an extra string. It is most commonly an empty string "". We can save a ton of string allocations by checking first if the string is empty, if so we can use a frozen empty string instead of duplicating an empty string.
      
      This change buys us 35,714 bytes of memory and 893 fewer objects per request.
      83ee043c
    • S
      Decrease string allocations in apply_inflections · 1bf50bad
      schneems 提交于
      In `apply_inflections` a string is down cased and some whitespace stripped in the front (which allocate strings). This would normally be fine, however `uncountables` is a fairly small array (10 elements out of the box) and this method gets called a TON. Instead we can keep an array of valid regexes for each uncountable so we don't have to allocate new strings.
      
      This change buys us 325,106 bytes of memory and 3,251 fewer objects per request.
      1bf50bad
    • S
      Decrease string allocations on AR#respond_to? · f80aa599
      schneems 提交于
      When a symbol is passed in, we call `to_s` on it which allocates a string. The two hardcoded symbols that are used internally are `:to_partial_path` and `:to_model`.
      
      This change buys us 71,136 bytes of memory and 1,777 fewer objects per request.
      f80aa599
    • R
      Merge pull request #21065 from rails/schneems/fix-assets_test · 10e994cc
      Richard Schneeman 提交于
      Fix tests on master
      10e994cc
    • S
      Fix rake/notes_test · 9b18ba75
      schneems 提交于
      Presumably due to https://github.com/rails/sprockets-rails/pull/265 sprockets was trying to load the "scss" gem but it isn't in the gemfile:
      
      ```
      ApplicationTests::RakeTests::RakeNotesTest#test_register_a_new_extension:
      LoadError: cannot load such file -- sass
      ```
      
      If we use an empty precompile list, it won't try to load sass.
      9b18ba75
    • S
      Fix reported regression rails/sprockets-rails#265 · 4bc24691
      schneems 提交于
      We can prevent the UglifierCompressor from being instantiated prematurely by setting precompile to an empty array in this test.
      4bc24691
  2. 29 7月, 2015 5 次提交
  3. 28 7月, 2015 15 次提交
  4. 27 7月, 2015 3 次提交
  5. 26 7月, 2015 4 次提交