Faster, better and more precisely than ever before
I'm extremely excited about today's release, but before we jump into the release notes for version 6 I want to welcome @xt0rted to the team. He has contributed several improvements ranging from bug fixes to adding .NET support and many other improvements. Welcome Brian
What's new in v6
Originally this release was all about performance, but unintentionally it fixed other issues as well.
Back in June last year, @fregante opened an issue with the title "A script in the extension "OctoLinker" is causing Firefox to slow down". Until then, I wasn't aware OctoLinker was slow in Firefox.
OctoLinker uses a library called findAndReplaceDOMText which allows us to apply regular expression against the DOM and wraps each match with a link (now you know our secret sauce). Traversing the DOM for larger files took some time (especially on Firefox). In some circumstances, this even caused Firefox to freeze. This was caused by too many DOM lookups when applying the same regular expression over and over again to find keywords in the DOM.
DOM parsing in OctoLinker v5
DOM lookups are expensive and the root cause of this performance problem. Our solution to this is a new step before traversing the DOM. All regular expressions are performed against a string representation first followed by a very targeted DOM query to take online lines into account with a match. This speeds it up significantly.
DOM parsing in OctoLinker v6
This reduced the processing time by ~80% on large files and by ~30% for medium size files. In addition, we cap files to the first 5.000 lines to support enormous files with tens of thousand lines.
- OctoLinker now support for CODEOWNERS file #786
- Link dependencies in a package.json file with a version value of "latest" #791
- Expand .NET and nuget support #785 #787
- Link dependencies in a package.json file with a version value of
- Link dependencies in a package.json file with a git url set as version value #793
- Improve UX when adding token through settings dialog #783
- Fix OctoLinker mascot position in notification bar #782
- Inconsistent linking when value appears on both sides of an assignment #618
- Package name in a js template literal disappears #590
- Commit comment elements are being parsed as dependencies and turned into links #454
I am truly grateful to all the wonderful humans and companies supporting the development of OctoLinker. If you find OctoLinker useful, please consider donations through GitHub Sponsors or Open Collective – Thank you