`
jobar
  • 浏览: 347234 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

高性能web网站优化原则4——利用gzip压缩组件

 
阅读更多
从HTTP/1.1开始,web客户端在http请求头Accept-Encoding里支持压缩技术
   Accept-Encoding:gzip, deflate, sdch  
   如果服务器看到这个请求,就可以用客户端给定列表里面的压缩方法压缩响应数据,web服务器使用响应头Content-Encoding来通知客户端Content-Encoding: gzip。Gzip是目前最流行和最有效的压缩方法,由GNU开发然后标准化为RFC 1952。其他压缩方式有deflate等,但主流浏览器大部分都支持gzip,但有的不支持deflate,所以gzip是压缩方法的首选。
   问题来了,我们改压缩哪些组件呢?
   服务器会基于文件类型来选择gzip的压缩对象,大部分的网站压缩html文档,css,js文件,或者xml、json格式的返回结果。图片和pdf格式的文件一般不会压缩,因为它们已经被压缩了。尝试压缩这些文件不仅浪费cpu资源,反而有可能会增加压缩文件的大小。
   gzip是有代价的,在服务器端进行压缩要付出额外的cpu资源,同样的在客户端解压也需要消耗cpu资源。权衡利弊要综合考虑响应的大小,带宽以及客户端和服务器之间的距离等因素。一般来说gzip可以降低响应大小的约70%左右,还是挺可观的。
  
   apache服务器端配置
   可以参考http://jingyan.baidu.com/article/359911f555f77857fe030603.html和http://www.jb51.net/article/38350.htm里面的描述,Apache 2.x 以上的服务器一般使用mod_deflate
  
   代理缓存问题
   当浏览器通过代理向服务器发送请求时,情况稍有复杂。假如第一次浏览器请求的时候不支持gzip,由于是第一次通过代理请求,cache是空的,代理转发请求到服务器,服务器做出无压缩的响应,那么这个无压缩的响应就会被代理缓存起来。那如果浏览器同样的url再次发送请求,代理会返回cache中的无压缩响应。反过来,如果第一次请求是支持压缩的,第二次请求是不支持压缩的,那么代理只返回压缩版本的响应而不管请求是压缩的还是无压缩的。
   解决方法是服务器返回的时候加一个响应头:Vary: Accept-Encoding。服务器告诉代理要基于客户端的请求来改变缓存的响应。这就会导致代理缓存多个版本的响应,像前面的例子,代理会缓存无压缩的响应和压缩的响应,随着客户端Accept-Encoding的不同而给出不同的响应。
  
分享到:
评论

相关推荐

    ASP.NET源码——[上传下载]协诚HTTP在线解压组件.zip

    4. **高效性能**:优化的算法使得组件能够处理大量并发的上传和下载请求,保证在高负载下的稳定性和性能。 5. **易于集成**:作为ASP.NET源码,此组件可以无缝集成到现有的ASP.NET应用程序中,开发者可以根据具体...

    ASP.NET源码——[博客空间]Finesl v1.7.4.50 SP1.zip

    10. **性能优化**:ASP.NET允许开发者通过各种手段优化性能,如使用GZIP压缩、异步编程、减少数据库查询等。Finesl博客系统可能已经过优化,以确保在高并发情况下仍能保持良好的响应速度。 通过分析和学习这个开源...

    Ajax 性能分析

    Ajax(异步JavaScript + XML)技术的出现极大地提升了Web应用程序的交互性和性能,使得用户能够体验到更加...持续关注和优化这些方面,可以确保Ajax应用程序提供卓越的用户体验,同时满足用户对高性能和互动性的期待。

    PyPI 官网下载 | swh.web-0.0.316.tar.gz

    在实际应用中,swh.web-0.0.316可能扮演着连接前端与后端服务的桥梁角色,利用ZooKeeper实现分布式系统的协调和管理,同时适应云原生环境的需求,提供高可用、可扩展的解决方案。开发者可以借助此包快速构建出具备...

    Sencha Tuoch

    1. **基于最新Web标准**:Sencha Touch完全基于HTML5、CSS3和JavaScript构建,这意味着它可以充分利用现代Web浏览器的功能,同时保持轻量级——压缩和gzip后大小约为80KB,且可进一步通过组件禁用减小体积。...

    resin-3.1.8.tar.gz

    Resin是一款高性能、轻量级的Java应用服务器,特别适合于Web应用的部署和管理。在本场景中,我们讨论的是Resin的Linux版本——"resin-3.1.8.tar.gz",这是一个经过打包处理的文件,适用于在Linux操作系统上安装和...

    亿级流量网站架构核心技术 跟开涛学搭建高可用高并发系统

    《亿级流量网站架构核心技术——跟开涛学搭建高可用高并发系统》是一本深入探讨如何构建能够处理大规模用户访问的互联网系统的技术书籍。在现代互联网行业中,面对日益增长的用户需求和流量压力,设计出高可用、高...

    easyUI最新完整项目及资料

    EasyUI 是一个基于 jQuery 的 UI 框架,专门用于构建现代 Web 应用程序的用户界面。...通过这些内容,你可以掌握 EasyUI 的基本用法,了解其组件体系,学习如何优化前端性能,并且能够实现高级特性,提升开发效率。

    Nginx运维宝典

    6. **启用Gzip压缩**:减小传输的数据量,节约带宽资源。 7. **架构优化**:如限制流量,启用sendfile等高性能配置。 8. **系统级优化**:例如提高backlog大小、文件描述符数量限制、端口范围等参数,以更好地适应...

    tomcat容器

    Linux版的Tomcat 7意味着它可以无缝地在Linux操作系统上运行,这通常与服务器环境相匹配,提供稳定和高性能的服务。 Tomcat 8是目前较为流行的一个版本,它进一步提升了性能,并增加了对Java EE 7规范的支持,包括...

    Tomcat安装及配置教程详解.zip

    2. 性能优化:根据负载调整线程池大小,配置JVM内存,启用GZIP压缩,以及优化连接器设置等。 【总结】 Tomcat的安装和配置是一个基础但重要的步骤,对于Java Web开发人员来说至关重要。通过理解这些基本概念和步骤...

    PyPI 官网下载 | django-lab-inventory-0.4.0.tar.gz

    Django,作为Python中最受欢迎的Web开发框架之一,以其MVT(Model-View-Template)架构模式著称,提供了一套高效、安全且易于使用的工具,用于构建高性能的Web应用程序。而django-lab-inventory则专门针对实验室设备...

    jdk-7u80-linux-x64.zip

    压缩包子文件的文件名"jdk-7u80-linux-x64.gz"显示这是一个经过gzip压缩的文件,可能是因为原始的zip文件过大,为了节省存储空间和网络传输时间而进行了压缩。在Linux环境下,可以使用gunzip命令解压gz文件,然后再...

    jre-7u55-linux-x64.gz

    总结来说,这个压缩包提供的JRE是搭建和运行Java应用的基础,同时描述中的其他技术组件——MySQL、Elasticsearch和Redis,是构建高性能、可扩展的服务器端解决方案的关键组成部分。安装这些软件需要对Linux系统有...

    tomcat6(包括32位,64位)

    - 开启GZIP压缩:减少网络传输,提升页面加载速度。 7. 监控与日志: - 使用Tomcat内置的Manager应用监控应用状态。 - 配置logging.properties文件,定制日志输出级别和格式。 8. 负载均衡与集群: - 可通过...

    application-1.0.tar.gz

    总的来说,"application-1.0.tar.gz"可能是一个包含Python Web应用源代码的包,其中"app"是Web框架的应用实例,"conn"用于数据库交互,而"cache"则用于优化性能。要使用这个包,开发者需要将其解压,然后在Python...

    tomcat服务器

    6. **性能优化**:通过调整线程池大小、启用NIO连接器、使用HTTP/2协议、开启GZIP压缩等方式可以提升Tomcat的性能。 7. **集群和负载均衡**:在高并发场景下,可以配置Tomcat集群以实现负载均衡和故障转移,提高...

    PyPI 官网下载 | django-gallery-widget-1.2.0.dev0.tar.gz

    《PyPI官网下载:django-gallery-widget-1.2.0.dev0.tar.gz——Python库的深度解析》 PyPI(Python Package Index),是Python社区最重要的软件仓库,它为全球的Python开发者提供了一个集中发布和获取Python软件包...

    tomcat源码解析

    - **编码**:支持多种编码方式,如GZIP压缩。 - **状态码100的使用**:允许服务器在处理完请求头部后立即响应100继续的状态码。 ##### Connector接口 Connector接口定义了连接器的行为,包括如何接收客户端连接...

Global site tag (gtag.js) - Google Analytics