定制化网站开发报价,上海网站推广优化公司,技术支持 如皋网站建设,为知笔记 wordpress作为用户的我们在 上网冲浪 的时候总是希望快一点#xff0c;尤其是抢演唱会门票的时候#xff0c;但是现实并非如此#xff0c;有时候我们会遇到页面加载缓慢、响应延迟的情况。
而 HTTP 协议作为互联网世界的基础#xff0c;从网站打开速度到移动应用的响应…作为用户的我们在 上网冲浪 的时候总是希望快一点尤其是抢演唱会门票的时候但是现实并非如此有时候我们会遇到页面加载缓慢、响应延迟的情况。
而 HTTP 协议作为互联网世界的基础从网站打开速度到移动应用的响应时间HTTP 性能的优化直接关系到我们在网络世界的舒适体验程度。
更快的响应时间和速度能够提供更好的用户体验不但如此还可以降低服务器和网络带宽的使用从而节省相关的成本。
那么今天我们就来聊聊 HTTP 性能如何进行优化。 数据压缩 随着互联网的发展网路上传输的数据越来越大随随便便一个文件几个 G 甚至上百 G就算你是百兆、千兆带宽也扛不住。
如何能够在有限的带宽里传输更多的数据常见的解决方式是数据压缩。
如果压缩率能有 50%例如 100K 的数据能够压缩成 50K 的大小那么就相当于在带宽不变的情况下网速提升了一倍加速的效果是非常明显的。
使用常见的压缩算法如 gzip 和 br 对数据进行压缩不但如此我们可以对 HTTP 中传输的各种数据进行针对性地压缩做到【对症下药】。 HTML/CSS/JS
对于这类纯文本格式数据我们在进行压缩时通常会去除其中多余的空格、换行和注释等元素。尽管压缩后的文本可能看起来比较混乱对人类可读性较差但这对计算机并不影响流畅阅读。 JPG/JPEG/PNG
对于这类图片格式数据虽然它本身已经被压缩过了不能被 gzip、br 处理但仍然有优化的空间。
例如可以考虑去除图片中的拍摄时间、地点、机型等元数据适度降低分辨率和缩小尺寸。
此外尽量采用高压缩率的格式有损格式可以选择 JPEG而无损格式则可以考虑使用 webp 格式。 小数据
对于较小的数据HTTP 中有一种被称为 “资源合并”Concatenation的优化方式即将多个小资源合并成一个大资源通过单个请求下载到客户端随后由客户端使用 JavaScript、CSS 等进行拆分使用。
这种方式虽然减少了请求的次数但是处理起来比较麻烦。 需要注意的是在数据压缩的时候应当注意选择适当的压缩率不要追求最高压缩比否则会耗费服务器的计算资源增加响应时间反而会“得不偿失”。 上面讲的都是针对 HTTP 报文里的 body 的压缩方式对于 header 的压缩在 HTTP/1 里是没有的HTTP/2 才有。
不过我们可以采取一些手段来减少 header 的大小不必要的字段就尽量不发例如 User-Agent、Server、X-Powered-By 使用缓存 数据 “千里迢迢” 从服务端到客户端我们可以把这些 “来之不易” 的数据【暂时保存】起来以便在下次请求时直接复用从而避免多次请求带来的高昂成本。
比如说网站上访问量最高的网页、热点新闻尤其是【读多写少】的数据把它们缓存下来能够把巨大的流量挡在外面减轻服务器的压力对性能的改善是非常显著的。 HTTP 传输的每一个环节基本上都会有缓存不过大致可以分成 浏览器端缓存 服务端缓存 中间传输缓存 在浏览器端通过与服务端协商相关的缓存策略将一些资源缓存到本地以便在下次访问时进行复用。
常见的缓存策略包括 HTTP 头中的 Cache-Control、Expires 以及 ETag 等通过这些标识浏览器可以判断是否需要从服务端重新获取资源或者直接使用本地缓存。 在服务端可以借助专门的缓存中间件如 Memcache 或 Redis将计算得到的中间结果和资源存储在内存或硬盘中。 这样Web 服务器在处理请求时会首先检查缓存如果找到相应的数据就能够立即返回给客户端避免了访问后端服务或数据库的时间开销。 而关于中间传输的缓存常见的有 HTTP 代理缓存和 CDNContent Delivery Network内容分发网络。 HTTP 代理缓存通过使用增加了缓存功能的 HTTP 代理服务器例如 Nginx缓存源服务器的数据分发给下游的客户端。 而使用 CDN 把源服务器的内容逐级缓存到网络中的每一个 CDN 节点中这样用户在上网的时候就不直接访问源站而是访问离它最近的一个 CDN 节点其实就是缓存了源服务器内容的代理服务器 使用高性能 web 服务器 除了传输过程中对数据进行压缩和使用缓存我们还可以在服务端下手。
首先我们应该选择高性能的 Web 服务器最常见的应该就是 Nginx 了。
作为一款【高性能轻量级】的 Web 服务器【进程池单线程】的工作模式让 Nginx 消耗较少的 CPU 和内存非常轻量而【I/O 多路复用】又使得 Nginx 的工作效率大大提升。
我们还可以通过 Nginx 实现【动静分离】把动态页面和静态页面交给不同的服务器来解析来加快解析速度提高请求的访问效率降低原来单个服务器的压力。 # Nginx 动静分离配置
server {listen 80 ; location ~* \.(png)$ {root /var/images/png/;}location ~* \.(php)$ {proxy_pass http://php_back_end;}
} 不但如此在配置 Nginx 的时候还应该开启 HTTP 长连接。
这样做可以平均握手成本到多次请求中避免了每个请求都要进行 TCP 连接建立和断开的开销从而提高了性能。连接的复用使得后续的请求不再需要进行完整的三次握手过程减少了连接建立的延迟。 升级 HTTP/2 除了上面的【数据压缩】、【使用缓存】、【使用高性能 web 服务器】HTTP 性能优化还有一个选择那就是【把协议由 HTTP/1 升级到 HTTP/2】
HTTP/2 基于 Google 的 SPDY 协议完全兼容 HTTP/1我们来看看它的一些优点。 头部压缩
报文 Header 一般会携带 “User Agent”、“Cookie”、“Accept”、“Server” 等许多固定的头字段多达几百字节甚至上千字节但 Body 却经常只有几十字节比如 GET 请求
更要命的是成千上万的请求响应报文里有很多字段值都是重复的非常浪费导致大量带宽消耗在了这些冗余度极高的数据上。
为了压缩头部HTTP/2 开发了专门的 “HPACK” 算法在客户端和服务器两端建立“字典”用索引号表示重复的字符串还釆用哈夫曼编码来压缩整数和字符串可以达到 50%~90% 的高压缩率。 二进制格式
相较于 HTTP/1 里纯文本形式的报文HTTP/2 全面采用二进制格式既方便计算机解析而且体积小、速度快使性能大大提高。
除此之外HTTP/2 使用虚拟的流stream传输消息解决了“队头阻塞”问题同时实现了“多路复用”提高连接的利用率 今天这篇文章讲了 HTTP 性能优化的一些方法希望能对你有帮助 文章转载自咸鱼Linux运维 原文链接https://www.cnblogs.com/edisonfish/p/18046199 体验地址引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构