From c69f38e81bb3a558add4ca9c36de41638e124c28 Mon Sep 17 00:00:00 2001
From: Jack Reed <phillipjreed@gmail.com>
Date: Tue, 19 Feb 2019 07:51:35 -0700
Subject: [PATCH] Debounces update-viewport to reduce re-renders and improve
 performance

Fixes #1910 by debouncing the state update calls which can be expensive.
Also uses the same debounce timing as Mirador 2.
---
 package.json                          | 1 +
 src/components/OpenSeadragonViewer.js | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/package.json b/package.json
index a145b2942..da64e5c5f 100644
--- a/package.json
+++ b/package.json
@@ -36,6 +36,7 @@
     "deepmerge": "^3.1.0",
     "i18next": "^14.0.1",
     "intersection-observer": "^0.5.1",
+    "lodash": "^4.17.11",
     "manifesto.js": "^3.0.9",
     "node-fetch": "^2.3.0",
     "node-sass": "^4.9.2",
diff --git a/src/components/OpenSeadragonViewer.js b/src/components/OpenSeadragonViewer.js
index 88b87a085..1dc327da7 100644
--- a/src/components/OpenSeadragonViewer.js
+++ b/src/components/OpenSeadragonViewer.js
@@ -1,6 +1,7 @@
 import React, { Component } from 'react';
 import PropTypes from 'prop-types';
 import OpenSeadragon from 'openseadragon';
+import debounce from 'lodash/debounce';
 import ns from '../config/css-ns';
 import ZoomControls from '../containers/ZoomControls';
 
@@ -36,7 +37,8 @@ class OpenSeadragonViewer extends Component {
       showNavigationControl: false,
       preserveImageSizeOnResize: true,
     });
-    this.viewer.addHandler('viewport-change', this.onViewportChange);
+    console.log(this.viewer);
+    this.viewer.addHandler('viewport-change', debounce(this.onViewportChange, 300));
 
     if (viewer) {
       this.viewer.viewport.panTo(viewer, false);
-- 
GitLab