Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use frozen string for hash key #420

Merged
merged 1 commit into from Jun 26, 2020
Merged

Commits on Jun 25, 2020

  1. Use frozen string for hash key

    When use non-frozen string for hash key with `rb_hash_aset()`, it will duplicate and freeze it internally.
    To avoid duplicate and freeze, this patch will give a frozen string in `rb_hash_aset()`.
    
    ```
    Warming up --------------------------------------
                    json    14.000  i/100ms
    Calculating -------------------------------------
                    json    148.844  (± 1.3%) i/s -    756.000  in   5.079969s
    ```
    
    ```
    Warming up --------------------------------------
                    json    16.000  i/100ms
    Calculating -------------------------------------
                    json    165.608  (± 1.8%) i/s -    832.000  in   5.025367s
    ```
    
    ```
    require 'json'
    require 'securerandom'
    require 'benchmark/ips'
    
    obj = []
    
    1000.times do |i|
      obj << {
        "id": i,
        "uuid": SecureRandom.uuid,
        "created_at": Time.now
      }
    end
    
    json = obj.to_json
    
    Benchmark.ips do |x|
      x.report "json" do |iter|
        count = 0
        while count < iter
          JSON.parse(json)
          count += 1
        end
      end
    end
    ```
    Watson1978 authored and marcandre committed Jun 25, 2020
    Copy the full SHA
    18292c0 View commit details
    Browse the repository at this point in the history