Skip to content

Instantly share code, notes, and snippets.

以下のように TracePoint のブロック内の処理を少しずつ追加してベンチマークをとってみる。

  1. トレースなし

  2. ブロックのみ

@tracer = TracePoint.new(:a_call, :a_return, :line){|tp|
}
トレースなし 0.0031299996189773083 0.004700999706983566 0.0031349998898804188 0.0045289997942745686 0.0030399998649954796
配列2つ 0.14409800013527274 0.149187000002712 0.14717700006440282 0.14608300011605024 0.1501710000447929
配列一つ(shift) 0.14645999995991588 0.13693899987265468 0.15416699973866343 0.15971000026911497 0.148286999668926
リングバッファ 0.1528189997188747 0.1525459997355938 0.15298400027677417 0.15116399992257357 0.15816699992865324

以下のように depth をキャッシュしておく。b_call, b_return は method_id などで区別がつけられないのでキャッシュしない。’

def get_depth key
  if @depth_map[key]
    return @depth_map[key]
  end
  depth = caller.size
  @depth_map[key] = depth
 depth
  1. ブロックのみ
@tracer = TracePoint.new(:a_call, :a_return, :line){|tp|
end
  1. skip? メソッド()を追加
@tracer = TracePoint.new(:a_call, :a_return, :line){|tp|

2万件

トレースなし 0.006363000255078077 0.006033000070601702 0.004674999974668026 0.007385000120848417 0.006134000141173601
配列2つ 1.2077299999073148 1.2094470001757145 1.2031790004111826 1.2191599998623133 1.1907759997993708
配列一つ(shift) 1.1787890000268817 1.2063179998658597 1.194932000245899 1.1878820001147687 1.1984939998947084
リングバッファ 1.208700000308454 1.210185999982059 1.2016769996844232 1.2195199998095632 1.2273840000852942
require 'webrick'
require 'json'
binding = TOPLEVEL_BINDING.dup
srv = WEBrick::HTTPServer.new({:BindAddress => '127.0.0.1',
:Port => 8080})
srv.mount_proc('/') {|req, res|
body = JSON.parse req.body
expr = body['expression']
result = binding.eval(expr)
puts result
@ono-max
ono-max / api.rb
Last active October 3, 2022 14:03
# pattern1
def to_rdbg_mimebundle kw
format = {
"application/rdbg+json" => json
}
format, {}
end
# pattern2
def to_rdbg_mimebundle kw
require 'json'
module REXMLInspector
def to_rdbg_mimebundle kw
json = JSON.generate {
type: :tree,
data: get_tree(self)
}
[
{
"application/json" => json
@ono-max
ono-max / sample.rb
Last active September 26, 2022 23:25
module REXMLInspector
def to_obj_inspector kw
[
{
type: :tree,
data: get_tree(self)
}
]
end

Ruby アソシエーション開発助成金2021最終報告: “debug.gem”の利用体験・開発効率の改善

取り組んだこと

 前後期で一貫して取り組んだことは Chrome でのデバッグ機能の実装を通した利用体験・フレームワーク開発による開発効率の改善である。

 前期では、Chrome を使ったデバッグを問題なくできるところを目指し、外部ツール(Chrome、VSCode) とのインターフェースをテストするフレームワーク導入に向けて実装していった。後期では、Chrome DevTools の強みを活かしたリッチな体験、 プロトタイプを通して得られた知見をもとによりよいフレームワーク開発による開発効率の向上を目標に取り組んだ。

Chrome のデバッグ機能について