2012-01-28 3 views
3

javascript 파일 내 base64 형식으로 저장된 다른 파일 유형 중에서 css 및 이미지를 포함 할 수 있습니다. 그러나 그것들은 상당히 거대하고 ... gzip으로 압축되어, base64 인코딩에서 33 %의 오버 헤드가 있더라도 많은 것을 줄입니다.base64 gzipped 스타일 시트/이미지를 자바 스크립트에 포함 시키시겠습니까?

ggipped가 아닌 이미지는 data : image/gif, base64, data : image/jpeg, data : image/png 및 css는 data : text/css이며 base64입니다. gzip으로 압축 된 CSS 또는 이미지 데이터 URI를 포함하려면 어떤 mime 유형을 사용할 수 있습니까? (또는 gzip + base64가 작동하지 않는다면, 자바 스크립트 내에 저장된 데이터를 유지하면서 문자열의 크기를 줄이기 위해 할 수있는 다른 압축이 있습니까?)

.. 편집 .. 질문이 오해되고 있습니다. 경우 자바 스크립트 내에서 gzipped base64 문자열을 포함해야합니다 묻는 중입니다. 예, 대부분의 경우 서버 끝의 javascript 및 기타 파일을 gzip하는 것이 가장 좋습니다. 그러나 이것은 userscript에는 적용 할 수 없습니다. userscript는 서버가 없으며 하나의 파일로만 구성됩니다. Firefox는 @require 지시어를 허용하지만 Opera와 Chrome은 그렇지 않으며 로컬 파일 보안 문제는 모든 로컬 파일로드와 관련됩니다. 따라서 스크립트에 필요한 것은 1) 웹에서 (느림) 또는 2) 사용자 스크립트 (큰 스크립트)에 포함되어야합니다.

이제이 질문은 큰 것이 천천히가는 것이 바람직하다고 가정하지만 큰 것은 우리가 얼마나 큰지를 완전히 무시한다는 것을 의미하지는 않습니다. 그것이 더 작을 수 있다면, 그것은 개선입니다.

그래서 base64 문자열이 자바 스크립트에 포함되어 있다고 가정하면 문제를 의미있는 것으로 만드는 방법이 있습니다.

어느 :

1) atoB 유전자는() 내의 자바 스크립트 원료 GZIP 원시 base64 인코딩 GZIP 변환 할 수있다. (atob은 mediatype을 알 필요가 없습니다). 문제는 원시 gzip으로 압축 된 CSS 또는 이미지 파일을 압축 해제하여 결과 출력을 문서에 입력하는 방법입니다.

또는 2) 적절한 mediatype이 주어지면 이론적으로 (datauri RFC 당) 브라우저는 datauri에서 직접 임의의 파일을로드 할 수 있어야합니다. ""gzip 형식이 아닌 CSS 스타일 시트를로드하기에 충분합니다. 여기에있는 질문은 링크 유형 속성과 데이터 리 mediatype 조합이 작동해야하는 것 (그리고 어떤 브라우저가 작동 할 것인가)이 될 것입니다. 가급적이면 userscript는 Opera, FF 및 Chrome에서 작동하는 조합입니다.

+0

base64 인코딩의 오버 헤드는 33 %입니다. –

+0

수정 됨.:) 저는 오버 헤드의 크기에 대해서는별로 신경 쓰지 않습니다. userscript의 경우 모든 것을 하나의 단일 배포 가능 파일로 유지하는 것만큼이나 크기가 중요하지 않습니다. 하지만 base64 얼룩을 가능한 작게 유지하는 것이 좋을 것입니다. 따라서이 질문은 – BrianFreud

+0

JS에 base64를 포함시키고 JS를 gzip으로 채우시겠습니까? – sdleihssirhc

답변

2

HTTP에서 압축은 전송되는 페이로드를 줄이기 위해 전송에만 적용되는 경우가 가장 흔합니다. 이는 Content-Encoding header field에 의해 수행됩니다.

그러나 data URL scheme은 매우 제한적이며, 당신은 단지 미디어 유형을 지정할 수 있습니다

dataurl := "data:" [ mediatype ] [ ";base64" ] "," data 

당신이 multipart message는, 대부분의 사용자 에이전트가 data의 URL에서 그들을 지원하지 않습니다 사용할 수 있지만. 또한 이러한 다중 부분 메시지를 설명하는 추가 데이터가 실제 페이로드를 압축하여 안전하지 않은 데이터인지 여부는 의심 스럽습니다.

URL이 data 인 경우 데이터를 압축하는 것은 이론적으로 가능하지만 실용적이지 않습니다. data URL이 포함 된 전체 문서를 간단히 압축하는 것이 좋습니다.

+0

이것은 문제를 해결하지 못하거나 정확하지 않습니다. dataurl RFC에 따르면, 거의 모든 것을 인코딩하는 것은 완전히 합법적입니다. gzip에는 다중 마임 유형이 필요하지 않습니다. application/gzip은 완전히 합법적입니다. Base64는 허용 된 유일한 인코딩입니다. base64는 기본 인코딩 (US-ASCII)이 아닙니다. – BrianFreud

+1

물론 해당 미디어 유형을 지정하여 '데이터'URL의 모든 데이터를 래핑 할 수 있습니다. 그리고 * application/gzip * 데이터로도 할 수 있습니다. 그러나 데이터는 * application/gzip * 데이터로 처리되며 CSS 또는 JavaScript 또는 기타로 처리되지 않습니다. 또한 Base64 인코딩은 URL 암호화에 따라 데이터를 인코딩해야하는 URL 안전성이있는 문자 세트를 래핑하는 데에만 사용됩니다. – Gumbo

+0

물론, 이것은 gzip으로 압축 된 CSS 파일을 포함시키는 방법에 대한 문제를 해결하지 못합니다. 완전한 구현을 보지 못했지만, 어떻게 든, MIMEHttpRequest를 통해 오버라이드 된 MIME 유형을 통해 gzipped 문자열을 더미 XMLHttpRequest를 통해 전송하므로 데이터가 어디서든 전송되지만 브라우저는 그것을 responseText로 압축 해제합니다. 내가 본 pseudofunction은 다음과 같습니다. – BrianFreud

관련 문제