aboutsummaryrefslogtreecommitdiffstats
path: root/actionview
Commit message (Collapse)AuthorAgeFilesLines
* Freeze string literals when not mutated.schneems2015-07-195-11/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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)
* Stop using deprecated `render :text` in testPrem Sichanugrist2015-07-175-23/+25
| | | | | | | | | This will silence deprecation warnings. Most of the test can be changed from `render :text` to render `:plain` or `render :body` right away. However, there are some tests that needed to be fixed by hand as they actually assert the default Content-Type returned from `render :body`.
* [skip ci] Lookup can be a noun but it is not a verbJon Atack2015-07-174-9/+10
| | | | Various grammar corrections and wrap to 80 characters.
* Make AC::Parameters not inherited from HashPrem Sichanugrist2015-07-151-0/+10
| | | | | | | | This is another take at #14384 as we decided to wait until `master` is targeting Rails 5.0. This commit is implementation-complete, as it guarantees that all the public methods on the hash-inherited Parameters are still working (based on test case). We can decide to follow-up later if we want to remove some methods out from Parameters.
* Change AC::TestResponse to AD::TestResponsePrem Sichanugrist2015-07-142-2/+2
| | | | | ActionController::TestResponse was removed in d9fe10c and caused a test failure on Action View as its test case still refers to it.
* Merge pull request #20813 from noniq/locale-argument-for-pluralize-helperKasper Timm Hansen2015-07-092-2/+22
|\ | | | | Allow `pluralize` helper to take a locale.
| * Allow `pluralize` helper to take a locale.Stefan Daschek2015-07-092-2/+22
| | | | | | | | This is already supported in `ActiveSupport::Inflector#pluralize` and `String#pluralize`, so we just forward the locale.
* | use new constructor. (Oops! :bomb:)Aaron Patterson2015-07-082-2/+2
| |
* | Support explicit defintion of resouce name for collection caching.Dov Murik2015-07-075-9/+47
|/ | | | | | | | | | | | | | If a template includes `# Template Collection: ...` anywhere in its source, that name will be used as the cache name for the partial that is rendered for the collection. This allows users to enable collection caching even if the template doesn't start with `<% cache ... do %>`. Moreover, the `# Template Collection: ...` notation is recognized in all template types (and template types other than ERB can define a resource_cache_call_pattern method to allow the `cache ... do` pattern to be recognized too).
* changes names in guides to better reflect diversity [ci-skip]Thomas Osborn2015-07-021-6/+6
|
* Merge pull request #20669 from akolomiychuk/image-pathYves Senn2015-06-293-0/+11
|\ | | | | | | Passing nil to image_tag
| * Add nil check in asset_pathAnton Kolomiychuk2015-06-292-0/+7
| |
* | Fix cache issue when different partials use the same collectionRoque Pinel2015-06-284-16/+36
| | | | | | | | | | | | | | | | | | Adds the `virtual_path` option to `cache_fragment_name` so it can be provided when needed. That allows `cache_collection_render` to get the appropriate cache key with the digest generated based on the template and prevent collision with other templates that cache the same collection.
* | Merge pull request #20417 from dubek/fix-template-cache-call-patternKasper Timm Hansen2015-06-263-1/+36
|\ \ | | | | | | Improve detection of partial templates eligible for collection caching.
| * | Improve detection of partial templates eligible for collection caching.Dov Murik2015-06-223-1/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The regular expression which was used to detect partial templates that begin with a `<% cache ... do %>` call missed some cases. This commits attempts to improve the detection for some cases such as multi-line comments at the beginning of the template. The different templates are listed in two new unit test methods. Note that specially crafted Ruby code can still evade such `cache`-call detection: for example, a user might have its own method which itself calls the Rails `cache` helper. In such a case, the template's code doesn't start with a literal `cache` string and therefore will not be eligible for collection caching.
* | | A few documentation fixes [ci skip]Robin Dupret2015-06-231-6/+6
|/ /
* | Merge pull request #20654 from repinel/remove-duplicate-privateRichard Schneeman2015-06-211-2/+0
|\ \ | | | | | | Remove duplicate private statement
| * | Remove duplicate private statementRoque Pinel2015-06-211-2/+0
| | |
* | | Merge branch 'master' of github.com:rails/docrailsVijay Dev2015-06-215-6/+6
|\ \ \ | |/ / |/| | | | | | | | Conflicts: guides/source/configuring.md
| * | [ci skip] Fix to Fixed-width Fontyui-knk2015-06-143-4/+4
| | | | | | | | | | | | LookupContext is class name
| * | [ci skip] Add '.'yui-knk2015-06-141-1/+1
| | |
| * | [ci skip] Fix minutes to seconds in `select_second`yui-knk2015-06-091-1/+1
| | | | | | | | | | | | This is same type commit of https://github.com/rails/rails/pull/20463
* | | applies project style guidelinesXavier Noria2015-06-201-7/+7
| | | | | | | | | | | | Just saw these in passing while reading this file.
* | | removes unnecessary backslashes in regexpsXavier Noria2015-06-201-3/+3
| |/ |/| | | | | Colons are not metacharacters.
* | Nitpick :nail_care: [ci skip]Zachary Scott2015-06-181-1/+2
| |
* | Merge pull request #20549 from maurogeorge/distance_of_time_in_words-rdocZachary Scott2015-06-181-0/+20
|\ \ | | | | | | Add RDoc about scope option on distance_of_time_in_words
| * | Add RDoc about scope option on distance_of_time_in_wordsMauro George2015-06-181-0/+20
| | | | | | | | | | | | [ci skip]
* | | Merge pull request #20108 from akshay-vishnoi/button-tagArthur Nogueira Neves2015-06-152-2/+22
|\ \ \ | | | | | | | | Add missing spec and documentation for button_tag helper
| * | | Add missing spec and documentation for button_tag helperAkshay Vishnoi2015-05-242-2/+22
| | | |
* | | | Merge pull request #20107 from ankit8898/av_refac_record_tag_helperArthur Nogueira Neves2015-06-151-2/+1
|\ \ \ \ | | | | | | | | | | Removed not needed includes, As record_tag_helper is moved to a gem we..
| * | | | Removed not needed includes, As record_tag_helper is moved to a gem we are notAnkit Gupta2015-05-101-2/+1
| |/ / / | | | | | | | | | | | | testing is completely here now. RenderErbUtils and AM::Conversion are not used
* | | | Merge pull request #20548 from maurogeorge/collection_check_boxes-rdoc-gotchaZachary Scott2015-06-141-0/+21
|\ \ \ \ | | | | | | | | | | Add gotcha to RDoc of collection_check_boxes
| * | | | Add gotcha to RDoc of collection_check_boxesMauro George2015-06-131-0/+21
| | |/ / | |/| | | | | | | | | | [ci skip]
* / | | Revert "revises a test to account for case-insensitive file systems"Matthew Draper2015-06-141-18/+2
|/ / / | | | | | | | | | This reverts commit d345ce9630ce4c01bc81a09fb015e7bd935600ad.
* | | Merge pull request #20480 from senny/test_runnerYves Senn2015-06-121-0/+4
|\ \ \ | | | | | | | | use our own runner for Rails framework components `bin/test`
| * | | select the AR adapter through `bin/test`.Yves Senn2015-06-111-0/+1
| | | |
| * | | use our runner (`bin/test`) for framework components.Yves Senn2015-06-111-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds a script `bin/test` to most Rails framework components. The script uses the rails minitest plugin to augment the runner. See https://github.com/rails/rails/pull/19571 for details about the plugin. I did not yet add `bin/test` for activerecord, activejob and railties. These components rely on specific setup performed in the rake-tasks.
* | | | Merge pull request #20058 from farukaydin/cache-digests-dependency-rakeRafael Mendonça França2015-06-112-1/+22
|\ \ \ \ | | | | | | | | | | add error log that notify 'file not found' when using cache_digest dependency rake
| * | | | add error log that notify 'file not found' when using ↵Faruk AYDIN2015-05-072-1/+22
| | | | | | | | | | | | | | | | | | | | cache_digests:dependency and cache_digests:nested_dependency tasks
* | | | | Exclude cache_digests:dependencies rake task in api appJorge Bejar2015-06-111-2/+4
| |/ / / |/| | |
* | | | Tiny documentation edits [ci skip]Robin Dupret2015-06-091-7/+7
| | | |
* | | | Raise an ArgumentError when `include_blank` is false for a required field inGrey Baker2015-06-083-3/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `Tags::Base#select_content_tag`. Previously, passing a falsey value to `include_blank` would be ignored if the field was required, and a blank line would still be inserted. The following will now raise instead of quietly failing: `select("post", "category", %w(a required field), { include_blank: false }, required: 'required')`
* | | | [ci skip] Fix hours to minutes in `select_minute`yui-knk2015-06-071-1/+1
| |_|/ |/| |
* | | Merge branch 'master' of github.com:rails/docrailsVijay Dev2015-06-051-1/+1
|\ \ \
| * | | [ci skip] Fix typo you/yourclaudiob2015-05-231-1/+1
| | | |
* | | | Revert "Merge pull request #19685 from vngrs/actionview_parent_layout_bug"Rafael Mendonça França2015-06-022-31/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit a9d58c77da800bb0052c9bfa432828b02526022c, reversing changes made to 041c2c879a3c4086ad3aa6d30fed1eede1d53c11. Reason: The old behavior is how it was working in previous version of Rails since 4.0.x so it is not safe to backport to a stable branch. See https://github.com/rails/rails/issues/19626#issuecomment-89862258 and https://github.com/rails/rails/pull/15050#issuecomment-45333449
* | | | Remove `assigns` and `assert_template`.Guo Xiang Tan2015-05-306-135/+38
| | | |
* | | | Merge pull request #20331 from arunagw/arunagw-remove-unused-package-tasksRafael Mendonça França2015-05-281-7/+0
|\ \ \ \ | | | | | | | | | | Remove unused package tasks
| * | | | Remove unused package tasksArun Agrawal2015-05-281-7/+0
| | | | | | | | | | | | | | | | | | | | We are using `all:build` now.
* | | | | Deprecate `:nothing` option for render methodMehmet Emin İNAÇ2015-05-281-1/+1
|/ / / / | | | | | | | | | | | | `head` method works similar to `render` method with `:nothing` option