1. 16 9月, 2020 1 次提交
    • J
      Improve Action View `translate` helper · d81926fd
      Jonathan Hefner 提交于
      This disentangles the control flow between Action View's `translate` and
      I18n's `translate`.  In doing so, it fixes a handful of corner cases,
      for which tests have now been added.  It also reduces memory
      allocations, and improves speed when using a default:
      
      **Memory**
      
      ```ruby
      require "benchmark/memory"
      
      Benchmark.memory do |x|
        x.report("warmup") { translate(:"translations.foo"); translate(:"translations.html") }
        x.report("text") { translate(:"translations.foo") }
        x.report("html") { translate(:"translations.html") }
        x.report("text 1 default") { translate(:"translations.missing", default: :"translations.foo") }
        x.report("html 1 default") { translate(:"translations.missing", default: :"translations.html") }
        x.report("text 2 defaults") { translate(:"translations.missing", default: [:"translations.missing", :"translations.foo"]) }
        x.report("html 2 defaults") { translate(:"translations.missing", default: [:"translations.missing", :"translations.html"]) }
      end
      ```
      
      Before:
      
      ```
                      text     1.240k memsize (     0.000  retained)
                              13.000  objects (     0.000  retained)
                               2.000  strings (     0.000  retained)
                      html     1.600k memsize (     0.000  retained)
                              19.000  objects (     0.000  retained)
                               2.000  strings (     0.000  retained)
            text 1 default     4.728k memsize (     1.200k retained)
                              39.000  objects (     4.000  retained)
                               5.000  strings (     0.000  retained)
            html 1 default     5.056k memsize (     1.160k retained)
                              41.000  objects (     3.000  retained)
                               4.000  strings (     0.000  retained)
           text 2 defaults     7.464k memsize (     2.392k retained)
                              54.000  objects (     6.000  retained)
                               4.000  strings (     0.000  retained)
           html 2 defaults     7.944k memsize (     2.384k retained)
                              60.000  objects (     6.000  retained)
                               4.000  strings (     0.000  retained)
      ```
      
      After:
      
      ```
                      text   952.000  memsize (     0.000  retained)
                               9.000  objects (     0.000  retained)
                               1.000  strings (     0.000  retained)
                      html     1.008k memsize (     0.000  retained)
                              10.000  objects (     0.000  retained)
                               1.000  strings (     0.000  retained)
            text 1 default     2.400k memsize (    40.000  retained)
                              24.000  objects (     1.000  retained)
                               4.000  strings (     0.000  retained)
            html 1 default     2.464k memsize (     0.000  retained)
                              22.000  objects (     0.000  retained)
                               2.000  strings (     0.000  retained)
           text 2 defaults     3.232k memsize (     0.000  retained)
                              30.000  objects (     0.000  retained)
                               2.000  strings (     0.000  retained)
           html 2 defaults     3.456k memsize (     0.000  retained)
                              32.000  objects (     0.000  retained)
                               2.000  strings (     0.000  retained)
      ```
      
      **Speed**
      
      ```ruby
      require "benchmark/ips"
      
      Benchmark.ips do |x|
        x.report("text") { translate(:"translations.foo") }
        x.report("html") { translate(:"translations.html") }
        x.report("text 1 default") { translate(:"translations.missing", default: :"translations.foo") }
        x.report("html 1 default") { translate(:"translations.missing", default: :"translations.html") }
        x.report("text 2 defaults") { translate(:"translations.missing", default: [:"translations.missing", :"translations.foo"]) }
        x.report("html 2 defaults") { translate(:"translations.missing", default: [:"translations.missing", :"translations.html"]) }
      end
      ```
      
      Before:
      
      ```
                      text     35.685k (± 0.7%) i/s -    179.050k in   5.017773s
                      html     28.569k (± 3.1%) i/s -    143.871k in   5.040128s
            text 1 default     13.953k (± 2.0%) i/s -     70.737k in   5.071651s
            html 1 default     12.507k (± 0.4%) i/s -     63.546k in   5.080908s
           text 2 defaults      9.103k (± 0.3%) i/s -     46.308k in   5.087323s
           html 2 defaults      8.570k (± 4.3%) i/s -     43.071k in   5.034322s
      ```
      
      After:
      
      ```
                      text     36.694k (± 2.0%) i/s -    186.864k in   5.094367s
                      html     30.415k (± 0.5%) i/s -    152.900k in   5.027226s
            text 1 default     18.095k (± 2.7%) i/s -     91.086k in   5.036857s
            html 1 default     15.934k (± 1.7%) i/s -     80.223k in   5.036085s
           text 2 defaults     12.179k (± 0.6%) i/s -     61.659k in   5.062910s
           html 2 defaults     11.193k (± 2.1%) i/s -     56.406k in   5.041433s
      ```
      d81926fd
  2. 12 9月, 2020 1 次提交
    • J
      Refactor Action View `translate` helper · 98a76a50
      Jonathan Hefner 提交于
      This refactor incidentally fixes a corner case when `translate` is
      called with a block, the translation is missing, and
      `debug_missing_translation` is false.
      
      This commit adds a test for the above corner case, and additional tests
      for existing behavior.
      98a76a50
  3. 11 9月, 2020 2 次提交
  4. 10 9月, 2020 5 次提交
  5. 09 9月, 2020 5 次提交
  6. 08 9月, 2020 8 次提交
  7. 07 9月, 2020 5 次提交
  8. 06 9月, 2020 8 次提交
  9. 05 9月, 2020 1 次提交
  10. 04 9月, 2020 4 次提交