문제

HTML 파일을 렌더링하기 위해 휴대용 장치 용 C ++에서 Linux 프로그램을 만들고 있습니다.

문제는 장치가 RAM으로 제한되어있어 실제 소프트웨어를 사용하여 큰 파일을 열 수 없다는 것입니다.

한 가지 솔루션은 파일의 부분을 동적으로로드/언로드하는 것이지만이를 구현하는 방법은 확실하지 않습니다.

스크롤의 능력은 가능한 경우 원활한 경험으로 필수입니다.

그러한 상황에 가장 적합한 접근 방식은 무엇입니까? 알고리즘, 오픈 소스 프로젝트를 살펴볼 수있는 오픈 소스 프로젝트 또는 내가하려는 일을 지원하는 라이브러리 (WebKit?)를 제안 할 수 있습니다.

편집하다:나는 전자 책 독자를 쓰고 있으므로 순수한 HTML 렌더링, JavaScript, CSS 없음, ...

도움이 되었습니까?

해결책

완전히로드하지 않고 트리 문서 (HTML과 같은)를 탐색하려면 실제 트리 인 문서와 같은 몇 가지 가정을해야합니다. 따라서 닫기 태그를 확인하는 것을 귀찮게하지 마십시오. 가까운 태그는 어쨌든 인간 소비를 위해 설계되었으며 컴퓨터는 만족할 것입니다. <> 도.

첫 번째 단계는 문서의 첫 번째 부분이 문서의 첫 번째 부분으로 표시된다고 가정하는 것입니다. 그것은 팽창론처럼 들리지만 "현대"HTML과 확실히 JS는 기술적으로 더 이상 사실이 아닙니다. 그럼에도 불구하고 HTML의 라인이 픽셀에 영향을 줄 수 있다면 단순히 페이지를 부분적으로로드 할 수 없습니다.

따라서 HTML 파일 위치와 화면의 페이지간에 간단한 관계가있는 경우 다음 단계는 각 페이지 끝에서 구문 분석 상태를 정의하는 것입니다. 그러면 단락 끝에 단일 파일 오프셋이 포함됩니다. 또한이 상태의 일부는 오픈 태그의 스택입니다.

페이징을 더 쉽게하기 위해, 지금까지 발생한 각 페이지에 대해이 "페이지 경계"상태를 유지하는 것이 현명합니다. 이것은 페이징을 쉽게 만듭니다.

이제 새 페이지를 렌더링 할 때 이전 페이지 경계 상태는 초기 렌더링 상태를 제공합니다. 단순히 HTML을 읽고 단일 페이지를 오버플로 할 때까지 요소별로 요소를 렌더링합니다. 그런 다음 조금 뒤로 추적하고 새 페이지 경계 상태를 결정합니다.

부드러운 스크롤은 기본적으로 두 개의 인접한 페이지를 렌더링하고 첫 번째 페이지의 X%와 두 번째 페이지의 100 x%를 보여주는 문제입니다. 이 비트를 구현하면 각 페이지를 렌더링 할 때 단락을 완료하는 것이 현명해질 수 있습니다. 이것은 당신에게 약간 다른 페이지 길이를 줄 것이지만, 당신은 깨진 단락을 다룰 필요는 없으며, 그 결과 페이지 경계 상태를 조금 더 작게 만듭니다.

다른 팁

딜로 내가 알고있는 가장 가벼운 무게 Linux 웹 브라우저입니다.

편집하다: IT (또는 렌더링 구성 요소)가 귀하의 요구를 충족시키지 못하면 Wikipedia의 목록 및 비교를 찾을 수 있습니다. 레이아웃 엔진 도움이됩니다.

편집 2 : HTML 파일의 일부 부분을 동적으로로드하고 언로드하는 것이 까다로울 것 같습니다. 예를 들어, 무작위로 선택된 파일 청크가 태그의 중간에 있지 않다는 것을 어떻게 알 수 있습니까? Sax와 같은 것을 사용하여 파일을 중간 표현으로 구문 분석하여 중간 표현의 개별 덩어리를 영구 저장소에 저장하여 너무 많은 RAM을 차지하지 않도록해야합니다. 또는 SAX로 파일을 구문 분석하여 RAM에 맞는 모든 것을 한 번에 표시 한 다음 사용자가 너무 멀리 스크롤 할 때마다 다시 해를 입을 수 있습니다. (스타일 시트와 JavaScript는이 접근법을 망칠 것입니다. 일부 평범한 HTML도 할 수도 있습니다.) 나라라면, 나는 간단한 마크 업 언어 나 어떤 종류의 풍부한 텍스트 시청자를 찾으려고 노력하지 않고 모든 어려움을 겪지 않고 노력할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top