Просмотр исходного кода

Merge pull request #8347 from overleaf/ae-outline-performance

Only update the outline view when the outline changes

GitOrigin-RevId: aadf0016111a5f3568475b9ee1849acc46934a30
Alf Eaton 4 лет назад
Родитель
Сommit
1f62553b0a
1 измененных файлов с 9 добавлено и 2 удалено
  1. 9 2
      services/web/frontend/js/features/outline/outline-manager.js

+ 9 - 2
services/web/frontend/js/features/outline/outline-manager.js

@@ -1,3 +1,4 @@
+import { isEqual, cloneDeep } from 'lodash'
 import './controllers/outline-controller'
 import './controllers/outline-controller'
 import { matchOutline, nestOutline } from './outline-parser'
 import { matchOutline, nestOutline } from './outline-parser'
 import isValidTeXFile from '../../main/is-valid-tex-file'
 import isValidTeXFile from '../../main/is-valid-tex-file'
@@ -9,6 +10,7 @@ class OutlineManager {
     this.shareJsDoc = null
     this.shareJsDoc = null
     this.isTexFile = false
     this.isTexFile = false
     this.flatOutline = []
     this.flatOutline = []
+    this.previousFlatOutline = []
     this.outline = []
     this.outline = []
     this.highlightedLine = null
     this.highlightedLine = null
     this.ignoreNextScroll = false
     this.ignoreNextScroll = false
@@ -67,14 +69,19 @@ class OutlineManager {
   }
   }
 
 
   updateOutline() {
   updateOutline() {
-    this.outline = []
     if (this.isTexFile) {
     if (this.isTexFile) {
       const content = this.ide.editorManager.getCurrentDocValue()
       const content = this.ide.editorManager.getCurrentDocValue()
       if (content) {
       if (content) {
         this.flatOutline = matchOutline(content)
         this.flatOutline = matchOutline(content)
-        this.outline = nestOutline(this.flatOutline)
+        if (!isEqual(this.flatOutline, this.previousFlatOutline)) {
+          this.previousFlatOutline = cloneDeep(this.flatOutline)
+          this.outline = nestOutline(this.flatOutline)
+        }
+        return
       }
       }
     }
     }
+    this.previousFlatOutline = []
+    this.outline = []
   }
   }
 
 
   // set highlightedLine to the closest outline line above the editorLine
   // set highlightedLine to the closest outline line above the editorLine