mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/CodeMirror
synced 2024-11-15 18:29:24 +00:00
6bc81ffd50
My previous patch Icbb1122 focused on the behavior of the matchbrackets addon when the text is *edited*. This patch here is about moving the cursor without changing the text. I realized the addon re-draws everything every time the cursor moves, even if the highlighted pair of brackets is still the same. This triggers very expensive code in the CodeMirror lib. I had a look at this expensive code, but did not found an easy win. It just is what it is: an expensive re-draw. Instead I introduced a caching layer that remembers the positions of the previously highlighted brackets and bails out as early as possible when nothing changed. The biggest chunk of code is that "did something change?" comparison. It looks expensive, but typically isn't. There are typically only 2 elements in the array for a single opening–closing pair. (Possibly more when there are multiple text selections.) The elements in the two arrays are typically in the same order. (Except the cursor is on the closing bracket.) Which means the nested `every` → `for` loop will typically be executed 2 times only – one time for each of the 2 elements. I won't upload this change upstream because it is only relevant together with our custom "in the middle" bracket highlighting. With our customization we have many, many situations where the highlighted brackets don't change. This (almost) doesn't happen upstream. Bug: T270317 Change-Id: I789b45362388f0818e797f789f6af427a35e3e06 |
||
---|---|---|
.. | ||
matchbrackets-wmde.js |