읽은 글들 (~24.10.31)
2024. 10. 31.
JavaScript
Why is CSS-in-JS slow?
styled components 같은 CSS-in-JS 라이브러리가 느린 이유를 설명하는 글. 설명이 자세하기도 하거니와 적절한 다이어그램도 첨부되어 있어 쉽게 읽을 수 있다. 따라서 원문을 읽는 걸 추천한다. 아래부터는 간단한 요약이다.
일반적인 vanilla CSS 는 아래와 같은 과정을 거쳐 적용된다.
- HTML 파싱
- 1번 과정 중
<head />
안에서 CSS 를 발견함 - CSS 파싱
- HTML 과 CSS 를 같이 적용해서 사용자에게 보여줌
하지만 CSS-in-JS 라이브러리들은 아래와 같은 과정을 거쳐야 한다.
- HTML 파싱
- HTML 을 사용자에게 보여줌
<body />
안에서<script />
를 발견함- JS 파싱
- JS 까지 적용된 결과를 사용자에게 보여줌
- CSS-in-JS 라이브러리가 CSS 를 생성함
- CSS 파싱
- CSS 까지 적용된 결과를 사용자에게 보여줌
따라서 느리다.
Vanilla Extract 같은 일부 라이브러리가 기존 CSS-in-JS 라이브러리들보다 빠른 이유는 런타임에서 CSS 를 생성하는 것이 아니라 컴파일 단계에서 미리 생성하기 때문.
[번역] 자바스크립트 정규 표현식의 환골탈태: 정규식의 역사와 미래를 톺아보며
자바스크립트는 원래 정규 표현식 기능이 강력하지 않았는데, 하나씩 개선되면서 현재는 매우 좋아졌고, 그럼에도 아직 있는 불편한 점은 라이브러리를 써서 충분히 극복 가능하다는 내용의 글.
대학생 시절 자바스크립트 정규 표현식은 lookbehind 도 되지 않아서 어이가 없었던 기억이 있는데, 이제는 lookbehind 를 포함해 많은 기능을 지원한다. 특히 named capture 와 유니코드 문자 지원이 인상깊다.
A list of JavaScript engines, runtimes, interpreters
자바스크립트 엔진/런타임/인터프리터를 정리한 목록. 생각보다 되게 많다.
Why I’m skeptical of rewriting JavaScript tools in “faster” languages
자바스크립트 툴들이 자바스크립트가 아닌 다른 더 빠른 언어로 재작성되는 것에 대한 우려를 정리한 글.
- 브라우저 생태계에서 자바스크립트는 이미 충분히 빠르다.
- 웹어셈블리가 사용되는 경우도 있긴 하지만 이것은 CPU 집약적인 작업을 구현하는 데 한정되어 사용된다.
- 자바스크립트 생태계는 빠른 것(=성능)보다는 작동하는 것을 만드는 데 더 집중해왔다. 툴들의 개발이 안정화된 시점에서 "더 빠른 언어"로 재작성하는 것은, 단순히 더 빠른 언어로 작성했기 때문에 성능이 오른 것이 아니라 성능을 염두에 두고 다시 설계했기 때문일 가능성이 크다.
- 성능을 염두에 두고 재설계한다면 아직 자바스크립트로도 충분히 성능을 올릴 수 있다.
- 바이트코드 캐시와 JIT 컴파일러는 자주 사용되는 코드에 대한 성능 최적화를 해준다. 그 경우 "더 빠른 언어"로 작성된 것에 비해 성능적으로 밀리지 않는다.
- 기여와 디버깅의 관점에서, 자바스크립트 사용자가 자바스크립트 툴링에 기여하지 못하고 디버깅하지 못한다는 것은 개발 환경과 생태계에 있어서 너무 좋지 않다.
잘 모르기는 하지만, 글만 본다면 글쓴이의 주장은 충분히 합리적으로 보인다.
React
Drag to Select
React 에서 추가적인 라이브러리 사용 없이 "