我目前在托管的虚拟服务器上,我想为我的Asp.Net 3.5站点启用GZip压缩,我该如何开始?
我试过使用'打包'的JS文件,但它们不起作用,我假设是因为它们没有正确处理......?
由于大多数Linux发行版都放弃了gzip和bzip2来支持LZMA2来压缩它们的包,以及许多平台上的许多开源实现,我想知道:我们不应该将DEFLATE和.zip格式(不幸的是一遍又一遍地反复)放弃,并继续采用其他现代方式分发我们的(源)包?
GNU tar支持J交换机,它使用xz(另一个LZMA2压缩器)作为过滤器:
$ tar cJf foo.tar.xz foo/
Run Code Online (Sandbox Code Playgroud)
但是,我倾向于使用7z(p7zip实现),它是7zaLinux下的朋友,用于创建存档.在创建档案时,我仍然使用"避免tar-bombs"范例,这意味着档案中有一个目录,因此从命令行中提取不会导致当前目录中的文件溢出(这是Linux上的标准运作方式,类似于tar,但在Windows下,它似乎要少得多.
无论如何,似乎由于在软件包中使用(例如Fedora RPMs和Ubuntu DEB),以及tarLZMA2是bzip2后使用的"下一个最好的东西" 等工具的过滤器.它具有很高的压缩率(在标准设置中远远超过bzip2)并且速度非常快(压缩比gzip略慢,
我自己做了一些基准测试,但我想在一些更广泛的基准测试中转向现场:
现在,你会注意到,作为参考实现的7-zip并没有出现在第一位.然而,Freearc使用它自己的.arc格式,这不是真正的跨平台能力,与80年代的旧 ARC 不兼容.nanozip不是开源的,这是一种低迷,但它的算法很重要,而不是归档!
无论如何,现在使用7-zip及其派生实现(xz)的性能不再是问题,并且压缩率本身就说明了,我想将我的源包分发为.7z或.tar.xz存档.但是,我面前有两个障碍,我似乎无法接受:
WinRAR的倡导者.不要误会我的意思,我对WinRAR或其用户没有怨恨,只是我不能在Linux上真正制作RAR,而且没有必要,因为我们有免费的LZMA2工具.正如我所说,自从成为发行包的一个组成部分后,它可以在任何现代发行版中使用.由于需要大约在同一时间做出.7z比.rar和LZMA2文件一般都比较小,我不明白为什么不能使用7-Zip.
tar档案必须是zip或bzip2,没有例外.这很难.为什么有这么多人对gzip印象深刻?甚至bzip2在大多数情况下都没有看到太多用法.当然,gzip很快,对于按需压缩(如Web服务器或创建大型镜像备份)而言,这是一个很好的观点.但是分发软件怎么样?LZMA2 非常不对称.虽然压缩需要时间,但解压缩速度非常快.
好的,现在我的问题出现了:
既然LZMA2可以说是下一个更好的压缩算法,为什么人们不会跳上火车呢?为什么人们仍然使用专有的WinRAR,压缩率较差,并且没有移植到Linux(除了unrar,但你显然无法创建存档).为什么Tarball仍然大部分都是gziped?
难道没有办法说服人们转向更新,更可靠的归档格式,这不仅是跨平台的,而且是免费的吗?当我给某人一个文件结尾时.7z,他们往往不知道该怎么做,这会改变吗?
哦,这是我自己做的小基准.我到处使用默认设置:
11837440 GNUtar_TAR.tar
10657984 Arc_ARC.arc
9632524 PA2010_TAR_BZip2.tar.bz2
9536967 PA2010_LHA_Frozen5.lzh
9510148 PA2010_ZIP_BZip2.zipx
9490211 …Run Code Online (Sandbox Code Playgroud) 我想链接多个流操作(例如下载文件,动态解压缩,以及处理没有任何临时文件的数据).这些文件是7z格式.有一个LZMA SDK可用,但强制我创建一个外部输出流而不是一个流本身 - 换句话说,输出流必须完全写入才能使用它.SevenZipSharp似乎也缺少这个功能.
有没有人这样做过?
// in pseudo-code - CompressedFileStream derives from Stream
foreach (CompressedFileStream f in SevenZip.UncompressFiles(Web.GetStreamFromWeb(url))
{
Console.WriteLine("Processing file {0}", f.Name);
ProcessStream( f ); // further streaming, like decoding, processing, etc
}
Run Code Online (Sandbox Code Playgroud)
每个文件流的行为类似于表示一个文件的一次性读取流,并且在主压缩流上调用MoveNext()会自动使该文件无效并跳过该文件.
可以进行类似的构造以进行压缩.示例用法 - 对非常大量的数据进行一些聚合 - 对于dir中的每个7z文件,对于每个文件内部,对于每个文件中的每个数据行,总结一些值.
更新2012-01-06
#ziplib(SharpZipLib)已经完成了我需要的带有ZipInputStream类的zip文件.下面是一个示例,它将所有文件生成为给定zip文件中不可搜索的流.仍在寻找7z解决方案.
IEnumerable<Stream> UnZipStream(Stream stream)
{
using (var zipStream = new ZipInputStream(stream))
{
ZipEntry entry;
while ((entry = zipStream.GetNextEntry()) != null)
if (entry.IsFile)
yield return zipStream;
}
}
Run Code Online (Sandbox Code Playgroud) 我有这个未压缩的字节数组:
0E 7C BD 03 6E 65 67 6C 65 63 74 00 00 00 00 00 00 00 00 00 42 52 00 00 01 02 01
00 BB 14 8D 37 0A 00 00 01 00 00 00 00 05 E9 05 E9 00 00 00 00 00 00 00 00 00 00
00 00 00 00 01 00 00 00 00 00 81 01 00 00 00 00 00 00 00 00 00 00 00 00 00 …Run Code Online (Sandbox Code Playgroud) 我想为公共资产和HTTP响应启用GZIP压缩以提高性能.我的网站有很多移动访问权限.
据我所知,Play Framework中没有任何内置支持这一点,而Heroku似乎也没有解决方案.
在我的应用上开始获得压缩的最佳方法是什么?
我正在使用django模板,为了便于阅读,我的html看起来类似于以下内容:
{% if some_variable %}
text
{% else %}
nothing exists here
{% endif %}
{% for item in set %}
{% if forloop.first %}
...etc...
Run Code Online (Sandbox Code Playgroud)
它在运行时转换为以下html,其中包括大量的空格和返回:
text
<div>
<li
class='some_class
>
some text
</li>
</div>
etc...
Run Code Online (Sandbox Code Playgroud)
在查看页面源时,有些页面甚至可以运行~3,000行html.
有没有工具在运行时压缩这个HTML?如何删除额外的换行符?
我必须使用包含在各个目录中的大量 jpeg 图像创建低分辨率 AVI 视频。我有将近一百个目录,每个目录可能包含数千个图像。
为了自动化这个过程,我使用 OpenCV 编写了一个 python 脚本来创建一个视频对象,从给定目录加载每个图像,并将每个图像写入该目录的特定视频文件。所有这些都很好用。我的问题是如何控制视频对象的压缩质量。
VideoWriter 模块接受 5 个参数。第二个参数“fourcc”设置压缩代码。
cv2.VideoWriter.open(文件名,fourcc,fps,frameSize[,isColor])
我们可以使用“四字符代码”(即fourcc)在cv2.VideoWriter 中指定压缩代码。
Fourcc = cv2.cv.CV_FOURCC('M','S','V','C') #Microspoft Video 1
这种方法有效,只是视频对象的压缩质量始终设置为最大值。
如果我们让fourcc = -1,则会打开一个Windows 视频压缩对话框,允许用户选择视频压缩并在0 到100 之间设置压缩质量(或时间质量比)。
每个视频必须是 AVI,并且必须满足特定的文件大小要求。如果使用最大压缩质量,则视频文件太大。然而,要求用户为每个视频选择视频压缩和压缩质量会破坏脚本的自动化。
那么,如何在不使用 Windows 视频压缩对话框的情况下指定视频对象的压缩质量?
我的整个代码发布在下面
import cv2, os
Workspace = "J:\jpg to AVI test"
year = "2014"
file_extension = "avi"
Image_file_dir = Workspace + "\\12 - ECD-BONNETT CREEK Y INT (" + year + ")"
print Image_file_dir
Image_file_list = os.listdir(Image_file_dir)
print "Image_file_list: " + str(Image_file_list)
img_cnt = 0
for …Run Code Online (Sandbox Code Playgroud) 想要解压缩从 API 获取的 GZipped 响应。尝试了下面的代码,它总是返回类似:-
\n\n\\u001f\xef\xbf\xbd\\b\\0\\0\\0\\0\\0\\0\\0\xef\xbf\xbdY]o........\nRun Code Online (Sandbox Code Playgroud)\n\n我的代码是:
\n\n private string GetResponse(string sData, string sUrl)\n {\n try\n {\n string script = null;\n try\n {\n string urlStr = @"" + sUrl + "?param=" + sData;\n\n Uri url = new Uri(urlStr, UriKind.Absolute);\n\n HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);\n request.Method = "GET";\n request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;\n\n using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())\n using (StreamReader reader = new StreamReader(response.GetResponseStream()))\n {\n script = reader.ReadToEnd();\n } \n }\n catch (System.Net.Sockets.SocketException)\n {\n // The remote site is currently …Run Code Online (Sandbox Code Playgroud) 在 Excel 中,它们将字符串“压缩”为数字映射(尽管我不确定在这种情况下 compress 这个词是否正确)。下面是一个示例:
虽然这有助于减少整体文件大小和内存占用,但 Excel 如何对字符串字段进行排序?是否每个字符串都需要通过查找映射:如果是这样,那不会大大增加/减慢对字符串字段进行排序的成本(如果有 1M 个值,1M 键查找将不会是琐碎的)。关于这个的两个问题:
我正在尝试压缩长向量(它们的大小范围从 1 到 1 亿个元素)。向量具有正整数,其值范围从 0 到 1 或 1 亿(取决于向量大小)。因此,我使用 32 位整数来包含大数字,但这会消耗太多存储空间。这些向量具有以下特征:
以下是数组中的值示例:{initial padding..., 0, 1, 2, 3, 4, 5, 6, 4, 7, 4, 8, 9, 1, 10, ... later ..., 1110, 11, 1597, 1545, 1392, 326, 1371, 1788, 541,...}
我想要什么?:因为我使用的是 32 位整数,这会浪费大量内存,因为可以用小于 32 位表示的较小数字也会重复。我想最大限度地压缩这个向量以节省内存(理想情况下,减少 3 倍,因为只有减少这个数量或更多才能满足我们的需求!)。实现这一目标的最佳压缩算法是什么?或者是否可以利用上述数组的特征将该数组中的数字可逆地转换为 8 位整数?
我尝试过或考虑过的事情: