是否在javascript中包含base64 gzip样式表/图像?

是否在javascript中包含base64 gzip样式表/图像?,javascript,base64,mime-types,data-uri,data-uri-scheme,Javascript,Base64,Mime Types,Data Uri,Data Uri Scheme,我知道你可以在其他文件类型中包括css和图像,它们以base64格式存储在javascript文件中。然而,这些都是相当巨大的。。。Gzip压缩后,即使使用base64编码约33%的开销,它们也会大幅缩减 非gzip,图像是数据:image/gif;base64,数据:image/jpeg,数据:image/png,css为data:text/css;base64。那么,我可以/应该使用什么mime类型来包含Gzip的css或图像数据URI?(或者,如果gzip+base64不能工作,我还可以做

我知道你可以在其他文件类型中包括css和图像,它们以base64格式存储在javascript文件中。然而,这些都是相当巨大的。。。Gzip压缩后,即使使用base64编码约33%的开销,它们也会大幅缩减

非gzip,图像是数据:image/gif;base64,数据:image/jpeg,数据:image/png,css为data:text/css;base64。那么,我可以/应该使用什么mime类型来包含Gzip的css或图像数据URI?(或者,如果gzip+base64不能工作,我还可以做其他压缩来减小字符串的大小,同时仍将数据存储在javascript中吗?)

…编辑。。 我认为这个问题被误解了。我不是在问是否应该在javascript中包含gzip base64字符串。是的,我知道在大多数情况下,最好在服务器端对javascript和其他文件进行gzip。但这不适用于用户脚本;用户脚本没有服务器,只包含一个文件。Firefox允许@require指令,但Opera和Chrome不允许,并且本地文件安全问题会在加载任何本地文件时出现。因此,脚本所需的任何内容都必须是:1)在web上(慢)或2)嵌入在userscript中(大)

现在这个问题假设大的比慢的好,但是大的并不意味着我们完全忽略了有多大;如果它可以更小,那就是一个进步

因此,假设base64字符串嵌入到javascript中,问题是如何使其成为有意义的内容

要么:

1) atob()可以在javascript中将原始base64编码的gzip转换为原始gzip。(atob不需要知道媒体类型)。接下来的问题是如何解压缩原始的gzip css或图像文件,以便将结果输出输入到文档中


或者2)给定适当的媒体类型,浏览器至少在理论上(根据datauri RFC)应该能够直接从datauri加载任何文件。“”足以加载非gzip css样式表。这里的问题是什么链接类型属性和datauri mediatype组合应该起作用(以及它适用于哪些浏览器)?优选地,对于用户脚本,这将是在Opera、FF和Chrome中工作的组合。

在HTTP中,压缩通常仅用于传输,以减少要传输的负载。这是由工程师完成的

但是,限制非常有限,您只能指定媒体类型:

尽管可以使用,但大多数用户代理在
数据
URL中不支持它们。同样值得怀疑的是,描述这种多部分消息的附加数据是否会超过压缩实际有效负载所能获得的安全数据


因此,在
data
URL中压缩数据在理论上是可能的,但不可行。最好只压缩嵌入
数据的整个文档。

base64编码有33%的开销。已修复。)我真的不在乎开销的大小;对于一个用户脚本,大小对我来说并不像将所有内容保存在一个可分发的文件中那样重要。但是我希望base64 blob尽可能小,因此这个问题。你不想在你的JS中包含base64,并且gzip JS吗?如果大小对你来说不是那么重要,为什么你想减少vhe base64 blob的大小:这是为了开发可读性吗?好吧,这也是纯粹的JS文件膨胀。它仍然需要解析,对吗?因此,如果我有几个图标,和一两个样式表,那么很容易就会有50或60k的base64。gzipped,然后是base64,它明显更少:(现实世界的例子)9917字节的base64来自文本源,而不是3306字节的base64来自gzipped文本源。这并没有解决问题,也不正确。根据dataurl RFC,对任何东西进行编码都是完全合法的。gzip也不需要多部分mime类型;例如,application/gzip是完全合法的。就此而言,base64也不是唯一允许的编码—base64甚至不是默认编码(US-ASCII是)。当然,您可以通过指定相应的媒体类型将任何数据包装到
data
URL中。您还可以使用application/gzip数据来实现这一点。但是,数据将作为application/gzip数据处理,而不是作为CSS或JavaScript或其他内容处理。Base64编码也仅用于包装,以具有URL安全字符集。数据需要根据URL-encoding进行编码。当然,但这并没有解决如何包含Gzip css文件的问题。我还没有看到一个完整的实现,但我听说它是通过一个覆盖了mime类型的XMLHttpRequest来实现的,通过一个伪XMLHttpRequest发送Gzip字符串,这样数据就不会到处移动,而是让浏览器将其解压缩到responseText中。我看到的伪函数是:函数read(fileName){var xmlhttp=new XMLHttpRequest();xmlhttp.open(“GET”,fileName,false);xmlhttp.overrideMetype('text/plain;charset=x-user-defined');xmlhttp.send(null);return xmlhttp.responseText;}那么您将压缩数据发送到服务器进行解压缩了吗?那有什么好处?
dataurl    := "data:" [ mediatype ] [ ";base64" ] "," data