1. 25 7月, 2020 1 次提交
    • J
      Add label attribute to <option> from include_blank · e6950a33
      Jonathan Hefner 提交于
      The `:include_blank` option of various `<select>`-related helpers causes
      an `<option>` element with no content to be rendered.  However, the
      [HTML spec] says that unless an `<option>` element has a `label`
      attribute (which must be non-empty), its content must be "Text that is
      not inter-element whitespace."
      
      In #24923, this issue was addressed for `select_tag` by adding a `label`
      attribute to the `<option>`.  This commit addresses the issue in the
      same manner for `FormBuilder#select` and various date / time select
      helpers.
      
      [HTML spec]: https://html.spec.whatwg.org/multipage/form-elements.html#the-option-element
      e6950a33
  2. 24 7月, 2020 3 次提交
  3. 23 7月, 2020 6 次提交
    • D
      Alter regexp on initialize to avoid extra ast pass · 4b01bded
      Daniel Colson 提交于
      Along the same lines as #38901, #39903, and #39914, this commit removes
      one pass through the journey ast in an attempt to improve application
      boot time.
      
      Before this commit, `Mapper#path` would iterate through the ast to alter
      the regex for custom routes. With this commit we move the regex
      alterations to initialize, where we were already iterating through the
      ast.
      
      The Benchmark for this change is similar to what we have been seeing in
      the other PRs.
      
      ```
      Warming up --------------------------------------
                     after    13.121k i/100ms
                    before     7.416k i/100ms
      Calculating -------------------------------------
                     after    128.469k (± 3.1%) i/s -    642.929k in 5.009391s
                    before     76.561k (± 1.8%) i/s -    385.632k in 5.038677s
      
      Comparison:
                     after:   128469.4 i/s
                    before:    76560.8 i/s - 1.68x  (± 0.00) slower
      
      Calculating -------------------------------------
                     after   160.000  memsize (     0.000  retained)
                               3.000  objects (     0.000  retained)
                               0.000  strings (     0.000  retained)
                    before   360.000  memsize (     0.000  retained)
                               6.000  objects (     0.000  retained)
                               0.000  strings (     0.000  retained)
      
      Comparison:
                     after:        160 allocated
                    before:        360 allocated - 2.25x more
      ```
      4b01bded
    • R
      43b83955
    • R
      Merge pull request #39881 from kamipo/arel_attribute_normalization · 3af558e9
      Ryuta Kamizono 提交于
      Move Arel attribute normalization into `arel_table`
      3af558e9
    • R
      Deprecate `arel_attribute` internal API which is no longer used · 1a70f34c
      Ryuta Kamizono 提交于
      Use `arel_table` directly instead.
      1a70f34c
    • R
      Merge pull request #39903 from composerinteralia/fewer-passes-through-ast · f0de4734
      Ryuta Kamizono 提交于
      Consolidate passes through path ast
      f0de4734
    • D
      Consolidate passes through path ast · 6a2adeb3
      Daniel Colson 提交于
      Along the same lines as https://github.com/rails/rails/pull/38901,
      this commit makes a small performance enhancement by iterating through
      the ast once instead of twice when initializing a Mapping.
      
      This stemmed from work to improve the boot time of an application with
      3500+ routes. This patch only shaves off about 70ms from our boot time,
      and about 25000 allocations, but every little bit counts!
      
      Benchmark
      ---
      
      ```rb
      
      require "bundler/inline"
      
      gemfile(true) do
        source "https://rubygems.org"
      
        git_source(:github) { |repo| "https://github.com/#{repo}.git" }
      
        # Activate the gem you are reporting the issue against.
        gem "rails", path: "/Users/daniel/Desktop/oss/rails/rails"
        gem "benchmark-ips"
        gem "benchmark-memory", require: "benchmark/memory"
      end
      
      require "action_controller/railtie"
      
      class TestApp < Rails::Application
        config.root = __dir__
        config.hosts << "example.org"
        config.session_store :cookie_store, key: "cookie_store_key"
        secrets.secret_key_base = "secret_key_base"
      
        config.logger = Logger.new($stdout)
        Rails.logger = config.logger
      
        routes.draw do
          get("/*wildcard", to: "controller#index")
        end
      end
      ```
      
      With the benchmarking code inserted into Mapper#initialize:
      
      ```rb
      after = -> {
        path_params = []
        wildcard_options = {}
        ast.each do |node|
          if node.symbol?
            path_params << node.to_sym
          elsif node.star? && formatted != false
            # Add a constraint for wildcard route to make it non-greedy and match the
            # optional format part of the route by default.
            wildcard_options[node.name.to_sym] ||= /.+?/
          end
        end
      
        wildcard_options.merge(options)
      }
      
      before = -> {
        path_params = ast.find_all(&:symbol?).map(&:to_sym)
      
        add_wildcard_options(options, formatted, ast)
      }
      
      puts "IPS"
      
      Benchmark.ips do |x|
        x.report("before") { before.call }
        x.report("after") { after.call }
        x.compare!
      end
      
      puts "MEMORY"
      
      Benchmark.memory do |x|
        x.report("before") { before.call }
        x.report("after") { after.call }
        x.compare!
      end
      ```
      
      The results are:
      
      ```
      IPS
      Warming up --------------------------------------
                    before    14.352k i/100ms
                     after    30.852k i/100ms
      Calculating -------------------------------------
                    before    135.675k (± 3.7%) i/s -    688.896k in   5.084368s
                     after    288.126k (± 3.3%) i/s -      1.450M in   5.038072s
      
      Comparison:
                     after:   288126.4 i/s
                    before:   135675.1 i/s - 2.12x  (± 0.00) slower
      
      MEMORY
      Calculating -------------------------------------
                    before   360.000  memsize (     0.000  retained)
                               7.000  objects (     0.000  retained)
                               0.000  strings (     0.000  retained)
                     after   200.000  memsize (     0.000  retained)
                               4.000  objects (     0.000  retained)
                               0.000  strings (     0.000  retained)
      
      comparison:
                     after:        200 allocated
                    before:        360 allocated - 1.80x more  end
      ```
      6a2adeb3
  4. 22 7月, 2020 7 次提交
  5. 21 7月, 2020 3 次提交
  6. 20 7月, 2020 4 次提交
  7. 19 7月, 2020 6 次提交
  8. 18 7月, 2020 3 次提交
  9. 17 7月, 2020 5 次提交
  10. 16 7月, 2020 1 次提交
  11. 15 7月, 2020 1 次提交