公司的一个web项目访问量越来越高,在服务器上看到http请求数挺多,但是实际的IP还不太高。请问都有哪些方式减少http的请求数?

2010-11-14 00:41:26

6 Answers

减少请求数:
把静态资源单独放一台静态服务器或CDN,另外也可以做下CSS / JS /IMAGES 合并
可以在firefox下用Yslow插件分析一下。

如果负载高:
1.可以统计一下每个动态程序的执行时间,时间长的程序优化下
2.页面上可能有太多动态操作功能,有些可以考虑做成异步
3.增加前端WEB SERVER,负载均衡分担请求
4.具体看 【讨论】用PHP开发大访问量、高负载网站要注意哪些技术事项?

2010-11-14 02:37:12

图片,css,script,flash,等等这些都会增加http请求数,减少这些元素的数量能减少响应时间。
CSS Sprites技术能减少图片的请求数,把零散的小图片放到一起,运用background-position来改变背景图片的位置,前提是html元素事先定义好宽高,其实就像一个遮罩,移动背景就会看到不同的景象。
内嵌图像
用data:URL scheme的方式把图片内容代码直接嵌入html代码中,这样会增大html代码的体积,改进的方式是把内嵌图片嵌入到css中(css被缓存),这样就会更好的减少http请求数而且不增大html的体积。

另外,还有一些方法:

  1. 合并css,合并js
  2. 将css,js文件合并到一块
  3. 利用image map标签

下面文章里有讲一些方法:
How To Reduce The Number Of HTTP RequestsPublished
把JS和CSS合并到1个文件
高性能WEB开发 - 为什么要减少请求数,如何减少请求数!

2010-11-14 04:20:09

我再补充下:
1 页面非第一屏的数据,图片,等 延时加载,或事件触发加载,局部XHR请求加载。。。
2 防止盗链,从seo方面来讲盗链也是有好处的,但是这样会增加自己网站服务器负担

3我一般不刻意的去合并js,或 css. 因为我一直也这么一个 疑惑,正好也在此问下大家:

如:加载一个50KB的js,和加载一个 30KB,一个 20KB 的js, 前者一定比后者用得时间少么?请求是减少了,但是服务器响应的数据就大了,服务器负担大了还是小了?再加上并发呢?

是不是合并js,图片,css,需要视自己服务器的情况而定?还有..... 行!~ 我等会也提个问题吧!

2010-11-14 06:11:51

 要减少http请求数,应该从动静态分离、合并JS文件跟CSS文件、合并框架图片以及相对变动较少的图片成一张,通过CSS背景切割来完成渲染,比如:加速图片显示、合理使用本地Cache来缓存JS/CSS/IMAGE等方面入手,另外我补充几点:
1.压缩JS体积:删除JS中空白换行,注释,混淆把长变量换成短变量;

2.压缩CSS体积:删除CSS注释、写法尽量用简写;
补充说明:压缩、合并JS和CSS都由程序处理。而不是自己手动去缩删,不然不利于后期维护。

3.减少http请求头,图片js/css等静态资源放在静态服务器或CDN服时,尽量采用不用的域名,这样能防止cookie不会互相污染,减少每次请求的往返数据。

2010-11-14 07:04:01

1.最简单的办法是使用长连接(Socket)或设置HTTP的Keep-Alive字段。特别对于图片密集型的应用,一定要做持久连接。频繁建立连接,很耗资源的。
2.另外有可能是hacker在进行HTTP Flood攻击,防御方法见@对于DDOS攻击,有哪些好的预防措施?

2010-11-14 08:47:25

1、合并css,合并js
2、某些特别关键css和js可以写为内联式。避免加载不全又减少了请求
3、利用image map标签定义一个客户端图像映射,(图像映射指带有可点击区域的一幅图像)具体看:http://club.topsage.com/thread-2527479-1-1.html
4、还有楼上说的设置HTTP的Keep-Alive字段,对于频繁连接是比较有效的,不过你要确定频率比较高就是了。
5、此外,可以用工具firebug之类的,测一下你的http请求到底是哪些看有没有可以合并或优化的地方。

2010-11-14 10:58:08
您不能回答该问题或者回答已经关闭!

相关文章推荐

  • C#中using指令的几种用法

    using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到

  • C#实例解析适配器设计模式

    将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作

  • 使用托管C++粘合C#和C++代码(二)

    本文实现一下C++代码调用C#代码的过程。我构造一个简单并且直观的例子:通过C++ UI 触发C# UI.

  • C#开发高性能Log Help类设计开发

    项目中要在操作数据库的异常处理中加入写Log日志,对于商业上有要求,写log时对其它操作尽可能影响小,不能因为加入log导致耗时太多

  • Async和Await使异步编程更简单

    C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作

  • C#开发中的反射机制

    反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等

  • C#运行时相互关系

    C#运行时相互关系,包括运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别等等

  • C#协变和逆变

    “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型,“逆变”则是指能够使用派生程度更小的类型

  • C#基础概念之延迟加载

    延迟加载(lazy load)是Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作

  • 使用托管C++粘合C#和C++代码(一)

    C#在xml读写,数据库操纵,界面构造等很多方面性能卓越;C++的效率高,是底层开发的必备武器

  • C#中的索引器的简单理解和用法

    C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作

  • 深入C# 序列化(Serialize)、反序列化(Deserialize)

    C#中的序列化和反序列化,序列化是.NET运行时环境用来支持用户定义类型的流化的机制