GN⁺: Blitz: 경량 모듈형 확장 가능한 웹 렌더러
(github.com/DioxusLabs)Blitz: 경량, 모듈형, 확장 가능한 웹 렌더러
Blitz는 "Dioxus Native" 프로젝트를 지원하기 위해 개발된 "네이티브" HTML/CSS 렌더러임. JavaScript 엔진 대신 네이티브 Rust API를 사용하여 Rust 반응성/상태 관리 라이브러리와 직접 인터페이스할 수 있음.
현재 두 가지 프론트엔드 지원
- HTML/마크다운 프론트엔드: HTML 문자열을 렌더링할 수 있음. HTML 및 마크다운 파일 미리보기에 유용하지만 상호작용성은 부족함.
- Dioxus 프론트엔드: Dioxus VirtualDom을 렌더링할 수 있음. Dioxus의 이벤트 처리를 통해 완전한 상호작용성 지원.
Blitz의 기반 기술
- Stylo: Firefox의 병렬 브라우저급 CSS 엔진
- Vello + WGPU: 렌더링
- Taffy: 박스 수준 레이아웃
- Parley: 텍스트/인라인 수준 레이아웃
- AccessKit: 접근성
- Winit: 윈도우 및 입력 처리
참고: 이 저장소에는 Stylo를 사용하는 새로운 버전의 Blitz가 포함되어 있음. 이전 버전의 소스 코드는 레거시 브랜치에서 여전히 사용할 수 있지만, 적극적으로 개발 중이지 않음.
스크린샷
- Dioxus 렌더러
- HTML 렌더러 (google.com 렌더링)
사용해보기
- 이 저장소를 클론
- 예제 실행:
-
cargo run --example google
-
cargo run --example url https://myurl.com
- 다른 예제도 사용 가능
- 더 나은 런타임 성능을 위해
--release
추가
-
-
Ctrl/Cmd + +
/Ctrl/Cmd + -
로 스케일 변경, F1을 눌러 레이아웃 사각형 표시
목표
Blitz는 HTML과 CSS를 렌더링하기 위해 설계됨. 브라우저의 모든 기능을 지원하지 않으며, 이러한 "추가" 기능은 선택적으로 제공할 계획임. 브라우저는 기본 HTML/CSS 렌더링의 경우 과도하게 복잡하다고 생각함.
지원 예정 기능:
- 현대적 HTML 레이아웃 (flexbox, grid, table, block, inline, absolute/fixed 등)
- 고급 CSS (복잡한 선택자, 미디어 쿼리, CSS 변수)
- HTML 폼 컨트롤
- AccessKit을 통한 접근성
- 사용자 정의 위젯을 통한 확장성
지원하지 않는 기능:
- webrtc, websockets, bluetooth, localstorage 등
다른 언어(JavaScript, Python 등)에 대한 Blitz 바인딩은 아직 없지만, 기여를 환영함.
아키텍처
Blitz는 여러 부분으로 나뉨:
-
blitz-dom
: 스타일 해석과 레이아웃을 포함하지만 그리기/페인팅은 포함하지 않는 핵심 DOM 추상화 -
blitz
:blitz-dom
에 Vello/WGPU 기반 렌더러 추가 -
dioxus-blitz
: Blitz를 사용하여 Dioxus 앱을 렌더링하는 Dioxus 통합 레이어. 현재dioxus-blitz
는 HTML 렌더러도 포함하지만, 이는 향후 별도의 패키지로 분리될 가능성이 있음.
상태
Blitz는 현재 실험적임. 사용 가능한 상태로 만들기 위해 적극적으로 작업 중이지만, 아직 앱을 구축하는 것은 권장하지 않음.
TODO
- 핵심 DOM 트리 추상화
- html5ever를 사용한 스타일 파싱
- html5ever 문서에 대한 스타일 계산
- Taffy를 사용한 레이아웃 계산
- WGPU를 사용한 렌더링
렌더링
- 창에 렌더링
- 이미지에 렌더링
- 그라디언트
- 테두리/외곽선
- 래스터 이미지 (png, jpeg 등)
- 줌
- SVG
- 외부 SVG (기본 지원)
- 인라인 SVG
- 그림자
- 애니메이션/전환
- 표준 폼 컨트롤 (체크박스/드롭다운/슬라이더 등)
- 사용자 정의 위젯
- 그림자 요소
레이아웃
- 인라인 (부분 지원 - 구현 미성숙)
- 블록
- 플렉스박스
- 그리드
- 명명된 그리드 라인
- 서브그리드
- 테이블
- Z-인덱스
- 추가 CSS 기능
-
box-sizing: content-box
-
calc()
-
position: static
-
direction: rtl
-
transform
-
텍스트
- 폰트 로딩
- 시스템 폰트 로딩
- 웹 폰트 로딩
- 텍스트
- 셰이핑 / Bidi
- 레이아웃 / 줄 나누기
- 폰트 크기 / 줄 높이
- 텍스트 색상
- 굵게 / 기울임
- 밑줄 / 취소선
- 텍스트 선택
입력
- 스크롤
- 루트 뷰
-
overflow: scroll
요소
- 호버 감지
- 클릭 처리
- 텍스트 입력
성능
- 핫 리로딩
- 스타일 및 레이아웃 재해석 없이 스크롤
- 스타일 캐싱
- 레이아웃 캐싱
기타
- 다중 창
- 접근성 트리
- 포커스
- 개발 도구
- 컨텍스트 메뉴를 위한 훅
- 임의의 렌더링 표면으로 요소를 가져오기 위한
use_wgpu_context()
라이선스
이 프로젝트는 Apache 2.0 및 MIT 라이선스로 이중 라이선스됨. 별도로 명시하지 않는 한, 사용자가 stylo-dioxus에 포함시키기 위해 의도적으로 제출한 모든 기여는 추가 조건 없이 MIT 라이선스로 라이선스됨.
GN⁺의 정리
- Blitz는 Rust 기반의 경량 HTML/CSS 렌더러로, Dioxus 프로젝트를 지원하기 위해 개발됨.
- 브라우저의 복잡한 기능을 배제하고, 기본적인 HTML/CSS 렌더링에 집중함.
- 실험적 단계에 있으며, 아직 앱 구축에는 권장되지 않음.
- 비슷한 기능을 가진 프로젝트로는 Servo, WebRender 등이 있음.