草庐IT

javascript - 在 javascript 中包含 base64 gzipped 样式表/图像?

coder 2025-01-09 原文

我知道您可以在 javascript 文件中以 base64 格式存储 css 和图像以及其他文件类型。然而,它们相当大......并且压缩后,它们缩小了很多,即使 base64 编码的开销约为 33%。

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

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

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

所以假设一个 base64 字符串被嵌入到 javascript 中,问题是如何使它成为有意义的东西。

或者:

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

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

最佳答案

在 HTTP 中,压缩通常仅应用于传输以减少要传输的有效负载。这是由 Content-Encoding header field 完成的.

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

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

尽管您可以使用 multipart message ,大多数用户代理在 data URL 中不支持它们。描述这种多部分消息的附加数据是否不会超过您通过压缩实际有效负载而保护的数据也值得怀疑。

所以压缩data URL中的数据在理论上是可行的,但不切实际。最好简单地压缩 data URL 嵌入的整个文档。

关于javascript - 在 javascript 中包含 base64 gzipped 样式表/图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9048543/

有关javascript - 在 javascript 中包含 base64 gzipped 样式表/图像?的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  3. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

  4. ruby - 如何在 Ruby 中拆分参数字符串 Bash 样式? - 2

    我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"

  5. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  6. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  7. ruby-on-rails - 在 heroku 的 .fonts 文件夹中包含自定义字体,似乎无法识别它们 - 2

    Heroku支持人员告诉我,为了在我的Web应用程序中使用自定义字体(未安装在系统中,您可以在bash控制台中使用fc-list查看已安装的字体)我必须部署一个包含所有字体的.fonts文件夹里面的字体。问题是我不知道该怎么做。我的意思是,我不知道文件名是否必须遵循heroku的任何特殊模式,或者我必须在我的代码中做一些事情来考虑这种字体,或者如果我将它包含在文件夹中它是自动的......事实是,我尝试以不同的方式更改字体的文件名,但根本没有使用该字体。为了提供更多详细信息,我们使用字体的过程是将PDF转换为图像,更具体地说,使用rghostgem。并且最终图像根本不使用自定义字体。在

  8. ruby-on-rails - 在 Ruby (on Rails) 中使用 imgur API 获取图像 - 2

    我正在尝试使用Ruby2.0.0和Rails4.0.0提供的API从imgur中提取图像。我已尝试按照Ruby2.0.0文档中列出的各种方式构建http请求,但均无济于事。代码如下:require'net/http'require'net/https'defimgurheaders={"Authorization"=>"Client-ID"+my_client_id}path="/3/gallery/image/#{img_id}.json"uri=URI("https://api.imgur.com"+path)request,data=Net::HTTP::Get.new(path

  9. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  10. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

随机推荐