1.浏览器端的Cache,浏览器第一次请求某个url的时候,服务器端的Response发送给浏览器ETag及Last-Modified的http header,下次再次请求此url时,Request会带上If-None-Match及If-Modified-Since的http header给服务器端,服务器端对这两个值比较一下,如果相同,则直接返回给浏览器304 Not Modified,这样可以节省带宽。详情请看基于资源的HTTP Cache的实现介绍。
2.为了提高不同地区不同用户的页面响应速度,可以采用付费的CDN或自身架设CDN,同时可以考虑使用智能DNS解析,使用BGP多线接入,解决南北网络互通的问题。
3.为了提高域名的解析速度,公司可以自身架设DNS服务器,例如像百度,Google、新浪、土豆、优酷、阿里巴巴、淘宝、大众点评网等公司都架设了自己的DNS服务器。
4.可以用Squid或Varnish缓存图片、css、js、静态页面及动态页面,并给这些页面设置失效时间,加上Expires及Last-Modified头即可,以免数据失效后Squid从真实的Web Server中去获取最新的数据。
5.在动态页面中,可以使用Memcached、Memcachedb等相关的系统来缓存页面中的一些动态数据,也可以直接用基于文件的Cache缓存一些数据,要比直接连接MySQL查询数据库要快一些,因为从MySQL取得数据需要经过socket连接、解析SQL、从磁盘取数据等一系列操作。
例如Facebook大概有400多台Memcached服务器,超过5TB 的数据在Memcached中,有可能是世界上最大的Memcached集群。
6.如果服务器端语言用的是PHP,则可以用APC、XCache、eAccelerator等来加速PHP的执行,例如Facebook使用的是APC。同时可以使用PHP内置的shared memory function /IPC功能。
7.如果服务器端用的是PHP,则可以用$GLOBALS['xxx']缓存一些数据,例如1.php及2.php同时要包含文件3.php,同时1.php包含2.php,下面的函数cache_get位于3.php中,且1.php及2.php分别调用了函数chche_get,且传递给cache_get的参数均一样,则第二次执行时直接执行函数cache_get中的第一个if分支,因为第一次调用函数cache_get时已经为全局变量赋了值,这就是使用$GLOBALS的用处。
function cache_get($id, $key, $apc=false) {
if (isset($GLOBALS['CACHE']["$key:$id"])) {
$cache = $GLOBALS['CACHE']["$key:$id"]));
$hit = 1;
} elseif ($apc && (($cache = apc_fetch("$key:$id")) !==
false) {
$hit = 1;
} else {
... // fetch from memcached
if ($apc) apc_store("$key:$id", $cache);
}
if ($hit) $GLOBALS['CACHE']["$key:$id"] = $cache;
return $hit ? $cache : NULL;
}
8.如果数据库使用的是MySQL,则可以使用MySQL Query Cache功能,主要的是原理主将sql语句的查询缓存在内存中,对于以查询为主且很少更新的应用,Query Cache 还是很有用的,如果数据更新频率很大,则Query Cache用处不大,因为只要某个表的数据有更新,则与这个表的所有Cache将全部无效,所以得看情况是否使用这个功能。一个被频繁更新的表如果被应用了QC,可能会加重数据库的负担,而不是减轻负担。比较好的做法是默认打开QC,而对一些涉及频繁更新的表的SQL语句加上SQL_NO_CACHE关键词来对其禁用CACHE。这样可以尽可能避免不必要的内存操作,尽可能保持内存的连续性。
详细可以看Query Cache,看上去很美及这儿
或者使用MySQL的HEAP表,也就是将表中的数据保存内存中,系统重启后数据会丢失。
9.如果Web服务器用的是Apache,可以使用mod_cache缓存模块。你可以使用mod_disk_cache和mod_mem_cache来分别提供基于磁盘的缓存和基于内存的缓存,详情请看Apache Module mod_cache。
10.如果Web服务器用的是Lighttpd,则可以使用modcache模块
modcache的工作原理与Squid类似,但是据说mocache比Squid更快更高效,因为mocache是基于强大的Lighttpd,同时支持将缓存数据保存在内存中。
ModCache is a cache accelerator plugin for lighttpd, which works like Squid with similar configuration. However modcache is faster and more effective than Squid because of powerful Lighttpd.
详细参见这儿
11.如果Web服务器用的是Nginx,则可以使用ncache,ncache是由新浪开发的一款基于nginx的缓存系统,比Squid更快更高效,同时支持将缓存数据保存在内存中。
详细参见这儿及这儿。
12.如果服务器使用的是linux,则可以将数据保存在/dev/shm中(例如将Squid的缓存目录及php的session目录设置为/dev/shm下面的某个子目录),也就是tmpfs,详细请看tmpfs的应用。或者用RAMDISK,所谓RAMDISK,实际上是把系统内存划出一部分当作硬盘使用,详细看给你的Linux装备Ramdisk飚一下!,不过采用这两种方式时数据是保存在内存中的,如果想持久保存这些在内存中的数据,可以写个脚本在系统关机或重启的时候转存到硬盘中。
还有34条网站加速方法。