基准测试 gem 改进
Benchmarking gem improvements
我正在努力改进我自己的一个 gem。我希望能够获得一些关于我提出的各种想法的改进幅度(如果有的话)的数据。
通常我使用 benchmark/ips 工具进行测试。
所以我想加载我的旧版本 gem 和新版本,以便进行并行测试。
我不知道如何加载相同的两个版本 gem 并根据需要有选择地应用它们。
到目前为止,我最好的想法是克隆旧的 gem,并使用更改后的名称构建一个本地副本,例如 "old_gem_name"。然后加载它以进行比较。
有没有更好的方法?
我会使用两个不同的 Gemfile 来解决这个问题。
所以假设您有一个 benchmark.rb
文件,其中包含以下内容:
# benchmark.rb
require 'benchmark'
puts Benchmark.measure { 1000.times{ call_to_gem_method} }
然后使用您的两个不同的 Gemfile,一个名为 Gemfile-oldgem
,另一个名为 Gemfile-newgem
,您执行以下操作:
# Gemfile-oldgem
gem "mygem", :path => "/path/to/oldgem/mygem"
运行 这是旧的 gem 基准:
BUNDLE_GEMFILE=Gemfile-oldgem bundle exec ruby benchmark.rb
对于新的 gem 你有:
# Gemfile-newgem
gem "mygem", :path => "/path/to/newgem/mygem"
运行 这是基准测试:
BUNDLE_GEMFILE=Gemfile-newgem bundle exec ruby benchmark.rb
我正在努力改进我自己的一个 gem。我希望能够获得一些关于我提出的各种想法的改进幅度(如果有的话)的数据。
通常我使用 benchmark/ips 工具进行测试。
所以我想加载我的旧版本 gem 和新版本,以便进行并行测试。
我不知道如何加载相同的两个版本 gem 并根据需要有选择地应用它们。
到目前为止,我最好的想法是克隆旧的 gem,并使用更改后的名称构建一个本地副本,例如 "old_gem_name"。然后加载它以进行比较。
有没有更好的方法?
我会使用两个不同的 Gemfile 来解决这个问题。
所以假设您有一个 benchmark.rb
文件,其中包含以下内容:
# benchmark.rb
require 'benchmark'
puts Benchmark.measure { 1000.times{ call_to_gem_method} }
然后使用您的两个不同的 Gemfile,一个名为 Gemfile-oldgem
,另一个名为 Gemfile-newgem
,您执行以下操作:
# Gemfile-oldgem
gem "mygem", :path => "/path/to/oldgem/mygem"
运行 这是旧的 gem 基准:
BUNDLE_GEMFILE=Gemfile-oldgem bundle exec ruby benchmark.rb
对于新的 gem 你有:
# Gemfile-newgem
gem "mygem", :path => "/path/to/newgem/mygem"
运行 这是基准测试:
BUNDLE_GEMFILE=Gemfile-newgem bundle exec ruby benchmark.rb