描述服务器在实际运行期间单位时间内处理的请求数。也就是必定并发用户的状况下,服务器处理请求能力的量化体现。php
吞吐率的前提包括:html
微动态内容的计算结果生成缓存,咱们达到必定目的。java
目的减小CPU和内存开销。若是动态内容的性能瓶颈不在CPU和内存,而在于I/O操做,好比数据库查询带来的磁盘I/O开销,那么opcode cache的性能提高也有限。python
如php,ruby,python这些解释型语言,当解释器完成对脚本代码的分析后,便将他们生成能够直接运行的中间代码,也就是操做码Operate Code,opcode。web
对解释型语言,从程序代码到中间代码的过程,咱们称为解释(parse),由解释器完成。数据库
对编译型语言,从程序代码到中间代码的过程,称为编译(如C语言的gcc编译器)。浏览器
编译器和解释器一个根本的不一样是:解释器在生成中间代码之后,便直接执行,因此运行时的控制权在解释器;而编译器则将中间代码进一步优化,生成能够直接运行的目标程序,但不执行。用户能够在随后的任意时间执行它,这时控制权在目标程序,和编译器没有任何关系。缓存
php的核心引擎 Zend Engineruby
查看print 1+1;
的opcode,经过分析,一共有5个操做:服务器
三地址码,是一种中间代码的理想表现形式。每一个运算由不超过三个地址组成:op1,op2,result。
生成opcode
实际上,脚本代码能够看作一系列单词的集合,这些单词包括关键字,标识符,运算符等。
step1: 词法分析,给全部的单词分类,并打上记号(token),print对应的记号是T_PRINT词法规则文件zend_language_scanner.1
setp2: 语法分析,将T_PRINT标记以及上下文替换成了zend_do_print()函数,该函数实现了到opcode的转换,设置了opcode的指令以及op1的数据。
避免重复编译
经过opcode缓存,避免重复的opcode编译。
一些优秀的opcode缓存器扩展,好比php能够选择APC,XCache等。他们均可以将opcode缓存在共享内存中,而咱们几乎不须要修改任何代码。
好比在php中加载java扩展模块,则吞吐率就会降低,带来巨大开销。
为了让脚本执行更快,women那必须了解事件主要消耗在哪些代码上。
Xdebug是一个PHP的PECL扩展,提供了一组用于代码跟踪和调试的API。
代码执行事件、上下文信息收集等。
(没有详细看)
通常来讲,浏览器的缓存都是在本地,内存中或者文件中。
服务器端的动态内容缓存包括缓存内容的建立、存储以及过时检查等一系列过程。
浏览器缓存在浏览器本地,而内存由web服务器生成,任何一方都不能单独完成这一系列过程。因此它们之间必须有一种沟通机制,这就是HTTP中的“缓存协商”。
HTTP协议定义的缓存机制有:
Last-Modified/If-Modified-Since:Last-Modified/If-Modified-Since要配合Cache-Control使用。
Last-Modified:标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。
If-Modified-Since:当资源过时时(使用Cache-Control标识的max-age),发现资源具备Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的cache。
Etag/If-None-Match: Etag/If-None-Match也要配合Cache-Control使用。
Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的惟一标识(生成规则由服务器以为)。Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后获得的。
If-None-Match:当资源过时时(使用Cache-Control标识的max-age),发现资源具备Etage声明,则再次向web服务器请求时带上头If-None-Match (Etag的值)。web服务器收到请求后发现有头If-None-Match 则与被请求资源的相应校验串进行比对,决定返回200或304。
HTTP1.1中Etag的出现主要是为了解决几个Last-Modified比较难解决的问题:
用户行为与缓存
用户操做 | Expires/Cache-Control | Last-Modified/Etag |
---|---|---|
地址栏回车 | 有效 | 有效 |
页面连接跳转 | 有效 | 有效 |
新开窗口 | 有效 | 有效 |
前进/后退 | 有效 | 有效 |
F5刷新 | 无效 | 有效 |
ctrl+F5刷新 | 无效 | 无效 |
解析URL,完成从URL到实际内容或资源的映射。
存储对应关系,在URL映射开始时检查缓存,若是存在并处于有效期内,那么直接取出并做为响应内容返回给浏览器。
准备好缓存区
通常来讲,缓存存储在本机内存、磁盘或者分布式存储到其余服务器的内存或者磁盘。
缓存内容
引入磁盘缓存后,本来指向动态内容的请求能够迅速得到缓存
缓存文件描述符
对于静态内容,特别是拥有大量小文件的站点, Web服务器至关大一部分开销花在打开文件上,即Open()系统调用,因此咱们还能够考虑将打开后的文件描述符直接缓存到Web服务器的内存中,固然,文件描述符是反应系统资源的数据结构,它也只能存在本机内存中。
Apache提供相应的扩展 mod_file_cache,他须要咱们提供但愿缓存的文件列表,好比咱们配置:
CacheFile /data/www/htdocs/test.html
这样一来,Apache在启动的时候便会打开这些文件,并持续到Apache关闭为止,在这期间,若是有对这些文件的请求,Apache将经过文件描述符直接把文件传送出去。
显然,这种缓存文件描述符的缓存方式只适用于静态内容,并对于大文件不使用,由于处理他们的主要时间花在传送数据上,而不是打开文件。
web服务器隐藏在代理服务器以后。实现这种机制的服务器,就称为反向代理服务器。
目的:基于缓存的加速。