mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
wip: intersection with last optimization
This commit is contained in:
parent
85211c1291
commit
c4384166cd
@ -46,6 +46,7 @@ export {
|
||||
effect,
|
||||
hoist,
|
||||
intersection,
|
||||
intersectionWithLast,
|
||||
loopClosure,
|
||||
nextTagId,
|
||||
registerDynamicClosure,
|
||||
|
||||
@ -22,11 +22,14 @@ export function queueRender<T>(
|
||||
signalKey: number,
|
||||
value?: T,
|
||||
scopeKey = scope.___id,
|
||||
isLast?: 1
|
||||
) {
|
||||
const key = scopeKey * scopeKeyOffset + signalKey;
|
||||
const existingRender = signalKey >= 0 && pendingRendersLookup.get(key);
|
||||
if (existingRender) {
|
||||
existingRender.___value = value;
|
||||
} else if (isLast) {
|
||||
signal(scope);
|
||||
} else {
|
||||
const render: PendingRender = {
|
||||
___key: key,
|
||||
|
||||
@ -87,6 +87,22 @@ export function intersection(
|
||||
};
|
||||
}
|
||||
|
||||
export function intersectionWithLast(
|
||||
id: number,
|
||||
fn: SignalFn<never>,
|
||||
scopeIdAccessor: Accessor = /*@__KEY__*/ "___id",
|
||||
): Signal<never> {
|
||||
return (scope, isLast?: 1) => {
|
||||
if (scope.___pending) {
|
||||
if (isLast) {
|
||||
fn(scope);
|
||||
}
|
||||
} else {
|
||||
queueRender(scope, fn as any, id, 0, scope[scopeIdAccessor], isLast);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export function loopClosure<T>(
|
||||
valueAccessor: Accessor,
|
||||
ownerLoopNodeAccessor: Accessor,
|
||||
|
||||
@ -25,6 +25,7 @@ const pureFunctions: Array<keyof typeof import("../../dom")> = [
|
||||
"createTemplate",
|
||||
"dynamicClosure",
|
||||
"intersection",
|
||||
"intersectionWithLast",
|
||||
"loopClosure",
|
||||
"loopIn",
|
||||
"loopOf",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user