1. 18 8月, 2015 1 次提交
  2. 11 8月, 2015 2 次提交
  3. 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
  4. 29 6月, 2015 1 次提交
  5. 16 4月, 2015 2 次提交
  6. 14 9月, 2014 1 次提交
  7. 15 7月, 2014 1 次提交
  8. 04 7月, 2014 1 次提交
  9. 17 6月, 2014 1 次提交
  10. 31 5月, 2014 1 次提交
  11. 27 5月, 2014 1 次提交
  12. 25 5月, 2014 1 次提交
  13. 09 5月, 2014 1 次提交
  14. 08 5月, 2014 1 次提交
  15. 02 5月, 2014 1 次提交
  16. 04 9月, 2013 1 次提交
  17. 20 6月, 2013 1 次提交
  18. 17 6月, 2013 1 次提交
  19. 15 5月, 2013 1 次提交
  20. 22 1月, 2013 1 次提交
    • P
      Fix asset_path in mounted engine · 445f14e9
      Piotr Sarnacki 提交于
      Historically serving assets from a mountable engine could be achieved by
      running ActionDispatch::Static as a part of engine middleware stack or
      to copy assets prefixed with an engine name. After introduction of
      assets pipeline this is not needed as all of the assets are served or
      compiled into main application's assets.
      
      This commit removes the obsolete line making asset_path always generate
      paths relative to the root or config.relative_url_root if it's set.
      
      (closes #8119)
      445f14e9
  21. 02 12月, 2012 1 次提交
  22. 16 10月, 2012 1 次提交
  23. 15 10月, 2012 3 次提交
  24. 13 10月, 2012 6 次提交
  25. 26 9月, 2012 3 次提交
  26. 28 8月, 2012 1 次提交
  27. 21 8月, 2012 1 次提交
  28. 01 7月, 2012 1 次提交
  29. 18 5月, 2012 1 次提交