Skip to content

Commit d7eaeb9

Browse files
authored
ref: Avoid unnecessary cloning of objects or arrays (#125)
Small refactors to avoid unnecessary work being done.
1 parent 67fc31d commit d7eaeb9

File tree

4 files changed

+9
-24
lines changed

4 files changed

+9
-24
lines changed

packages/rrweb/src/record/observer.ts

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -430,15 +430,6 @@ function initViewportResizeObserver(
430430
return on('resize', updateDimension, win);
431431
}
432432

433-
function wrapEventWithUserTriggeredFlag(
434-
v: inputValue,
435-
enable: boolean,
436-
): inputValue {
437-
const value = { ...v };
438-
if (!enable) delete value.userTriggered;
439-
return value;
440-
}
441-
442433
export const INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];
443434
const lastInputValueMap: WeakMap<EventTarget, inputValue> = new WeakMap();
444435
function initInputObserver({
@@ -527,10 +518,9 @@ function initInputObserver({
527518

528519
cbWithDedup(
529520
target,
530-
callbackWrapper(wrapEventWithUserTriggeredFlag)(
531-
{ text, isChecked, userTriggered },
532-
userTriggeredOnInput,
533-
),
521+
userTriggeredOnInput
522+
? { text, isChecked, userTriggered }
523+
: { text, isChecked },
534524
);
535525
// if a radio was checked
536526
// the other radios with the same name attribute will be unchecked.
@@ -549,14 +539,9 @@ function initInputObserver({
549539
});
550540
cbWithDedup(
551541
el,
552-
callbackWrapper(wrapEventWithUserTriggeredFlag)(
553-
{
554-
text,
555-
isChecked: !isChecked,
556-
userTriggered: false,
557-
},
558-
userTriggeredOnInput,
559-
),
542+
userTriggeredOnInput
543+
? { text, isChecked: !isChecked, userTriggered: false }
544+
: { text, isChecked: !isChecked },
560545
);
561546
}
562547
});

packages/rrweb/src/record/observers/canvas/2d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ export default function initCanvas2DMutationObserver(
5353
// Using setTimeout as toDataURL can be heavy
5454
// and we'd rather not block the main thread
5555
setTimeout(() => {
56-
const recordArgs = serializeArgs([...args], win, this);
56+
const recordArgs = serializeArgs(args, win, this);
5757
cb(this.canvas, {
5858
type: CanvasContext['2D'],
5959
property: prop,

packages/rrweb/src/record/observers/canvas/serialize-args.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ export const serializeArgs = (
133133
win: IWindow,
134134
ctx: RenderingContext,
135135
) => {
136-
return [...args].map((arg) => serializeArg(arg, win, ctx));
136+
return args.map((arg) => serializeArg(arg, win, ctx));
137137
};
138138

139139
export const isInstanceOfWebGLObject = (

packages/rrweb/src/record/observers/canvas/webgl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ function patchGLPrototype(
6060
true,
6161
)
6262
) {
63-
const recordArgs = serializeArgs([...args], win, this);
63+
const recordArgs = serializeArgs(args, win, this);
6464
const mutation: canvasMutationWithType = {
6565
type,
6666
property: prop,

0 commit comments

Comments
 (0)