Servo: PerformanceObserver์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€

์— ๋งŒ๋“  2019๋…„ 08์›” 28์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: servo/servo

https://github.com/servo/servo/pull/24072 ๋Š” ๋ˆ„์ˆ˜๋ฅผ ์ˆ˜์ •ํ–ˆ์ง€๋งŒ ๊ทผ๋ณธ์ ์ธ ์ด์œ ๋Š” ์—ฌ์ „ํžˆ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ๋ชฉ๋ก์„ ์ง€์šฐ์ง€ ์•Š์œผ๋ฉด ๊ฒฐ๊ตญ ํ•ญ๋ชฉ์ด ์ถ”๊ฐ€๋˜์ง€๋งŒ ์ œ๊ฑฐ๋˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŽ˜์ด์ง€์—์„œ ๋น ๋ฅด๊ฒŒ ์ด๋™ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒํƒœ๋กœ ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

_ ์›๋ž˜ ๋Š” https://github.com/servo/servo/pull/24072#issuecomment -525514036์˜ @asajeffrey๊ฐ€ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น PR์˜ ๋‹ค๋ฅธ ์˜๊ฒฌ๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

A-contenscript

๋ชจ๋“  4 ๋Œ“๊ธ€

์„ฑ๋Šฅ ํ…Œ์ดํฌ๊ฐ€ ์ž‘์—… ๋Œ€๊ธฐ์—ด์— ์œ ์ง€๋œ๋‹ค๋Š” ์ด๋ก ์€ ๊ทธ๋Ÿด๋“ฏํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

cc @asajeffrey @jdm ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ทธ๋Ÿด๋“ฏํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ, ๋˜ํ•œ ์ด ํŠน์ •ํ•œ ๊ฒฝ์šฐ์— ์ผ์–ด๋‚œ ์ผ์ด ์•„๋‹ˆ๋ฉฐ ๋Œ€์‹  Performance ์—์„œ ์ œ๊ฑฐ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— PerformanceObserver ๋ˆ„์ถœํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๊ฐ€ https://github.com/servo/servo/blob/6297fa582ac4c870e4a8d16cd261da6ede14191d/components/script/dom/performanceobserver.rs#L131์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š” ํ•œ ์ž์ฒด์ ์œผ๋กœ None ์„ค์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ด€์ฐฐ์ž๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•ด๋‹น PerformanceObserverCallback ์— ์˜ํ•ด์„œ๋งŒ ์œ ์ง€๋˜๋„๋ก ๊ด€์ฐฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฝœ๋ฐฑ์„ ์„ค์ • ํ•ด์ œํ•˜๋ฉด ์‚ญ์ œ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค).

๋” ์‚ดํŽด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PerformanceObserver DOM ๊ฐœ์ฒด๋ฅผ PerformanceObserverImpl ์—์„œ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ›„์ž๋Š” DOMPerformanceEntryList ๋ฐ ๊ธฐํƒ€ "๋ฐ์ดํ„ฐ"์™€ ๊ฐ™์€ ํ•ญ๋ชฉ์„ ์ถ”์ ํ•˜๋Š” ๋ฐ˜๋ฉด, DOM ๊ฐ์ฒด๋Š” ์ฝœ๋ฐฑ์„ ๊ฐ์‹ธ๋Š” ๋ž˜ํผ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ „์—ญ์€ Impl ๋Œ€ํ•œ ๊ฐ•๋ ฅํ•œ ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ณ  ์Šคํฌ๋ฆฝํŠธ ์ฝœ๋ฐฑ์ด None ์„ค์ •๋˜๋ฉด ์‚ญ์ œ๋˜๋Š” Weak<PerformanceObserver> ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ „์—ญ์€ https://github.com/servo/servo/pull/23637/files#diff -59d233642d0ce6d687484bdd009e1017R484์—์„œ ๋ฉ”์‹œ์ง€ ํฌํŠธ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰๋œ ๊ฒƒ๊ณผ ๊ฐ™์€ ์ฃผ๊ธฐ์ ์ธ ์ฒดํฌํฌ์ธํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— https://gist.github.com/kanaka/119f5ed9841e23e35d07e8944cca6aa7 ์˜ ์ฝ”๋“œ๊ฐ€ ๋ชจ๋“  ๊ด€์ฐฐ์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š”์ง€ ์‹ค์ œ๋กœ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์œ„์˜ ๋…ผ๋ฆฌ๋ฅผ ๋ฌดํšจํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ ์–ด๋„ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๊ฐ์ง€๋˜๋Š” ๋ˆ„์ถœ๊ณผ ๊ด€๋ จํ•˜์—ฌ ). ์ข€ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„, ์˜ต์ €๋ฒ„ ์„ธํŠธ๊ฐ€ ์—†๋”๋ผ๋„ https://github.com/servo/servo/blob/39bd45529d6ef3eea8e0eeef77d0294e0db1b02c/components/script/dom/performance.rs#L244 ์—์„œ ํ•ญ๋ชฉ์„ ๋ฒ„ํผ๋งํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐœ์ƒ ๋•Œ๋งˆ๋‹ค ์Šคํฌ๋ฆฝํŠธ๋Š” ํŽ˜์น˜ ์•Š์Šต๋‹ˆ๋‹ค https://github.com/servo/servo/blob/7490dd6f0deafc8192126a88a8a6f75c100e5d71/components/script/network_listener.rs#L65

์˜ˆ๋ฅผ ๋“ค์–ด ์Šคํƒ€์ผ์‹œํŠธ ๋กœ๋”์—์„œ ์‚ฌ์šฉ(๋ฌธ์„œ ๋ˆ„์ถœ์ด ๋ฐœ์ƒํ•œ ๋””๋ฒ„๊ทธ ์Šคํฌ๋ฆฝํŠธ์— ์‚ฌ์šฉ): https://github.com/servo/servo/blob/799490a02e9bea575bf34c39f045ef0883539f05/components/script/stylesheet_loader.rs#L233

์ž์ฒด ํ˜ธ์ถœ์€ https://github.com/servo/servo/blob/9bba14cb438cf5ac08945bb8fbb5a0f31d43fcbe/components/net_traits/lib.rs#L260 ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ข‹์•„, ์ด https://github.com/servo/servo/pull/24109 ๋Š” ๋ˆ„์ˆ˜์˜ ์‹ค์ œ ์›์ธ์„ ์ˆ˜์ •ํ•˜๊ณ  Performance ๋ฅผ ์ „์ฒด์ ์œผ๋กœ None ์„ค์ •ํ•œ ์ด์ „ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ๊ด€์ฐฐ์ž๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ง€๋œ ๋ˆ„์ˆ˜์˜ ์›์ธ์€ ์‹ค์ œ๋กœ ๋ฒ„ํผ์˜€์Šต๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๊ฐ€ Disconnect ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š” ํ•œ ๋ˆ„์ถœ๋˜๋Š” ์„ฑ๋Šฅ ๊ด€์ฐฐ์ž ๋ฌธ์ œ๋ฅผ ๊ณ„์† ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ์—ด์–ด ๋‘ก๋‹ˆ๋‹ค. https://github.com/servo/servo/issues/24074#issuecomment -526026684๋ฅผ ์ฐธ์กฐ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