Skip to content

Optimization of REXML::Document#add, #add_element#311

Open
naitoh wants to merge 1 commit intoruby:masterfrom
naitoh:fix_Document_add_add_element_performance
Open

Optimization of REXML::Document#add, #add_element#311
naitoh wants to merge 1 commit intoruby:masterfrom
naitoh:fix_Document_add_add_element_performance

Conversation

@naitoh
Copy link
Copy Markdown
Contributor

@naitoh naitoh commented May 5, 2026

Benchmark

$ benchmark-driver benchmark/parse_comment.yaml
                         before       after  before(YJIT)  after(YJIT)
           top_level    48.497k     54.645k        7.951k       8.288k i/s -     100.000 times in 0.002062s 0.001830s 0.012577s 0.012066s
          in_doctype    48.615k     50.994k        7.930k       7.820k i/s -     100.000 times in 0.002057s 0.001961s 0.012611s 0.012787s
       after_doctype    63.251k     64.061k        9.569k       9.434k i/s -     100.000 times in 0.001581s 0.001561s 0.010450s 0.010600s
       many_comments     67.653     611.015       117.191      929.290 i/s -     100.000 times in 1.478125s 0.163662s 0.853309s 0.107609s

Comparison:
                        top_level
               after:     54644.8 i/s
              before:     48496.6 i/s - 1.13x  slower
         after(YJIT):      8287.7 i/s - 6.59x  slower
        before(YJIT):      7951.0 i/s - 6.87x  slower

                       in_doctype
               after:     50994.4 i/s
              before:     48614.5 i/s - 1.05x  slower
        before(YJIT):      7929.6 i/s - 6.43x  slower
         after(YJIT):      7820.4 i/s - 6.52x  slower

                    after_doctype
               after:     64061.5 i/s
              before:     63251.1 i/s - 1.01x  slower
        before(YJIT):      9569.4 i/s - 6.69x  slower
         after(YJIT):      9434.0 i/s - 6.79x  slower

                    many_comments
         after(YJIT):       929.3 i/s
               after:       611.0 i/s - 1.52x  slower
        before(YJIT):       117.2 i/s - 7.93x  slower
              before:        67.7 i/s - 13.74x  slower
  • YJIT=ON : 0.98 - 7.93x faster
  • YJIT=OFF : 1.01 - 9.02x faster

## Benchmark
```
$ benchmark-driver benchmark/parse_comment.yaml
                         before       after  before(YJIT)  after(YJIT)
           top_level    48.497k     54.645k        7.951k       8.288k i/s -     100.000 times in 0.002062s 0.001830s 0.012577s 0.012066s
          in_doctype    48.615k     50.994k        7.930k       7.820k i/s -     100.000 times in 0.002057s 0.001961s 0.012611s 0.012787s
       after_doctype    63.251k     64.061k        9.569k       9.434k i/s -     100.000 times in 0.001581s 0.001561s 0.010450s 0.010600s
       many_comments     67.653     611.015       117.191      929.290 i/s -     100.000 times in 1.478125s 0.163662s 0.853309s 0.107609s

Comparison:
                        top_level
               after:     54644.8 i/s
              before:     48496.6 i/s - 1.13x  slower
         after(YJIT):      8287.7 i/s - 6.59x  slower
        before(YJIT):      7951.0 i/s - 6.87x  slower

                       in_doctype
               after:     50994.4 i/s
              before:     48614.5 i/s - 1.05x  slower
        before(YJIT):      7929.6 i/s - 6.43x  slower
         after(YJIT):      7820.4 i/s - 6.52x  slower

                    after_doctype
               after:     64061.5 i/s
              before:     63251.1 i/s - 1.01x  slower
        before(YJIT):      9569.4 i/s - 6.69x  slower
         after(YJIT):      9434.0 i/s - 6.79x  slower

                    many_comments
         after(YJIT):       929.3 i/s
               after:       611.0 i/s - 1.52x  slower
        before(YJIT):       117.2 i/s - 7.93x  slower
              before:        67.7 i/s - 13.74x  slower
```
- YJIT=ON : 0.98 - 7.93x faster
- YJIT=OFF : 1.01 - 9.02x faster
@naitoh naitoh requested a review from kou May 5, 2026 11:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant