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