فهرست منبع

Debounce position updates in review panel for improved performance (#23190)

* Debounce position updates in review panel for improved performance

* move debounce inside useMemo

* move 'review-panel:position' inside debounce

GitOrigin-RevId: 2b2d0e59537875f85036b0105ccb1a7d2035c0de
Domagoj Kriskovic 1 سال پیش
والد
کامیت
97562c0042
1فایلهای تغییر یافته به همراه16 افزوده شده و 7 حذف شده
  1. 16 7
      services/web/frontend/js/features/review-panel-new/components/review-panel-current-file.tsx

+ 16 - 7
services/web/frontend/js/features/review-panel-new/components/review-panel-current-file.tsx

@@ -32,6 +32,7 @@ import { reviewTooltipStateField } from '@/features/source-editor/extensions/rev
 import ReviewPanelMoreCommentsButton from './review-panel-more-comments-button'
 import useMoreCommments from '../hooks/use-more-comments'
 import { Decoration } from '@codemirror/view'
+import { debounce } from 'lodash'
 
 type AggregatedRanges = {
   changes: Change<EditOperation>[]
@@ -116,6 +117,19 @@ const ReviewPanelCurrentFile: FC = () => {
     false
   )?.addCommentRanges
 
+  const setUpdatedPositions = useMemo(
+    () =>
+      debounce(() => {
+        setPositions(new Map(positionsRef.current))
+        window.setTimeout(() => {
+          containerRef.current?.dispatchEvent(
+            new Event('review-panel:position')
+          )
+        })
+      }, 50),
+    []
+  )
+
   const positionsMeasureRequest = useCallback(() => {
     if (aggregatedRanges) {
       view.requestMeasure({
@@ -166,16 +180,11 @@ const ReviewPanelCurrentFile: FC = () => {
           }
         },
         write() {
-          setPositions(new Map(positionsRef.current))
-          window.setTimeout(() => {
-            containerRef.current?.dispatchEvent(
-              new Event('review-panel:position')
-            )
-          })
+          setUpdatedPositions()
         },
       })
     }
-  }, [view, aggregatedRanges, addCommentRanges])
+  }, [view, aggregatedRanges, addCommentRanges, setUpdatedPositions])
 
   useEffect(positionsMeasureRequest, [positionsMeasureRequest])
   useEventListener('editor:geometry-change', positionsMeasureRequest)