当前位置: 首页 > news >正文

定制网站开发一般多少钱三屏营销型网站建设

定制网站开发一般多少钱,三屏营销型网站建设,天津网站建设系统,如何设计一个网页存放自己的作品wmproxy wmproxy是由Rust编写#xff0c;已实现http/https代理#xff0c;socks5代理#xff0c; 反向代理#xff0c;静态文件服务器#xff0c;内网穿透#xff0c;配置热更新等#xff0c; 后续将实现websocket代理等#xff0c;同时会将实现过程分享出来#xff…wmproxy wmproxy是由Rust编写已实现http/https代理socks5代理 反向代理静态文件服务器内网穿透配置热更新等 后续将实现websocket代理等同时会将实现过程分享出来 感兴趣的可以一起造个轮子法 项目 wmproxy gite: https://gitee.com/tickbh/wmproxy github: https://github.com/tickbh/wmproxy HTTP中压缩的意义 HTTP中压缩的意义在于降低了网络传输的数据量从而提高客户端浏览器的访问速度。当然同时也会增加一点服务器的负担。 HTTP/1.1协议中压缩主要包括gzip压缩和deflate压缩两种方法。其中gzip压缩使用的是LZ77和哈夫曼编码而deflate压缩使用的是LZ77和哈夫曼编码以及霍夫曼编码。 此外在2015年由Google公司开发的Brotli算法是也基本全面普及开来Brotli算法的核心原理包括两个部分预定义的字典和无损压缩算法。预定义的字典是Brotli算法中的一项关键技术它包含了一些常见的字符序列例如Web标记、HTML、CSS和JavaScript代码等。Brotli算法的无损压缩算法采用了一种基于模式匹配的压缩方法。它通过预测数据中出现的重复模式对数据进行压缩。 在HTTP的压缩协议中这三种压缩算法基本上可以全部被支持。 gzip,deflate,brotli的优劣势 gzip、deflate和brotli这三种压缩算法都有各自的优势和劣势具体如下 gzip 优势是Web上最常见的压缩算法之一具有较高的压缩效率和广泛的支持程度可以被几乎所有的浏览器和服务器支持。劣势算法的压缩比相对较低可能会增加文件的大小。 deflate 优势具有较高的压缩效率和广泛的支持程度同时算法的实现在不同的浏览器和服务器之间非常一致。劣势由于某些实现上的缺陷可能会导致一些浏览器和服务器无法正常解压缩。 brotli 优势具有更高的压缩效率和更快的压缩速度可以进一步减少传输数据的大小从而提高页面加载速度并且被较新版本的浏览器和服务器支持。劣势由于算法目前仅被较新版本的浏览器和服务器支持因此需要根据实际情况进行选择。 以下是压缩解压的数率图 数据来源src 可以看出brotli的压缩比大概在9左右gzip大概在7左右deflate也大概在7左右压缩比brotli最高适应网络传输慢的情况压缩速度gzip和deflate相对较快解压缩deflate较快brotli和gzip差不多。 rust中三种压缩方式库的选择 通常寻找rust中的第三方库的时候可以通过https://crates.io/进行选择这里公开的第三方库都会在这里显示包括使用次数流行热度最近下载量最近更新时间等可以从多维度的知道该库的好与坏再进行相应的选择。 flate2 该库支持三种压缩格式的算法deflate, zlib, gzip我们选择用它来做deflate, gzip的支持。 brotli 该库如库名一般只支持brotli算法相对热度较高算是支持brolti里最好的一个我们进行选择。 三种方式的压缩实现 三种方式均可实现流式的压缩即边写入数据边读出压缩数据不用完全的写入所有数据完整的实现方法在 RecvStream里将压缩的数据缓存到self.cache_body_data中 定义压缩方法值 pub const COMPRESS_METHOD_NONE: i8 0; pub const COMPRESS_METHOD_GZIP: i8 1; pub const COMPRESS_METHOD_DEFLATE: i8 2; pub const COMPRESS_METHOD_BROTLI: i8 3;gzip 此处利用的是类use flate2::write::GzEncoder定义为GzEncoderBinaryMut其中BinaryMut为压缩后的数据需要具备std::io::Write方法。 Consts::COMPRESS_METHOD_GZIP {// 数据结束需要主动调用结束以导出全部结果if data.len() 0 {self.compress.open_write_gz();let gz self.compress.write_gz.take().unwrap();let value gz.finish().unwrap();if value.remaining() 0 {Self::inner_encode_data(mut self.cache_body_data, value, self.is_chunked)?;}if self.is_chunked {Helper::encode_chunk_data(mut self.cache_body_data, data)} else {Ok(0)}} else {self.compress.open_write_gz();let gz self.compress.write_gz.as_mut().unwrap();gz.write_all(data).unwrap();// 每次写入在尝试读取出数据if gz.get_mut().remaining() 0 {let s Self::inner_encode_data(mut self.cache_body_data, gz.get_mut().chunk(), self.is_chunked);gz.get_mut().clear();s} else {Ok(0)}} }deflate 此处利用的是类use flate2::write::DeflateEncoder定义为DeflateEncoderBinaryMut其中BinaryMut为压缩后的数据需要具备std::io::Write方法。 Consts::COMPRESS_METHOD_DEFLATE {// 数据结束需要主动调用结束以导出全部结果if data.len() 0 {self.compress.open_write_de();let de self.compress.write_de.take().unwrap();let value de.finish().unwrap();if value.remaining() 0 {Self::inner_encode_data(mut self.cache_body_data, value, self.is_chunked)?;}if self.is_chunked {Helper::encode_chunk_data(mut self.cache_body_data, data)} else {Ok(0)}} else {self.compress.open_write_de();let de self.compress.write_de.as_mut().unwrap();de.write_all(data).unwrap();// 每次写入在尝试读取出数据if de.get_mut().remaining() 0 {let s Self::inner_encode_data(mut self.cache_body_data, de.get_mut().chunk(), self.is_chunked);de.get_mut().clear();s} else {Ok(0)}} }brotli 此处利用的是类use brotli::CompressorWriter;定义为CompressorWriterBinaryMut其中BinaryMut为压缩后的数据需要具备std::io::Write方法。 Consts::COMPRESS_METHOD_BROTLI {// 数据结束需要主动调用结束以导出全部结果if data.len() 0 {self.compress.open_write_br();let mut de self.compress.write_br.take().unwrap();de.flush()?;let value de.into_inner();if value.remaining() 0 {Self::inner_encode_data(mut self.cache_body_data, value, self.is_chunked)?;}if self.is_chunked {Helper::encode_chunk_data(mut self.cache_body_data, data)} else {Ok(0)}} else {self.compress.open_write_br();let de self.compress.write_br.as_mut().unwrap();de.write_all(data).unwrap();// 每次写入在尝试读取出数据if de.get_mut().remaining() 0 {let s Self::inner_encode_data(mut self.cache_body_data, de.get_mut().chunk(), self.is_chunked);de.get_mut().clear();s} else {Ok(0)}} }三种方式的解压实现 和压缩不同的是解压的时候必须将完整的数据进行解压所以需要收到全部的数据的时候才尝试进行解压可能我的理解有误欢迎指出当下的实现方式可能会占用大量的内存非我所愿。主要源码在 SendStream中实现。 三种方式均类似以下 // 收到数据进行缓存只有到结束时才进行解压缩 match self.compress_method {Consts::COMPRESS_METHOD_GZIP {self.cache_body_data.put_slice(data);if self.is_end {self.compress.open_reader_gz(self.cache_body_data.clone());let gz self.compress.reader_gz.as_mut().unwrap();let s Self::read_all_data(mut self.cache_buf, mut self.real_read_buf, gz);self.cache_body_data.clear();s} else {Ok(0)}}Consts::COMPRESS_METHOD_DEFLATE {self.cache_body_data.put_slice(data);if self.is_end {self.compress.open_reader_de(self.cache_body_data.clone());let de self.compress.reader_de.as_mut().unwrap();let s Self::read_all_data(mut self.cache_buf, mut self.real_read_buf, de);self.cache_body_data.clear();s} else {Ok(0)}}Consts::COMPRESS_METHOD_BROTLI {self.cache_body_data.put_slice(data);if self.is_end {self.compress.open_reader_br(self.cache_body_data.clone());let br self.compress.reader_br.as_mut().unwrap();let s Self::read_all_data(mut self.cache_buf, mut self.real_read_buf, br);self.cache_body_data.clear();s} else {Ok(0)}}_ {self.real_read_buf.put_slice(data);Ok(data.len())}, }如果数据包非常的巨大的时候可能需要将内存内容写入缓存文件来缓解内存的压力。 结语 压缩为了可以更好的存储也可以更好的传输是我们日常生活中必不可少的存在虽然现在比以前带宽更高存储比之前的更便宜但是现在的数据更多传输延时要求更少所以高压缩的能力依然非常受欢迎。
http://www.pierceye.com/news/858131/

