1. 10 10月, 2018 1 次提交
    • E
      Add allocations to template renderer subscription · e8c1be4a
      Eileen Uchitelle 提交于
      This PR adds the allocations to the instrumentation for template and
      partial rendering.
      
      Before:
      
      ```
        Rendering posts/new.html.erb within layouts/application
        Rendered posts/_form.html.erb (9.7ms)
        Rendered posts/new.html.erb within layouts/application (10.9ms)
      Completed 200 OK in 902ms (Views: 890.8ms | ActiveRecord: 0.8ms)
      ```
      
      After:
      
      ```
        Rendering posts/new.html.erb within layouts/application
        Rendered posts/_form.html.erb (Duration: 7.1ms | Allocations: 6004)
        Rendered posts/new.html.erb within layouts/application (Duration: 8.3ms | Allocations: 6654)
      Completed 200 OK in 858ms (Views: 848.4ms | ActiveRecord: 0.4ms | Allocations: 1539564)
      ```
      e8c1be4a
  2. 29 9月, 2018 1 次提交
    • Y
      Add `Style/RedundantFreeze` to remove redudant `.freeze` · aa3dcabd
      Yasuo Honda 提交于
      Since Rails 6.0 will support Ruby 2.4.1 or higher
      `# frozen_string_literal: true` magic comment is enough to make string object frozen.
      This magic comment is enabled by `Style/FrozenStringLiteralComment` cop.
      
      * Exclude these files not to auto correct false positive `Regexp#freeze`
       - 'actionpack/lib/action_dispatch/journey/router/utils.rb'
       - 'activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb'
      
      It has been fixed by https://github.com/rubocop-hq/rubocop/pull/6333
      Once the newer version of RuboCop released and available at Code Climate these exclude entries should be removed.
      
      * Replace `String#freeze` with `String#-@` manually if explicit frozen string objects are required
      
       - 'actionpack/test/controller/test_case_test.rb'
       - 'activemodel/test/cases/type/string_test.rb'
       - 'activesupport/lib/active_support/core_ext/string/strip.rb'
       - 'activesupport/test/core_ext/string_ext_test.rb'
       - 'railties/test/generators/actions_test.rb'
      aa3dcabd
  3. 23 9月, 2018 1 次提交
    • Y
      Enable `Performance/UnfreezeString` cop · 1b86d901
      yuuji.yaginuma 提交于
      In Ruby 2.3 or later, `String#+@` is available and `+@` is faster than `dup`.
      
      ```ruby
      # frozen_string_literal: true
      
      require "bundler/inline"
      
      gemfile(true) do
        source "https://rubygems.org"
      
        gem "benchmark-ips"
      end
      
      Benchmark.ips do |x|
        x.report('+@') { +"" }
        x.report('dup') { "".dup }
        x.compare!
      end
      ```
      
      ```
      $ ruby -v benchmark.rb
      ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
      Warming up --------------------------------------
                        +@   282.289k i/100ms
                       dup   187.638k i/100ms
      Calculating -------------------------------------
                        +@      6.775M (± 3.6%) i/s -     33.875M in   5.006253s
                       dup      3.320M (± 2.2%) i/s -     16.700M in   5.032125s
      
      Comparison:
                        +@:  6775299.3 i/s
                       dup:  3320400.7 i/s - 2.04x  slower
      
      ```
      1b86d901
  4. 29 7月, 2017 1 次提交
  5. 02 7月, 2017 1 次提交
  6. 01 7月, 2017 1 次提交
  7. 20 6月, 2017 1 次提交
  8. 19 5月, 2017 1 次提交
  9. 10 8月, 2016 1 次提交
  10. 08 8月, 2016 2 次提交
    • K
      Add back unintentionally removed newline. · 3def3c50
      Kasper Timm Hansen 提交于
      3def3c50
    • S
      Modify LogSubscriber for single partial's cache message. · ab2af4df
      Stan Lo 提交于
      Implement naive partial caching mechanism.
      
      Add test for LogSubscriber
      
      Use ActionView::Base#log_payload to store log_subscriber's payload, so we can pass cache result into it.
      
      Fixed tests
      
      Remove useless settings
      
      Check if #log_payload exists before calling it. Because other classes also includes CacheHelper but don't have is attribute
      
      Use @log_payload_for_partial_reder instead of #log_payload to carry ActionView's payload.
      
      Update test's hash syntax
      
      Add configuration to enable/disable fragment caching logging
      
      Remove unless test and add new test to ensure cache info won't effect next rendering's log
      
      Move :enable_fragment_cache_logging config from ActionView to ActionPack
      
      Apply new config to tests
      
      Update actionview's changelog
      
      Update configuration guide
      
      Improve actionview's changelog
      
      Refactor PartialRenderer#render and log tests
      
      Mute subscriber's log instead of disabling instrumentation.
      
      Fix typo, remove useless comment and use new hash syntax
      
      Improve actionpack's log_subscriber test
      
      Fix rebase mistake
      
      Apply new config to all caching intstrument actions
      ab2af4df
  11. 10 2月, 2016 1 次提交
  12. 07 2月, 2016 1 次提交
  13. 03 2月, 2016 1 次提交
  14. 20 7月, 2015 1 次提交
    • S
      Freeze string literals when not mutated. · 5bb1d4d2
      schneems 提交于
      I wrote a utility that helps find areas where you could optimize your program using a frozen string instead of a string literal, it's called [let_it_go](https://github.com/schneems/let_it_go). After going through the output and adding `.freeze` I was able to eliminate the creation of 1,114 string objects on EVERY request to [codetriage](codetriage.com). How does this impact execution?
      
      To look at memory:
      
      ```ruby
      require 'get_process_mem'
      
      mem = GetProcessMem.new
      GC.start
      GC.disable
      1_114.times { " " }
      before = mem.mb
      
      after = mem.mb
      GC.enable
      puts "Diff: #{after - before} mb"
      
      ```
      
      Creating 1,114 string objects results in `Diff: 0.03125 mb` of RAM allocated on every request. Or 1mb every 32 requests.
      
      To look at raw speed:
      
      ```ruby
      require 'benchmark/ips'
      
      number_of_objects_reduced = 1_114
      
      Benchmark.ips do |x|
        x.report("freeze")    { number_of_objects_reduced.times { " ".freeze } }
        x.report("no-freeze") { number_of_objects_reduced.times { " " } }
      end
      ```
      
      We get the results
      
      ```
      Calculating -------------------------------------
                    freeze     1.428k i/100ms
                 no-freeze   609.000  i/100ms
      -------------------------------------------------
                    freeze     14.363k (± 8.5%) i/s -     71.400k
                 no-freeze      6.084k (± 8.1%) i/s -     30.450k
      ```
      
      Now we can do some maths:
      
      ```ruby
      ips = 6_226k # iterations / 1 second
      call_time_before = 1.0 / ips # seconds per iteration 
      
      ips = 15_254 # iterations / 1 second
      call_time_after = 1.0 / ips # seconds per iteration 
      
      diff = call_time_before - call_time_after
      
      number_of_objects_reduced * diff * 100
      
      # => 0.4530373333993266 miliseconds saved per request
      ```
      
      So we're shaving off 1 second of execution time for every 220 requests. 
      
      Is this going to be an insane speed boost to any Rails app: nope. Should we merge it: yep. 
      
      p.s. If you know of a method call that doesn't modify a string input such as [String#gsub](https://github.com/schneems/let_it_go/blob/b0e2da69f0cca87ab581022baa43291cdf48638c/lib/let_it_go/core_ext/string.rb#L37) please [give me a pull request to the appropriate file](https://github.com/schneems/let_it_go/blob/b0e2da69f0cca87ab581022baa43291cdf48638c/lib/let_it_go/core_ext/string.rb#L37), or open an issue in LetItGo so we can track and freeze more strings. 
      
      Keep those strings Frozen
      
      ![](https://www.dropbox.com/s/z4dj9fdsv213r4v/let-it-go.gif?dl=1)
      5bb1d4d2
  15. 15 12月, 2014 1 次提交
  16. 26 11月, 2014 1 次提交
  17. 18 7月, 2014 1 次提交
  18. 03 3月, 2014 1 次提交
  19. 24 2月, 2014 1 次提交
  20. 29 1月, 2014 1 次提交
    • L
      Log which keys were set to nil in deep_munge · 69ab91ae
      Lukasz Sarnacki 提交于
      deep_munge solves CVE-2013-0155 security vulnerability, but its
      behaviour is definately confuisng. This commit adds logging to deep_munge.
      It logs keys for which values were set to nil.
      
      Also mentions in guides were added.
      69ab91ae
  21. 15 5月, 2013 1 次提交
  22. 07 3月, 2013 1 次提交
  23. 01 10月, 2012 1 次提交
  24. 20 9月, 2012 1 次提交
  25. 18 9月, 2012 1 次提交
  26. 03 8月, 2012 1 次提交
  27. 19 5月, 2012 1 次提交
  28. 10 5月, 2012 1 次提交
  29. 13 12月, 2011 1 次提交
  30. 02 12月, 2011 1 次提交
  31. 30 11月, 2011 1 次提交
  32. 25 6月, 2011 1 次提交
  33. 07 5月, 2011 1 次提交
  34. 26 1月, 2011 1 次提交
  35. 25 9月, 2010 1 次提交
  36. 24 6月, 2010 1 次提交