aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/load_error.rb
Commit message (Collapse)AuthorAgeFilesLines
* Freeze string literals when not mutated.schneems2015-07-191-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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)
* Deprecate `MissingSourceFile` in favor of `LoadError`.Rafael Mendonça França2015-01-021-1/+3
| | | | | `MissingSourceFile` was just an alias to `LoadError` and was not being raised inside the framework.
* Correct docs as singlton true is not returned hereSteven Harman2014-04-111-1/+1
| | | | [ci skip]
* Document LoadError core extensionsSteven Harman2014-04-111-1/+4
| | | | [ci skip]
* fix method redefined warning in Ruby2.0Mitsutaka Mimura2012-06-121-5/+7
| | | | Ruby2.0 already has LoadError#path.
* Fixed Load Error failures in 1.9.2-headRizwan Reza2010-06-071-0/+1
|
* Stop overriding LoadError.new to return a MissingSourceError (and sometimes ↵Yehuda Katz2010-01-191-30/+16
| | | | nil!)
* Temporary fix to get our LoadError monkey-patch working with newer JRuby. We ↵Yehuda Katz2009-08-091-1/+2
| | | | should probably remove MissingSourceFile and just monkey-patch LoadError instead of overriding LoadError.new.
* Convert LoadError extension modules to class reopensJeremy Kemper2009-03-211-9/+6
|
* fix test warningsJeremy Kemper2006-05-311-3/+3
| | | | git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4386 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
* Fixed documentation for release (AS)David Heinemeier Hansson2005-07-061-5/+5
| | | | git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1735 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
* Fixed that MissingSourceFile's wasn't properly detected in production mode ↵David Heinemeier Hansson2005-03-251-1/+5
| | | | | | #925 [Nicholas Seckar] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@990 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
* Improved error reporting especially around never shallowing exceptions. ↵David Heinemeier Hansson2005-03-231-0/+34
Debugging helpers should be much easier now #980 [Nicholas Seckar] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@985 5ecf4fe2-1ee6-0310-87b1-e25e094e27de