Promise combinator fast path for non-thenable elements
4ed24b8
ECMAScript 명세는 Promise.all/allSettled/any/race가 각 입력 값에 대해 Promise.resolve(element)를 호출하도록 규정하고 있습니다. 이 과정에서 callable .then 프로퍼티가 있는지 확인합니다. Non-thenable 값의 경우, 이 과정은 오직 downstream callback을 microtask로 큐에 넣기 위한 fulfilled Promise를 생성하는 데 그칩니다. 이는 순수한 할당 오버헤드입니다. 이 최적화가 안전하려면 thenability 검사가 관찰 가능한 side effect 없이 수행될 수 있어야 합니다.
이 commit에서는 정적으로 non-thenable임이 확인된 요소에 대해 중간 Promise.resolve(value) JSPromise 셀 할당을 건너뛰는 fast path가 추가되었습니다. 대신 resolver microtask를 직접 큐에 삽입합니다. 새로운 isNonThenable predicate가 이 최적화의 진입 조건을 제어합니다.
Significance
primitive나 plain object로 구성된 배열에서 1.4~1.7배의 성능 향상이 벤치마크에서 확인되었습니다. 다만 isNonThenable predicate가 완벽하게 정확해야 합니다. false positive가 하나라도 발생하면 관찰 가능한 ECMAScript 동작이 달라집니다.
Audit directions
a Aaaaaaa Aaaaa Aaa Aaaaaaa Aaaa Aaa Aa Aaaa Aaaa Aaaaaaaaaaaaaaaa Aaaaaaaaa Aaaaaa Aaaaaaaaaaaaa Aaaaaaa Aa Aaaaa Aaaaa Aaaa Aaa Aaaaaaaa Aa a Aaaaaaaaa Aaaaaaaaaaaaaa Aaaaaa Aaaaaaa a Aaa Aaa Aaa Aa Aaa Aaaa Aaaaa
a Aaaaaaaaaaa Aa Aaaaaaaaaaaaaa Aaaaa Aaaaaaa Aaaaaaaaa Aaa Aaaaaaaa Aaa Aaaaaaaaaaaaaaaa Aaa Aa Aaa Aaaaaa Aaaaaaaaaaaaaaaaaa Aa Aa Aaaaaaaaa Aaaa Aaaaaaa Aaa a Aaaaa Aaaaaaaaaaaaaaa Aaaaaa Aaaa Aaaa
a Aaaaaaaaaaaaaa Aaaaaaaaa Aaaaaaaaaaa Aaaaaaaaa Aaaaaaaaaa Aaaaaaaa Aa Aaa Aaaaaa Aaaaaa Aaaaa Aaaaaaaaa Aa Aa Aa Aaa Aaaaaaaaa Aaaaa Aaaaaaaaaa Aaaaa Aa Aaa Aaa Aaaaaaaa Aaaa Aaaa Aaaa
a Aaaaaaaaa Aaaaa a Aaaaaaaaaaaaaaaa Aaaaaaa Aaaaaaaaaa Aaaa Aaa Aaaaaa Aaaa Aaaaa Aa Aaaaaa Aaaaaaaaaa Aaa Aaaa Aa Aaa Aa a Aaaaa
a Aaaaa Aaaaaa Aaaa Aaaaaaaaaa Aaa Aaaa Aaa Aaa Aaaaa Aaaaaaaaaaaaaaaa Aaa Aaa Aaa Aaaaaaaaaaaaaa Aaaa Aaaa Aaaaaaaaa Aaaaaa Aaaa Aaaaa Aaa Aaaaaa
🔒The soundness of the new thenability predicate across object model edge cases is worth close inspection — audit directions included.
더 확인하려면 구독해 주세요