精华内容
下载资源
问答
  • 存储容量有限的嵌入式设备上,一般对于系统分区使用过程中没有数据写入需求,同时希望可以节省存储空间——只读压缩文件系统应运而生。另外,只读压缩文件系统也可用于归档文件。相比tar,zip等压缩软件,只读...

    为什么需要只读压缩文件系统?

    在存储容量有限的嵌入式设备上,一般对于系统分区在使用过程中没有数据写入需求,同时希望可以节省存储空间——只读压缩文件系统应运而生。另外,只读压缩文件系统也可用于归档文件。相比tar,zip等压缩软件,只读压缩文件系统的性能和灵活性都更好。Linux早期的只读文件系统有CramFS和SquashFS,以及参考了上述两个文件系统设计的用户态只读压缩文件系统CromFS。另外,最近两年在Android平台上实现商用的EROFS也值得关注。EROFS针对手机使用场景,对读放大和内存占用过多从设计理念上带来了一些新的优化。

    CramFS,SquashFS,CromFS横评

    CramFS被设计成用于存储空间很小的嵌入式设备上,倾向于极致简单、极其节省空间。在使用上存在诸多限制,如:单个文件大小不能超过16MB、文件系统大小略大于256MB(最后一个文件允许超过256MB空间范围,即文件系统总大小不超过272MB)。CramFS的gid只保存8位,mkcramfs会简单的将gid截断保留最后8位(有一些安全风险)。CramFS支持硬链接,但是被硬链接的文件引用计数不会增加。CramFS文件没有时间戳,所有文件的创建/访问时间戳都是1970年1月1日 0:00:00 GMT。(最近访问过的文件可能会被更新时间戳,但只在内存中保存。)CramFS的镜像只支持被同样字节对齐方式的机器创建和挂载使用,页面大小只支持4KB。

    SquashFS的出现替代了CramFS,但CramFS通过支持XIP(Execution In Place)有了新的用武之地。SquashFS设计上相比CramFS去掉了大部分限制因素:其会保存完整的uid/gid(32位)、文件创建时间,单文件最大支持16 EB,文件系统最大大小也是16 EB。压缩后的inode平均消耗8字节,根据文件类型不同(文件、目录、符号链接等)inode大小有所变化。对于压缩文件系统,压缩输入的数据块大小(chunk size)决定了压缩率收益和潜在的读放大开销。SquashFS 2.x版本的chunk size最大为64KB, SquashFS 3.x版本的chunk size最大可达1MB。SquashFS 3.x版本默认的chunk size是128KB,相比4KB大小的chunk size压缩率有明显提升。SquashFS还支持fragment block,即多个小文件存入一个block,极大的提升了压缩率。SquashFS支持大端和小端对齐方式,可以在不同的字节序机器上创建和挂载。

    CromFS的主要设计目标是高压缩率,性能和内存使用量不是它关心的方面。CromFS是一个用户态文件系统,通过块级别去冗和高压缩率算法实现压缩收益最大化。同CramFS和SquashFS的详细特性对比如下表:

    表1 CramFS,SquashFS,CromFS对比

    5b38ecb3b9f3ad7c1ec889f47e00e95f.png

    EROFS带来哪些新变化?

    EROFS的全称是Enhanced Read-Only File System,相比前述只读压缩文件系统最大的不同是压缩思路和解压方式的改变。不同于以往固定输入长度(Fixed Sized Input)的压缩形式,EROFS采用固定输出长度(Fixed Sized Output)的压缩思路。这解决了固定输入长度的压缩带来的读放大问题,4KB的固定输出长度压缩就可达到128KB的固定输入长度压缩的压缩率。对于SquashFS来说,达到同样的压缩收益可能需要比EROFS多读几倍的数据块。另外,SquashFS在运行时内存使用方面也远远多于EROFS的原地解压策略,这在系统处于低内存状态时会导致读性能大幅下降。为了更好的解压速度同时保证一定的压缩率,EROFS使用的压缩算法为LZ4。默认压缩输出块大小为4KB,其他特性支持上均对标SquashFS。这里不再一一赘述。

    定长输出和定长输入的示意如下图所示,EROFS会通过多次尝试不同长度的输入数据将其压缩到固定大小(4KB)的输出块上,SquashFS则是根据预先配置好的输入长度(Chunk Size)压缩数据并写到输出块上(可能跨多个数据块)。当EROFS的固定输出长度设为存储设备的块大小(如:4KB)时,可以认为没有读放大。因为无论要读的内容是哪一部分以及大小,对于块设备来说都至少要读取一个数据块。

    89395955288a034b773b79deb28db624.png

    图 1 定长输出和定长输入的区别

    在内存分配上,EROFS根据上层希望读取的内容是否需要将盘上读出数据全部解压会选择不同的策略。对于需全部解压的情况,EROFS会使用VFS已分配的Page Cache内存页,这样节省了内存的占用;对于需部分解压的情况,EROFS则会独立分配缓存页以便后续读取相同压缩块时避免产生新的I/O。当压缩数据块已被读入内存后,以下图中读取数据块3,4为例,EROFS的基本数据解压方式大致步骤如下:

    1) 根据上层要读取范围计算要解压的数据块(这个例子中是0,1,2,3,4)

    2) 分配临时缓存页(可选)存放解压内容(0,1,2),VFS已分配数据页不用再分配

    3) 通过vmap将上述物理页映射为连续虚拟页

    4) 如果有原地I/O占用了VFS分配的数据页,则将数据拷贝到临时页

    5) 解压数据到指定虚拟地址

    3c16edab854baff1cb4d26762b8187f9.png

    图 2 EROFS压缩和解压示意图

    为优化内存占用,EROFS还提供了缓存解压/滚动解压(预分配一定数量的内存页)、原地解压等策略。另外,通过调度优化和协同解压进一步改善了数据读取性能。理论上,解压的过程增加了CPU计算时间,而压缩数据读取减少了I/O时间(特别是对于顺序读取来说)。所以对于只读压缩文件来说,压缩率达到一定收益后读性能会好于不压缩的文件系统。即CPU时间的增加小于I/O时间的减少,这从EROFS的测试数据也可以看出:当压缩节省空间超过35%以上时,随压缩比提升EROFS的读性能(特别是顺序读)会越来越好于EXT4。

    以上就是对只读压缩文件系统的一个简单介绍,可以看出根据应用场景的不同各个只读压缩文件系统在压缩比、压缩/解压效率上各有侧重。EROFS相比其他只读压缩文件系统引入了更多的设计思路,实现细节和一些优化值得肯定。

    参考文献:

    [1]  Gao et. al., EROFS: A Compression-friendly Readonly File System for Resource-scarce Devices, ATC 2019

    [2] SquashFS, https://zh.wikipedia.org/wiki/SquashFS

    [3] CromFS, https://bisqwit.iki.fi/source/cromfs.html

    [4] SquashFS HOWTO, https://tldp.org/HOWTO/SquashFS-HOWTO/whatis.html

    [5] CramFS, https://www.kernel.org/doc/html/latest/filesystems/cramfs.html

    b0b3582e35402fd9972e7b617cf3e101.gif长按关注内核工匠微信Linux 内核黑科技 | 技术文章 | 精选教程
    展开全文
  • gizp压缩是一种http请求优化方式,通过减少...webpack打包时可以借助 compression webpack plugin 实现gzip压缩,首先需要安装该插件:npm i -D compression-webpack-pluginvue cli3.0 生成的项目里,可 vue...

    gizp压缩是一种http请求优化方式,通过减少文件体积来提高加载速度。html、js、css文件甚至json数据都可以用它压缩,可以减小60%以上的体积。

    webpack在打包时可以借助 compression webpack plugin 实现gzip压缩,首先需要安装该插件:

    npm i -D compression-webpack-plugin

    在vue cli3.0 生成的项目里,可在 vue.config.js 中按照如下方式进行配置:

    压缩前后大小大致如下:

    生成的压缩文件以.gz为后缀:

    一般浏览器都已支持.gz的资源文件,在http请求的Request Headers 中能看到 Accept-Encoding:gzip

    要使服务器返回.gz文件,还需要对服务器进行配置,根据Request Headers的Accept-Encoding标签进行鉴别,如果支持gzip就返回.gz文件。

    总结

    以上所述是小编给大家介绍的Vue CLI3 开启gzip压缩文件的方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    展开全文
  • 你可以通过修改源码支持传输文件之前,加个压缩功能,这个我们的项目中就有过调研,调研的结果是已经进行了一定的源码改动做到了,不过我们是在上传完成时做一些操作,你的是下载时做一些操作,c++的东西主要...

    这个从理论上讲不是一定不可以实现,而是较难实现,难在于现成的ftp服务器不提供这种功能,可以实现是因为有哪些开源的ftp服务 比如filezilla. 你可以通过修改源码支持在传输文件之前,加个压缩功能,这个在我们的项目中就有过调研,调研的结果是已经进行了一定的源码改动做到了,不过我们是在上传完成时做一些操作,你的是在下载时做一些操作,c++的东西主要是通过一些消息,你请求下载的时候肯定也是由消息的,你可以截获,然后写个压缩程序调用一下。

    引用

    1.#!/bin/sh                           //这是shell程序的开头部分,必须地。

    2.tar -cvf filter.tar filter/         //解压 filter.tar 到 filter/文件夹下

    3.ftp -n<

    4.open 10.70.193.33                   // 打开10.70.193.33 这个ftp服务地址,就是连接服务。

    5.user username  password             // 使用用户名和密码

    6.binary                              // 传输文件是用二进制的方式。

    7.prompt off                          // 禁用提示 (相当于bat中的@echo off)

    8.cd /app/ngapp/data/bak              // 进入 /app/ngapp/data/bak 目录

    9.mput filter.tar                     // 将filter.tar 文件上传

    10.close                              // 关闭连接

    11.bye                                // 退出ftp命令行

    展开全文
  • 本文最先发布:如何解压缩 tar.xz 文件 - ITCoder​www.itcoder.techtar命令...XZ 是一个基于 LZMA 算法,用于压缩文件的流行算法。按照惯例,使用 xz 压缩的 tar 包名字都以 .tar.xz 或者 .txz结尾。本文讲解了...

    7d32fc1232e787068522ddc00ffdf224.png

    本文最先发布在:

    如何解压缩 tar.xz 文件 - ITCoderwww.itcoder.tech

    tar命令允许你创建和解压缩 tar 包。它支持很多压缩算法,例如 gzip, bzip2, lzip, lzop, xz 和 compress。

    XZ 是一个基于 LZMA 算法,用于压缩文件的流行算法。

    按照惯例,使用 xz 压缩的 tar 包名字都以 .tar.xz 或者 .txz结尾。

    本文讲解了如何使用tar命令来解压缩.tar.xz 或者 .txz 包。

    一、解压 tar.xz 文件

    tar 工具默认在所有的 Linux 发行版和 macOS 上都已经安装好了。

    想要解压一个 tar.xz 文件,使用 tar命令加上--extract(-x)选项,并且在-f选项后面加上包文件名。

    tar -xf archive.tar.xz

    tar 自动检测压缩类型,并且解压缩包文件。同样的命令可以用来解压缩使用其他算法,例如:.tar.gz 或者.tar.bz2 压缩的文件。

    如果你不想使用命令行,你可以使用 GUI 文件管理器。 想要解压一个 tar.xz 文件,只需要简单右键点击你想要解压的文件,并且选择"Extract”。Windows 用户需要安装一个名为7zip的工具来解压 tar.xz 文件。

    如果想要显示一些输出记录,使用-v选项。这个选项告诉tar文件在终端被解压时,显示压缩包里面的文件名。

    tar -xvf archive.tar.xz

    默认情况下,tar解压包文婧内容到当前目录。想要解压包文件到一个指定文件夹,使用--directory (-C)。

    下面的例子显示了如何将压缩包内容,解压到文件夹/home/linuxize/files

    tar -xf archive.tar.xz -C /home/linuxize/files

    二、从 tar.xz 文件中解压指定文件

    想要从 tar.xz 文件中解压一个指定的文件,或者多个指定文件,在压缩包名字后面,以空格间隔,列出需要解压出的文件名。

    tar -xf archive.tar.xz file1 file2

    当解压文件时,你必须提供准确的名字,包括路径。这些路径就像 使用tar加上--list-t)选项命令运行打印出的结果一样。

    从压缩包中解压出一个或者多个文件夹,也和上面解压多个文件一样的:

    tar -xf archive.tar.xz dir1 dir2

    如果你尝试解压一个在压缩包中不存在的文件,一个类似下面的错误提示将会出现:

    tar -xf archive.tar.xz README

    输出:

    tar: README: Not found in archive
    tar: Exiting with failure status due to previous errors

    --wildcards选项允许你从一个 tar.xz 文件中基于一个泛名字模式来解压出你需要的文件。这个样式必须使用引号括起来,以免 shell 解释它。

    例如,只想解压以.png结尾的文件,你需要使用:

    tar -xf archive.tar.xz --wildcards '*.png'

    三、从标准输入解压 tar.xz 文件

    当解压一个从标准输入(通常是通过管道)读取的压缩 tar.xz 文件,你必须指定一个压缩选项。这个-J选项告诉tar这个文件是使用 xz 来压缩的。

    在下面的这个例子中,我们使用 wget 命令下载 Linux Kernel,并且通过管道将输出传递给tar命令:

    wget -c https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.3.tar.xz -O - | sudo tar -xj

    如果你不指定解压缩选项,tar将会提示你应该用哪一个选项:

    tar: Archive is compressed. Use -J option
    tar: Error is not recoverable: exiting now

    四、列出 tar.xz 文件内容

    想要列出 tar.xz 文件内容,使用--list-t)选项:

    tar -tf archive.tar.xz

    输出将会像下面这样:

    file1
    file2
    file3

    如果你添加 --verbose-v)选项,tar将会打印更多信息,例如拥有者,文件大小,时间戳等等:

    tar -tvf archive.tar.xz

    输出:

    -rw-r--r-- linuxize/users       0 2020-02-15 01:19 file1
    -rw-r--r-- linuxize/users       0 2020-02-15 01:19 file2
    -rw-r--r-- linuxize/users       0 2020-02-15 01:19 file3

    五、总结

    tar.xz 是一个使用 xz压缩的 tar 包。想要解压 tar.xz 文件,使用tar -xf命令,加上压缩包名字即可。

    如果你有任何疑问,请通过以下方式联系我们:

    微信: sn0wdr1am86

    96f617b45a485b32de46168546ca06fb.png

    微信群: 加上面的微信,备注微信群

    QQ: 3217680847

    38e8f6bc09a3ff362d49528182930118.png

    QQ 群: 82695646

    f5774054b9634859984b8e60f1bd4cad.png

    184ce52d534cd7bd6f8c579680925b23.png
    展开全文
  • java(JDK)中我们可以使用ZipOutputStream去创建zip压缩文件,(参考我之前写的文章 使用java API进行zip递归压缩文件夹以及解压 ),也可以使用GZIPOutputStream去创建gzip(gz)压缩文件,但是java中没有一种官方...
  • 目前打开网页时,会首先加载各种资源,js、css、图片等等,这时如果这些文件较大的话,打开网页就会比较慢,用户体验不好,有一种需要后端配合的最高级的方法是服务端渲染(SSR),今天我们只分享一下前端单方面优化...
  • vue cli2 的项目中 找到 build/build.js,webpack(webpackConfig, cb) 的 回调函数cb中添加const exec = require('child_process').execexec('cd .\\dist && del dist.zip', function(error) {if ...
  • ASP.NET Core中我们可以很容易的启用响应压缩,但是针对预压缩文件,就需要做一些额外的功能了。 这篇博客文章展示了如何ASP.NET Core中预压缩静态文件。为什么需要预压缩文件?虽然从服务器请求文件时, ...
  • ...这一章我们来讲我们非常熟悉的一种文件格式。...我们windows当中压缩文件可以说非常常见的一种文件格式,我们下载软件、资料、安装包一般来说都是压缩文件的格式。那我们linux系统当中有...
  • 这段时间用 Vue2.0 开发项目,每次打包都会用到 npm run build 命令,但是每次部署...所以索性执行 npm run build 命令时就直接打包成zip文件,方便省事!1、插件装备webpack插件:filemanager-webpack-plugin,该...
  • 1: package.json中添加prod模式,作为生产环境打包,如下"scripts": {"dev": "vue-cli-service serve","build": "vue-cli-service build","prod": "vue-cli-service build --mode prod"}2:添加.env.prod文件NODE_...
  • 原标题:如何压缩PDF文件,不知道你就亏了~我们日常学习和日常工作中,pdf...工具/原料方法/步骤方法一:风云文件压缩PDF文件的使用越来越多,今天给大家介绍的这款风云文件压缩软件是我一直使用的,效果很好。2...
  • 我的SQLite db文件大小为85MB,使用XZ格式压缩,其大小已减少到16MB.我使用以下代码(和XZ for Java提供的JAR)Android Jelly Bean中解压缩它:try {FileInputStream fin = new FileInputStream(path + "myFile.xz");...
  • 具体情况是这样的: 服务器端... 考虑到xml文件压缩后会少的很多,就想下载前将其压缩, 问题就 怎样客户端通过ftp协议将服务器端的xml文件压缩呢? 现在用的是commons-net 链接的 各位朋友都说说有啥好的解决方案莫
  • 当时的方法后来发现了一个问题,就是打包后的应用拿到其他机子上没法用,原因在于index.html的地址是个... 查阅了许多资料后发现之前将二者结合的方法不是很有效(开发和生产环境不一致等),正好Vue3也进入beta阶段...
  • 首先需要自己项目根目录增加配置文件:vue.config.js主要可能是这个选项比较值得注意: assetsDir: "static",分享一下我的配置文件(MacOS):module.exports = {// 基本路径baseUrl: "/",// 输出文件目录outputDir:...
  • require(‘./utils‘)//导入utils.jsconst webpack = require(‘webpack‘)//使用webpack来使用webpack内置插件const config = require(‘../config‘)//config文件夹下index.js文件const merge = re...
  • test 单元测试文件 .eslintrc.json 项目的eslint配置 .gitignore 上传至git仓库需要忽略的文件 .nvmrc 指定项目期望用的node版本 .travis.yml 自动化构建配置文件 CHANGELOG.md 版本发布记录文件 npm-shrinkwrap....
  • 虽然我们经常使用压缩文件,但不一定真正了解,数据压缩的原理和不同压缩文件格式的区别。一、压缩原理压缩分为“有损压缩”和“无损压缩”。有损压缩就是直接对文件进行压缩,删除不重要的数据,一般用于音乐、视频...
  • 相对于vue2的响应式来说,vue3的响应式不管从方面来说,都是有很大的提升。了解vue3响应式我们可以github里去下载一个vue-next,这是vue3的响应式的模块。monorepomonorepo是一种将多个packpage放在一个repo中的...
  • 安装Vuex安装完成后package.json中查看vuex的版本{ "name": "vue3-meteor", "version": "0.0.0", "scripts": { "dev": "vite", "build": "vite build" }, "dependencies": { "vue": "^3.0.2", "vue-router": "^...
  • test 单元测试文件 .eslintrc.json 项目的eslint配置 .gitignore 上传至git仓库需要忽略的文件 .nvmrc 指定项目期望用的node版本 .travis.yml 自动化构建配置文件 CHANGELOG.md 版本发布记录文件 npm-shrinkwrap....
  • 当今社会,每个人工作中都经常会遇到视频压缩的问题和需求,微信、QQ等社交软件对于视频传输有大小限制,源文件太大上传邮件要花费很长时间,硬盘拷贝不易携带还不能及时传送......很多人遇到此类问题,都寄希望于...
  • 由于数据量日益增加,存储技术没有齐头并进,因此,文件压缩已成为当今存储数据的重要...我们深入研究文件压缩软件及优缺点之前,简要介绍一下不同的压缩格式。以下是几种常用的流行文件压缩格式:RAR——流行的...
  • 忘了在哪听说的了,一个优秀的程序员,如果他做的任务需要重复三次以上时,那么他就应该用代码去完成。(原话肯定没我说的这么拉胯233333)于是就想趁着今天写点能用程序简化工作的方法。学校的程序设...
  • test 单元测试文件 .eslintrc.json 项目的eslint配置 .gitignore 上传至git仓库需要忽略的文件 .nvmrc 指定项目期望用的node版本 .travis.yml 自动化构建配置文件 CHANGELOG.md 版本发布记录文件 npm-shrinkwrap....
  • 举例来说,当一个组件中使用了多个 mixin 的时候,光看模版会很难分清一个属性到底是来自一个 mixin。 HOC 也有类似的问题。 命名空间冲突。由不同开发者开发的 mixin 无法保证不会正好用到一样的属性或是...
  • home.vue文件 Home user.vue文件 User 5.3、src中创建router文件夹,并创建index.js文件 import { createRouter, createWebHashHistory} from 'vue-router'const Home = ()=> import('./../views/home.vue')const...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 476
精华内容 190
关键字:

压缩文件压缩在哪