|
| 1 | +--- |
| 2 | +title: "2025-04-27: Node v22.15.0, React 실험적 기능, Node.js와 V8 GC" |
| 3 | +author: "azu" |
| 4 | +layout: post |
| 5 | +date: 2025-04-27T02:43:58.849Z |
| 6 | +category: JSer |
| 7 | +tags: |
| 8 | +- nodejs |
| 9 | +- React |
| 10 | +- pnpm |
| 11 | +- css |
| 12 | +- performance |
| 13 | + |
| 14 | +--- |
| 15 | + |
| 16 | +JSer.info #733 - Node.js v22.15.0가 출시되었습니다. |
| 17 | + |
| 18 | +- [Node.js — Node v22.15.0 (LTS)](https://nodejs.org/en/blog/release/v22.15.0) |
| 19 | + |
| 20 | +`assert.partialDeepStrictEqual()`나 `module.registerHooks()` 새로운 API가 추가되었습니다. 또한, `util.diff()` 추가나 zstd 지원도 포함됩니다. |
| 21 | + |
| 22 | +--- |
| 23 | + |
| 24 | +React 팀 실험적인 기능 소개 하는 글이 공개되었습니다. |
| 25 | + |
| 26 | +- [React Labs: View Transitions, Activity, and more – React](https://react.dev/blog/2025/04/23/react-labs-view-transitions-activity-and-more) |
| 27 | + |
| 28 | +`<ViewTransition>`, `addTransitionType()`, `<Activity>` 새로운 실험적 API 소개가 포함됩니다. |
| 29 | +또한, DevTools로 Performance Profiler 개선이나 의존 없는 useEffect, React Compiler 같이 개발중인 기능에 대해서도 언급합니다. |
| 30 | + |
| 31 | +--- |
| 32 | + |
| 33 | +Node.js와 V8 GC 관련한 해설 글이 공개되었습니다. |
| 34 | + |
| 35 | +- [Boost Node.js with V8 GC Optimization](https://blog.platformatic.dev/optimizing-nodejs-performance-v8-memory-management-and-gc-tuning) |
| 36 | + |
| 37 | +V8 세대별 GC 구조나, Scavenge에 의한 고속 GC 처리, semi-space 크기 조절로 인한 메모리 튜닝에 대해 작성되어있습니다. |
| 38 | + |
| 39 | +---- |
| 40 | + |
| 41 | +## PR |
| 42 | + |
| 43 | +[JavaScript Primer](https://jsprimer.net/)의 ES2025 대응을 도울 Contributor와 Sponsor를 모집하고 있습니다. |
| 44 | +매년 6월말에 ECMAScript 정식 공개에 맞춰, 올해 업데이트를 jsprimer에 반영 작업할 예정입니다. |
| 45 | + |
| 46 | +- [JavaScript Primer의 ES2025 대응을 도울 Contributor와 Sponsor를 모집하고 있습니다 | Web Scratch](https://efcl.info/2025/04/25/jsprimer-es2025-proposal/) |
| 47 | + |
| 48 | +---- |
| 49 | + |
| 50 | +{% include inline-support.html %} |
| 51 | + |
| 52 | +---- |
| 53 | + |
| 54 | +<h1 class="site-genre">헤드라인</h1> |
| 55 | + |
| 56 | +---- |
| 57 | + |
| 58 | +## Release v1.52.0 · microsoft/playwright |
| 59 | +[github.com/microsoft/playwright/releases/tag/v1.52.0](https://github.com/microsoft/playwright/releases/tag/v1.52.0 "Release v1.52.0 · microsoft/playwright") |
| 60 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">playwright</span> <span class="jser-tag">ReleaseNote</span></p> |
| 61 | + |
| 62 | +playwright v1.52.0 출시. |
| 63 | +파괴적 변경으로 `page.route()`에서 `?`는 wildcard로 다뤄지지 않도록 변경, `route.continue()`에서 `Cookie` 헤더를 덮어쓰지 않도록 변경. |
| 64 | +`expect(locator).toContainClass()` 추가, Aria Snapshot 갱신. |
| 65 | +프로젝트 째로 `workers` 설정 가능, `failOnFlakyTests` 옵션 추가. |
| 66 | + |
| 67 | + |
| 68 | +---- |
| 69 | + |
| 70 | +## ECMAScript proposal updates @ 2025-04 | ECMAScript Daily |
| 71 | +[ecmascript-daily.github.io/ecmascript/2025/04/19/ecmascript-proposal-update](https://ecmascript-daily.github.io/ecmascript/2025/04/19/ecmascript-proposal-update "ECMAScript proposal updates @ 2025-04 | ECMAScript Daily") |
| 72 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">ECMAScript</span> <span class="jser-tag">proposal</span> <span class="jser-tag">news</span></p> |
| 73 | + |
| 74 | +2025년 4월 TC39 미팅에서 ECMAScript Proposal의 Status 변경 모음. |
| 75 | +Record & Tuple가 withdrawn가 됨. |
| 76 | + |
| 77 | + |
| 78 | +---- |
| 79 | + |
| 80 | +## Release @fastify/react@1.0.0 · fastify/fastify-vite |
| 81 | +[github.com/fastify/fastify-vite/releases/tag/react-v1.0.0 ](https://github.com/fastify/fastify-vite/releases/tag/react-v1.0.0 "Release @fastify/[email protected] · fastify/fastify-vite") |
| 82 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">nodejs</span> <span class="jser-tag">React</span> <span class="jser-tag">ReleaseNote</span></p> |
| 83 | + |
| 84 | +@fastify/react 1.0.0 출시. |
| 85 | + |
| 86 | + |
| 87 | +---- |
| 88 | + |
| 89 | +## Node.js — Node v22.15.0 (LTS) |
| 90 | +[nodejs.org/en/blog/release/v22.15.0](https://nodejs.org/en/blog/release/v22.15.0 "Node.js — Node v22.15.0 (LTS)") |
| 91 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">nodejs</span> <span class="jser-tag">ReleaseNote</span></p> |
| 92 | + |
| 93 | +Node.js v22.15.0 출시. |
| 94 | +`assert.partialDeepStrictEqual()` 추가, ` module.registerHooks()` 추가, `util.diff()` 추가, zstd 지원 |
| 95 | + |
| 96 | + |
| 97 | +---- |
| 98 | + |
| 99 | +## Release pnpm 10.9 · pnpm/pnpm |
| 100 | +[github.com/pnpm/pnpm/releases/tag/v10.9.0](https://github.com/pnpm/pnpm/releases/tag/v10.9.0 "Release pnpm 10.9 · pnpm/pnpm") |
| 101 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">pnpm</span> <span class="jser-tag">ReleaseNote</span></p> |
| 102 | + |
| 103 | +pnpm v10.9.0 출시. |
| 104 | +`pnpm add jsr:<pkg_name>`로 JSR 지원, `dangerouslyAllowAllBuilds` 옵션 추가 |
| 105 | + |
| 106 | + |
| 107 | +---- |
| 108 | + |
| 109 | +## Release Release v1.9.0 · axios/axios |
| 110 | +[github.com/axios/axios/releases/tag/v1.9.0](https://github.com/axios/axios/releases/tag/v1.9.0 "Release Release v1.9.0 · axios/axios") |
| 111 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">JavaScript</span> <span class="jser-tag">HTTP</span> <span class="jser-tag">library</span> <span class="jser-tag">ReleaseNote</span></p> |
| 112 | + |
| 113 | +axios v1.9.0 출시. |
| 114 | +`getSetCookie` 지원 |
| 115 | + |
| 116 | + |
| 117 | +---- |
| 118 | +<h1 class="site-genre">읽을거리</h1> |
| 119 | + |
| 120 | +---- |
| 121 | + |
| 122 | +## React Labs: View Transitions, Activity, and more – React |
| 123 | +[react.dev/blog/2025/04/23/react-labs-view-transitions-activity-and-more](https://react.dev/blog/2025/04/23/react-labs-view-transitions-activity-and-more "React Labs: View Transitions, Activity, and more – React") |
| 124 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">article</span></p> |
| 125 | + |
| 126 | +React 실험적 기능 소개. |
| 127 | +`<ViewTransition>`/`addTransitionType`/`<Activity>`. |
| 128 | +DevTools에서 React의 Performance Profiler 가시화, 의존하지 않는 `useEffect`, React Compiler 관련하여 |
| 129 | + |
| 130 | + |
| 131 | +---- |
| 132 | + |
| 133 | +## Tailwind vs Linaria: Performance Investigation |
| 134 | +[www.developerway.com/posts/tailwind-vs-linaria-performance](https://www.developerway.com/posts/tailwind-vs-linaria-performance "Tailwind vs Linaria: Performance Investigation") |
| 135 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">css</span> <span class="jser-tag">performance</span> <span class="jser-tag">article</span></p> |
| 136 | + |
| 137 | +Tailwind와 Linaria 성능 비교 조사 글 |
| 138 | +조사함으로, 기반이 될 스타일에서 `*`에 스타일이 의존할 때 실행 성능에 차이가 발생함 |
| 139 | + |
| 140 | + |
| 141 | +---- |
| 142 | + |
| 143 | +## Introducing Socket Fix for Safe, Automated Dependency Upgrad... |
| 144 | +[socket.dev/blog/introducing-socket-fix](https://socket.dev/blog/introducing-socket-fix "Introducing Socket Fix for Safe, Automated Dependency Upgrad...") |
| 145 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">npm</span> <span class="jser-tag">pnpm</span> <span class="jser-tag">article</span></p> |
| 146 | + |
| 147 | +패키지 보안 업데이트 수정을 하는 `socket fix` 명령어 관련하여. |
| 148 | +npm/pnpm 지원. |
| 149 | + |
| 150 | + |
| 151 | +---- |
| 152 | + |
| 153 | +## Polishing your typography with line height units | WebKit |
| 154 | +[webkit.org/blog/16831/line-height-units/](https://webkit.org/blog/16831/line-height-units/ "Polishing your typography with line height units | WebKit") |
| 155 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">css</span> <span class="jser-tag">article</span></p> |
| 156 | + |
| 157 | +`1lh`는 1 line height에서 1행 높이를 표현하는 단위, `1rlh`은 rem과 같이 Root의 1행의 높이를 표현하는 단위. |
| 158 | +`1lh` 사용한 타이프그래피에 대해서 |
| 159 | + |
| 160 | + |
| 161 | +---- |
| 162 | + |
| 163 | +## Boost Node.js with V8 GC Optimization |
| 164 | +[blog.platformatic.dev/optimizing-nodejs-performance-v8-memory-management-and-gc-tuning](https://blog.platformatic.dev/optimizing-nodejs-performance-v8-memory-management-and-gc-tuning "Boost Node.js with V8 GC Optimization") |
| 165 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">nodejs</span> <span class="jser-tag">V8</span> <span class="jser-tag">article</span> <span class="jser-tag">performance</span></p> |
| 166 | + |
| 167 | +V8 세대별 GC는, Scavenge로 불리는 고속 GC를 semi-space 객체에 수행해, 몇 번이나 남은 객체를 승격하고, GC 빈도가 적은 space에 이동. |
| 168 | +실수로 승격한 객체가 많으면 제법 메모리 해제가 되지 않기에, semi-space 크기를 조절하는 옵션이나 메모리 튜닝 방벙에 대해 설명 |
| 169 | + |
| 170 | + |
| 171 | +---- |
| 172 | +<h1 class="site-genre">웹사이드, 서비스, 문서</h1> |
| 173 | + |
| 174 | +---- |
| 175 | + |
| 176 | +## unnoq/orpc: Typesafe APIs Made Simple 🪄 |
| 177 | +[github.com/unnoq/orpc?tab=readme-ov-file](https://github.com/unnoq/orpc?tab=readme-ov-file "unnoq/orpc: Typesafe APIs Made Simple 🪄") |
| 178 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">OpenAPI</span> <span class="jser-tag">nodejs</span> <span class="jser-tag">library</span></p> |
| 179 | + |
| 180 | +라우팅 정의에서 Open API Spec 출력하는 서버/클라이언트 HTTP 프레임워크 |
| 181 | + |
| 182 | + |
| 183 | +---- |
| 184 | +<h1 class="site-genre">소프트웨어, 도구, 라이브러리</h1> |
| 185 | + |
| 186 | +---- |
| 187 | + |
| 188 | +## slevithan/oniguruma-to-es: Convert patterns from Oniguruma (the regex flavor used by Ruby, TextMate grammars, etc.) to native JavaScript RegExp |
| 189 | +[github.com/slevithan/oniguruma-to-es](https://github.com/slevithan/oniguruma-to-es "slevithan/oniguruma-to-es: Convert patterns from Oniguruma (the regex flavor used by Ruby, TextMate grammars, etc.) to native JavaScript RegExp") |
| 190 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">JavaScript</span> <span class="jser-tag">library</span> <span class="jser-tag">RegExp</span></p> |
| 191 | + |
| 192 | +Oniguruma 정규표현을 JavaScript 정규표현으로 변경하는 라이브러리 |
| 193 | + |
| 194 | + |
| 195 | +---- |
| 196 | + |
| 197 | +## Nom-nom-hub/flash-install: A fast, drop-in replacement for npm install, focused on drastically speeding up Node.js dependency installation through deterministic caching, parallel operations, and .flashpack archive snapshotting. |
| 198 | +[github.com/Nom-nom-hub/flash-install](https://github.com/Nom-nom-hub/flash-install "Nom-nom-hub/flash-install: A fast, drop-in replacement for npm install, focused on drastically speeding up Node.js dependency installation through deterministic caching, parallel operations, and .flashpack archive snapshotting.") |
| 199 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">npm</span> <span class="jser-tag">console</span> <span class="jser-tag">Tools</span></p> |
| 200 | + |
| 201 | +캐시와 스냅샷을 지원하는 npm 패키지를 설치하는 도구. |
| 202 | +해시 기반 경로와 hard link 사용한 캐시, `.flashpack` 스냅샷 파일을 다루는 것이 가능해 브런치 변경 시 복원이 빠름. |
| 203 | + |
| 204 | + |
| 205 | +---- |
| 206 | + |
| 207 | +## andrewmd5/hako: An embeddable, lightweight, secure, high-performance JavaScript engine. |
| 208 | +[github.com/andrewmd5/hako](https://github.com/andrewmd5/hako "andrewmd5/hako: An embeddable, lightweight, secure, high-performance JavaScript engine.") |
| 209 | +<p class="jser-tags jser-tag-icon"><span class="jser-tag">WebAssembly</span> <span class="jser-tag">JavaScript</span> <span class="jser-tag">Tools</span> <span class="jser-tag">library</span></p> |
| 210 | + |
| 211 | +QuickJS 기반 WebAssembly에 컴파일해서 이용하는 JavaScript 엔진. |
| 212 | +Lynx/primjs를 fork한 것이 기반. |
| 213 | + |
| 214 | +- [lynx-family/primjs: JavaScript Engine Optimized for Lynx](https://github.com/lynx-family/primjs "lynx-family/primjs: JavaScript Engine Optimized for Lynx") |
| 215 | +- [Hako - by Andrew Sampson - ./make](https://andrews.substack.com/p/hako "Hako - by Andrew Sampson - ./make") |
| 216 | + |
| 217 | +---- |
0 commit comments