From 759e3ea62d9c45caf1790f623c21b8936f273d04 Mon Sep 17 00:00:00 2001 From: "Manu Mtz.-Almeida" Date: Fri, 4 Nov 2016 17:59:36 +0100 Subject: [PATCH] perf(item): improve performance of sliding item (#9005) - Using new NativeRafDebouncer - Events are not zone wrapped unless strictly necessary --- src/components/item/item-sliding-gesture.ts | 3 +++ src/components/item/item-sliding.ts | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/item/item-sliding-gesture.ts b/src/components/item/item-sliding-gesture.ts index e7b0cfe7af..65276ebb35 100644 --- a/src/components/item/item-sliding-gesture.ts +++ b/src/components/item/item-sliding-gesture.ts @@ -4,6 +4,7 @@ import { List } from '../list/list'; import { GesturePriority } from '../../gestures/gesture-controller'; import { PanGesture } from '../../gestures/drag-gesture'; import { pointerCoord } from '../../util/dom'; +import { NativeRafDebouncer } from '../../util/debouncer'; const DRAG_THRESHOLD = 10; const MAX_ATTACK_ANGLE = 20; @@ -19,6 +20,8 @@ export class ItemSlidingGesture extends PanGesture { super(list.getNativeElement(), { maxAngle: MAX_ATTACK_ANGLE, threshold: DRAG_THRESHOLD, + zone: false, + debouncer: new NativeRafDebouncer(), gesture: list._gestureCtrl.create('item-sliding', { priority: GesturePriority.SlidingItem, }) diff --git a/src/components/item/item-sliding.ts b/src/components/item/item-sliding.ts index 50d0b0130b..81a901dc92 100644 --- a/src/components/item/item-sliding.ts +++ b/src/components/item/item-sliding.ts @@ -402,7 +402,10 @@ export class ItemSliding { } this.item.setElementStyle(CSS.transform, `translate3d(${-openAmount}px,0,0)`); - this._zone.run(() => this.ionDrag.emit(this)); + let ionDrag = this.ionDrag; + if (ionDrag.observers.length > 0) { + this._zone.run(ionDrag.emit.bind(ionDrag, this)); + } } private _setState(state: SlidingState) {