dotnet / docfx

Static site generator for .NET API documentation.
https://dotnet.github.io/docfx/
MIT License
4.08k stars 865 forks source link

[Feature Request] Enable faster UID search when using `xrefmap.json` for .NET types #9821

Open filzrev opened 7 months ago

filzrev commented 7 months ago

Is your feature request related to a problem? Please describe.

When using xrefmap for .NET types. It's recommended to use xrefmap file that is located at https://github.com/dotnet/docfx/raw/main/.xrefmap.json. (By #9659.)

Problems

This file contains 312235 reference items. But the sorted: true property is not set. So when searching for specific uid. It requires to execute liner search.

Describe the solution you'd like

As far as I've tested. These items are already sorted by UID with InvariantCulture order. So it can use faster binary search. if sorted: true property is set.

Additional Information Alternatively. It might possible to use following xrefmap files. Is these URLs are still supported?

  1. https://learn.microsoft.com/en-us/dotnet/.xrefmap.json (316 MB)
  2. https://learn.microsoft.com/en-us/dotnet/xrefmap.yml (283 MB)
    • This yml file set sorted: true by default
yufeih commented 7 months ago

Sounds like BasicXrefMapReader should internally turn the map it into a dictionary to speed up lookup.

filzrev commented 7 months ago

On my environment ToDictionary() takes about 125[ms]. And when getting last element. it takes following times.

Liner search 56 [ms]
Binary search 11 [ms]

So it might make sense to create a UID lookup table. (Although it will increase memory footprint)