相关文章:

  • 网站文章采集工具新网站怎么做流畅
  • discuz 手机网站模板山东省住房建设厅网站首页
  • 网站建设违约责任条款枣庄专业做网站
  • python做爬虫和做网站做两个一摸一样的网站
  • 网站做微信登录asp.net做网站头部和尾部_都用什么来实现
  • 南充哪里做网站太原关键词优化公司
  • 哪个网站做的ppt模板好投放广告网站
  • 公司网站中新闻中心怎样做优化百度浏览器电脑版
  • 厦门网站建设 九来外国做视频在线观看网站
  • 用.net做购物网站山东建筑公司实力排名
  • 做百度推广网站找谁好宁夏省建筑信息平台
  • phpcmsv9手机网站源码网站开发ide php
  • 学校网站建设成功案例微信公众号网站导航怎么做
  • 重庆汽车网站建设建立大安全大应急框架
  • 重庆模板建站定制网站做企业网站到哪里找
  • asp技术做网站网站建设推广是什么工作室
  • 运营公众号还是做网站室内装修设计软件哪个好用
  • 卖营销软件的网站如何利用站群做网站
  • 网站空间价格怎么算网站制作与发布
  • 做网站的动态图片廊坊做网站哪家好
  • 建设企业网站报价怎么做网站logo
  • 企业类网站谷歌seo招聘
  • asp.net网站安装顺序idc 公司网站模板
  • 新手学做网站优化2022app分类排行
  • 微信微网站制作公司2008年做的网站
  • 网站建设柒首先金手指1男孩做网站
  • 葫芦岛市建设局网站网页制作与网站发布
  • 企业网站首页布局尺寸营销网站建设哪家便宜
  • 专题网站建设策划郑州市做网站的公
  • wordpress網頁版天津百度网站排名优化