Commit 67e4961
authored
Lazy page index in RDoc::Store (42.7% perf improvement) (#1811)
`RDoc::Store#page` previously scanned every known file for each page
lookup, including repeated misses.
This adds a lazily built hash index keyed by both `page_name` and
`base_name`, preserving existing first-match behavior when names
collide.
The index is invalidated whenever files are added, removed, or
bulk-loaded. The implementation remains private to `RDoc::Store` and
adds no public API or configuration.
## Benchmark
For testing I used latest rdoc(master) + rdoc-markdown gem. Generation
was done on a rails codebase.
| Metric | Before | After | Change |
| --- | ---: | ---: | ---: |
| Generation time | 74.91s | 42.08s | -43.8% |
| Total time | 88.52s | 50.76s | -42.7% |
| Peak RSS | 411.1 MiB | 422.8 MiB | +2.8% |
Total time to generate documentation decreased from 88.52s to 50.76s
(42.7%).1 parent 976f13a commit 67e4961
3 files changed
Lines changed: 60 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
182 | 182 | | |
183 | 183 | | |
184 | 184 | | |
| 185 | + | |
185 | 186 | | |
186 | 187 | | |
187 | 188 | | |
| |||
204 | 205 | | |
205 | 206 | | |
206 | 207 | | |
| 208 | + | |
207 | 209 | | |
208 | 210 | | |
209 | 211 | | |
| |||
743 | 745 | | |
744 | 746 | | |
745 | 747 | | |
| 748 | + | |
746 | 749 | | |
747 | 750 | | |
748 | 751 | | |
| |||
912 | 915 | | |
913 | 916 | | |
914 | 917 | | |
915 | | - | |
916 | | - | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
917 | 921 | | |
| 922 | + | |
| 923 | + | |
918 | 924 | | |
919 | 925 | | |
920 | 926 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
146 | 146 | | |
147 | 147 | | |
148 | 148 | | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
149 | 162 | | |
150 | 163 | | |
151 | 164 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
650 | 650 | | |
651 | 651 | | |
652 | 652 | | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
| 675 | + | |
| 676 | + | |
| 677 | + | |
| 678 | + | |
| 679 | + | |
| 680 | + | |
| 681 | + | |
| 682 | + | |
| 683 | + | |
| 684 | + | |
| 685 | + | |
| 686 | + | |
| 687 | + | |
| 688 | + | |
| 689 | + | |
| 690 | + | |
| 691 | + | |
653 | 692 | | |
654 | 693 | | |
655 | 694 | | |
| |||
0 commit comments