From 5efaac1f2fc38cce6508344d6657af4aeb862820 Mon Sep 17 00:00:00 2001 From: vvo Date: Wed, 10 Feb 2016 16:59:36 +0100 Subject: [PATCH] perf(React, widgets): implement shouldComponentUpdate, reduce bind changes: - stop computing static things in every render() call - avoid using bind and creating too much function references - leverage static properties (no bind) and use shouldComponentUpdate were relevant --- src/components/ClearAll/ClearAll.js | 14 +- .../CurrentRefinedValues.js | 5 + src/components/Hits.js | 8 ++ src/components/Pagination/Pagination.js | 28 ++-- src/components/Pagination/PaginationLink.js | 19 ++- .../Pagination/__tests__/Pagination-test.js | 8 +- src/components/PoweredBy/PoweredBy.js | 4 + src/components/PriceRanges/PriceRanges.js | 26 ++-- src/components/PriceRanges/PriceRangesForm.js | 10 +- .../PriceRanges/__tests__/PriceRanges-test.js | 38 +----- .../RefinementList/RefinementList.js | 34 +++-- .../RefinementList/RefinementListItem.js | 49 +++++++ .../__tests__/RefinementList-test.js | 129 +++++++++--------- .../__tests__/RefinementListItem-test.js | 58 ++++++++ src/components/Selector.js | 12 +- src/components/Slider/Slider.js | 12 +- src/components/Stats/Stats.js | 5 + src/components/Template.js | 66 +++++---- src/decorators/headerFooter.js | 26 ++-- src/lib/InstantSearch.js | 8 +- .../clear-all/__tests__/clear-all-test.js | 1 + src/widgets/clear-all/clear-all.js | 36 +++-- .../__tests__/current-refined-values-test.js | 74 +++++++--- .../current-refined-values.js | 7 +- .../__tests__/hierarchical-menu-test.js | 77 ++++++----- .../hierarchical-menu/hierarchical-menu.js | 86 ++++++------ .../__tests__/hits-per-page-selector-test.js | 14 +- .../hits-per-page-selector.js | 23 ++-- src/widgets/hits/__tests__/hits-test.js | 1 + src/widgets/hits/hits.js | 9 +- src/widgets/menu/menu.js | 66 +++++---- .../__tests__/numeric-refinement-list-test.js | 36 +++-- .../numeric-refinement-list.js | 62 ++++----- .../__tests__/numeric-selector-test.js | 6 +- .../numeric-selector/numeric-selector.js | 34 +++-- .../pagination/__tests__/pagination-test.js | 3 + src/widgets/pagination/pagination.js | 53 ++++--- .../__tests__/price-ranges-test.js | 30 ++-- src/widgets/price-ranges/price-ranges.js | 98 ++++++------- .../__tests__/range-slider-test.js | 1 + src/widgets/range-slider/range-slider.js | 27 ++-- .../__tests__/refinement-list-test.js | 11 +- .../refinement-list/refinement-list.js | 60 ++++---- .../__tests__/sort-by-selector-test.js | 6 +- .../sort-by-selector/sort-by-selector.js | 27 ++-- .../star-rating/__tests__/star-rating-test.js | 33 +++-- src/widgets/star-rating/star-rating.js | 45 +++--- src/widgets/stats/stats.js | 27 ++-- src/widgets/toggle/__tests__/toggle-test.js | 45 +++--- src/widgets/toggle/toggle.js | 58 ++++---- 50 files changed, 927 insertions(+), 688 deletions(-) create mode 100644 src/components/RefinementList/RefinementListItem.js create mode 100644 src/components/RefinementList/__tests__/RefinementListItem-test.js diff --git a/src/components/ClearAll/ClearAll.js b/src/components/ClearAll/ClearAll.js index 671d205a04..3e58b1594d 100644 --- a/src/components/ClearAll/ClearAll.js +++ b/src/components/ClearAll/ClearAll.js @@ -3,6 +3,15 @@ import Template from '../Template.js'; import {isSpecialClick} from '../../lib/utils.js'; class ClearAll extends React.Component { + componentWillMount() { + this.handleClick = this.handleClick.bind(this); + } + + shouldComponentUpdate(nextProps) { + return this.props.url !== nextProps.url || + this.props.hasRefinements !== nextProps.hasRefinements; + } + handleClick(e) { if (isSpecialClick(e)) { // do not alter the default browser behavior @@ -14,16 +23,15 @@ class ClearAll extends React.Component { } render() { - const className = this.props.cssClasses.link; const data = { hasRefinements: this.props.hasRefinements }; return (