首页 > 其他分享 >短视频开发app,利用数据压缩加速大文件传输

短视频开发app,利用数据压缩加速大文件传输

时间:2024-02-03 09:22:06浏览次数:24  
标签:const res app 文件传输 util gzip require 数据压缩

短视频开发app,利用数据压缩加速大文件传输

当使用 HTTP 进行大文件传输时,我们可以考虑对大文件进行压缩。通常短视频开发app在发送请求时,都会携带 accept 和 accept-* 请求头信息,用于告诉服务器当前短视频开发app所支持的文件类型、支持的压缩格式列表和支持的语言。

accept: */*
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9

 

gzip 的压缩率通常能够超过 60%,而 br 算法是专门为 HTML 设计的,压缩效率和性能比 gzip 还要好,能够再提高 20% 的压缩密度。

上述 HTTP 请求头中的 Accept-Encoding 字段,用于将客户端能够理解的内容编码方式(通常是某种压缩算法)告诉给服务端。通过内容协商的方式,短视频开发app服务端会选择一个客户端所支持的方式,并通过响应头 Content-Encoding 来通知客户端该选择。

cache-control: max-age=2592000
content-encoding: gzip
content-type: application/x-javascript

 

以上的响应头告诉浏览器返回的 JS 脚本,是经过 gzip 压缩算法处理过的。不过需要注意的是,gzip 等压缩算法通常只对文本文件有较好的压缩率,而图片、音视频等多媒体文件数据本身就已经是高度压缩的,再用 gzip 进行压缩也不会有好的压缩效果,甚至还可能会出现变大的情况。
了解完 Accept-Encoding 和 Content-Encoding 字段,我们来验证一下未开启 gzip 和开启 gzip 的效果。

1.1 未开启 gzip

const fs = require("fs");
const http = require("http");
const util = require("util");
const readFile = util.promisify(fs.readFile);

const server = http.createServer(async (req, res) => {
  res.writeHead(200, {
    "Content-Type": "text/plain;charset=utf-8",
  });
  const buffer = await readFile(__dirname + "/big-file.txt");
  res.write(buffer);
  res.end();
});

server.listen(3000, () => {
  console.log("app starting at port 3000");
});

 

在这里插入图片描述
1.2 开启 gzip

const fs = require("fs");
const zlib = require("zlib");
const http = require("http");
const util = require("util");
const readFile = util.promisify(fs.readFile);
const gzip = util.promisify(zlib.gzip);

const server = http.createServer(async (req, res) => {
  res.writeHead(200, {
    "Content-Type": "text/plain;charset=utf-8",
    "Content-Encoding": "gzip"
  });
  const buffer = await readFile(__dirname + "/big-file.txt");
  const gzipData = await gzip(buffer);
  res.write(gzipData);
  res.end();
});

server.listen(3000, () => {
  console.log("app starting at port 3000");
});

 

在这里插入图片描述
观察上面两张图,我们可以直观感受到当传输 5.5 MB 的 big-file.txt 文件时,若开启 gzip 压缩后,文件被压缩成 256 kB。这样就大大加快了短视频开发app文件的传输。在实际工作场景中,我们可以使用 nginx 或 koa-static 来开启 gzip 压缩功能。

以上就是短视频开发app,利用数据压缩加速大文件传输, 更多内容欢迎关注之后的文章

 

标签:const,res,app,文件传输,util,gzip,require,数据压缩
From: https://www.cnblogs.com/yunbaomengnan/p/18004348

相关文章

  • 外卖跑腿app开发:重塑都市生活的便捷与效率
    随着现代生活节奏的加快,人们对外出就餐和日常用品的需求日益增长,外卖和跑腿服务应运而生,逐渐成为日常生活中不可或缺的一部分。而这种需求的满足在很大程度上得益于外卖跑腿app的开发与应用。本文将对外卖跑腿app的发展历程、市场需求、功能特点、以及未来趋势进行深入探讨。一、外......
  • uniapp sqlite方法封装
    vardbName='xxx'//数据库名称vardbPath='_doc/xxx.db'//数据库地址,推荐以下划线为开头_doc/xxx.db//判断数据库是否打开constisOpen=(plus:any)=>{//数据库打开了就返回true,否则返回falsevaropen=plus.sqlite.isOpenDatabase({name:......
  • 依赖注入之IConfiguration 访问appSetting.json
    (1)创建NET6Webapi(2)appsettings.json{"Logging":{"LogLevel":{"Default":"Information","Microsoft.AspNetCore":"Warning"}},"AllowedHosts":"*&q......
  • 应用--WebApplication
    应用--Program中的WebApplication在6.0,微软团队对于NetCore做了很大的改变,其中有一个改变就是推出了新的托管模型--最小托管模型,使用该模型可以创建最小的web应用。(最小webapi请查看官网)需要掌握:什么是最小托管模型?以及他的作用什么是WebApplication和WebApplicationBuilde......
  • uniapp在H5中排除底部和顶部导航栏
    在app和小程序中,uniapp的100vh不会将底部和顶部导航栏的高度放进去,所以100vh就是整个中间内容的高度,但是在H5中100vh是把顶部和底部导航栏一起放进去的高度,所以为了要在顶部和顶部导航栏排除在H5应用中,需要在内容的高度里设置一下,减去顶部和底部的导航栏高度,为此在uniapp中使用了-......
  • uni-app+vue3会遇到哪些问题
    已经用uni-app+vue3+ts开发了一段时间,记录一下日常遇见的问题和解决办法uni-app中的单端代码uni-app是支持多端,如果你想让你的代码,只在部分平台使用,那么就需要用的它的单端处理语法//#ifdef和//#ifndef等。1.//#ifdefxxx只在xxx平台生效//#ifdefMP-WEIXINmenuB......
  • SharePoint Online 启用网站集 App Catalog
    前言最近,有个项目需要使用SharePointFramework解决方案,但是,网站集没有启用对应的AppCatalog功能,所有,就需要用PowerShell来进行启用。正文下面就是对应的命令,我这里用了UseWebLogin,意思是会弹出一个登录的Web界面,从里面输入管理员的账号密码,然后用来执行下面......
  • 【APP自动化进阶】APP自动化项目框架实战
    一、自动化项目介绍1.涉及技术栈pythonappiumseleniumpytestalluresubprocessadb2.实现的功能概述APP自动化执行支持pytest生成测试报告多线程执行自动开启、关闭appium、allure等服务二、框架及项目结构项目目录app---apk文件base---核心方法driver.py-......
  • 文心一言APP上线新功能,一张照片、三句话即可生成专属数字分身
    只需一张照片、录制三句话,就能拥有一个自己的数字分身?这不是科幻电影,而是文心一言APP上线的新功能-数字分身。目前,文心一言APP正在内测数字分身新功能,明天起,iOS和Android用户升级新版本后,均可免费使用该功能,极速体验创建和使用数字分身的乐趣。据了解,文心一言APP新功能极大缩短了......
  • @MappedSuperclass用法,主要用于JPA基类(超类)的定义
    @MappedSuperclass 是JavaPersistenceAPI(JPA)中的一个注解,用于指示某个类是一个映射的超类(MappedSuperclass)。映射的超类类似于普通的Java类,但它不会被映射到数据库表,而是作为其他实体类的基类,用于共享字段和方法。当你在JPA中定义一个实体类的时候,可以使用 @Entity ......