Papercraft 3.0의 주요 변경 사항은 다음과 같습니다.
새로운 렌더링 API
-
API 변경:
Proc확장으로 인한 범용성 문제를 해결하기 위해, 3.0에서는Papercraft모듈의 싱글톤 메서드 (Papercraft.render,Papercraft.apply)를 통해 템플릿 렌더링 및 인자 적용을 수행합니다. -
철학: 템플릿 정의와 렌더링을 분리하고, Ruby의 함수형 프로그래밍 스타일을 강화합니다.
향상된 XML 지원
-
XML 렌더링 지원이 재도입되었으며 (
Papercraft.xml사용), RSS 피드 등에 활용됩니다. -
내부 텍스트나 자식 노드가 없는 요소에 대해 자체 닫힘 XML 태그 렌더링을 지원합니다 (예:
<item ref="foo"/>).
간소화된 Papercraft::Template 클래스
-
Papercraft 2.4에서 도입된Papercraft::Template클래스는 3.0에서 인터페이스가 간소화되어Papercraft::Template.new { ... }.render(...)형태로 직접 렌더링이 가능합니다. -
mode: :xml옵션을 통해 XML 템플릿 렌더링도 지원하며, 이전 API 사용자들에게 익숙한 방식을 제공합니다.
향후 계획: 인라이닝 지원
-
성능 개선: 복잡한 HTML 구성 시 발생하는 렌더링 성능 저하 문제를 해결하기 위해 자동 인라이닝 기능을 탐색 중입니다.
-
구현 방식: AST(추상 구문 트리) 변형 및 결합을 활용합니다.
Prism파서로 템플릿 소스 코드를 AST로 변환한 후, 서브 템플릿 호출 노드를 해당 서브 템플릿의 AST로 대체하여 최적화된 단일 AST를 생성합니다. -
목표: Papercraft를 Ruby에서 가장 빠르고 효율적인 HTML 템플릿 엔진으로 만드는 것입니다.