org-real-apply should only parse the buffer once

I really like the concept behind org-real, but find it unusably slow in my main todo.org file (which is 906K and 21,668 lines in size).

I found using the profiler that most of the time is spent in org-real-apply, which contains this code:

        (while new-containers
          (let ((primary (plist-get (car new-containers) :name))
                (changes '())
                old-containers)
            (org-element-map (org-element-parse-buffer) 'link

My question here is why the whole buffer is being parsed for every element in new-containers? Should these traversals be flipped, since it's far slower to parse the Org buffer than it is to walk through a Lisp list? Or does the behavior of the element map change with each iteration?