php高性能开发阅读笔记
1.http请求与响应的简单流程
上图简单的描述了一个http请求与响应的过程,首先是用户请求过程,这是该生命周期的第一部分,用户发起请求,经过路由器与ips网关和dns服务器(域名服务器),通过web服务器向应用程序发起请求,其次是服务器响应过程,这是该生命周期的第二部分,一旦请求web服务器之后web服务器便通过获取并且格式化数据来准备响应,然后web服务器将数据打包成多个数据包并以相反的顺序沿着用户请求相同的路径发送给用户,如果数据量足够大,那么就将数据打包成多个包并发送。
2.ab压力测试工具
apache benchmark(ab)工具是最著名的压力测试工具,它是apache中默认安装的一部分(在windows web环境中也可以使用),它可以通过模拟对特定的url的任意请求数量来对web服务器进行附载测试,ab工具能够提供如下信息:
(1)传输的总数据大小 -以字节为单位
(2)web服务器在模拟流量下每秒可以支持的请求总数
(3)完成一个请求所花费的最长时间-.毫秒为单位
(4)完成一个请求所花费的最短时间-以毫秒为单位
具体操作请查看相应资料 http://www.cnblogs.com/mydomain/p/3166191.html
除ab压力测试工具外还有一些压力测试工具 例如:siege,webbench 在这里就不多说了
3.提高客户端下载和呈现能力
前端是php应用程序的第一层,具体如图2-1
这里将从web浏览器的角度分析web服务器的响应,具体来说有多种工具能帮助我们分析网站的响应(firebug yslow 和page speed),它们能提供以下信息
(1)web服务器发送的响应细节时间
(2)分析javascript中前端逻辑
(3)浏览器将读取的资源的逐项列表
(4)浏览器获取和接收资源所花费的时间
(5)对如何优化响应的建议
第二个工具集(YUI Compreesor ,Closure Compiler和Smush.it)将帮助我们优化响应,简言之,我们可以借助这些工具来压缩javascript,css和网页所需的图像。对于网页的优化对于用户浏览十分重要,例如某个用户加载3M的网页,响应中含有30个未缓存的大图片,臃肿的css和无数的javascript文件,而这些东西网页根本就不需要,不管你在php方面做了多少优化,用户依然要完成3M的响应才可以看到这个页面,如果标准的dsl调制解调器(1m/s),那么下载一个3m的需要一分钟,一项调查表明,用户等待页面加载的平均时间最多为4s,所以,在一分钟的情况下,56秒是难以忍受的,这可能会让你失去这个用户。
具体的firebug,yslow,page speed的使用请查看相关资料。
4.php代码优化
php已经目前已经完成了许多性能调整增强,因此旧版本也将得益于这些代码实践
(1)使用require与require_once的对比,经对比,require性能高于require_once
(2)提前计算for循环的长度
(3)比较for,foreach,while 访问数组元素时的性能 foreach高于while高于for
(4)文件访问问题,php有四种从文件中读取数据的方法,fread(),file_get_contents(),file()和readfile。其中fread(),file_get_contents(),readfile()是以字符串形式输出,只有file_get_contents()将文件缓存到内存中,以便更快的进行读写操作,这种方式叫做内存映射。file_get_contents()在读取系统小文件时,性能得到很大提升。说明,读取小文件(3.6k)的时候fread()高于file_get_contents(),读取大文件的时候(2.3M)时file_get_contents()高于fread()。详情见下表
5.opcode缓存
现在为了加快php的运行速度,我们要做的是当php被请求时删除所有不必要的进程,我们可以通过删除php生命周期无需常规执行的进程来优化程序,从而使用户的请求可以被更快的响应。添加opcode缓存能有效的删除php生命周期中无需常规执行的进程从而来进行优化程序。下图说明php生命周期
这是一个完整的php生命周期,php的生命周期非常短暂,但是每次请求php脚本时,php必须执行这五个步骤,如图所示。zend引擎必须从文件系统中读取相应文件,扫描其表达式和词典,解析文件,创建成计算机所能够执行的编码(opcode),最后执行opcode。对于脚本的初次请求这个时必要的,但后续无需此操作,如果实现opcode缓存,我们就可以缩短三个步骤来缩短php的生命周期,从而提高应用程序的性能。如下图
现在只说说三种有效的opcode缓存技术,alternative php cache(APC),Xcache,eAccelerator(eA),其中一些缓存技术不仅仅是opcode。
具体使用请查看相关资料
php高性能开发阅读笔记的更多相关文章
- java web开发阅读笔记:第一章
学习该书前所用推荐书籍<名师讲坛—java开发实战经典> 一web开发前奏 1.1网页发展 首先搞懂. 1.HTTP:超级文本传输协议,是一种通讯协议. 通过这个网络协议WW浏览器与WWW ...
- 高性能Cordova App开发学习笔记
高性能Cordova App开发学习笔记 文件结构 添加插件 构建准备 各个www的作用,prepare命令会将hello\www的内容会拷贝到platform下的wwww目录,知道该改哪里了吧?如果 ...
- QCon 2015 阅读笔记 - 移动开发最佳实践
所有ppt下载地址:http://pan.baidu.com/s/1mg9o4TM 下面是移动开发实践部分的阅读笔记. 移动开发网络性能优化实践 - 陈浩然 (携程) 携程是非常标准的移动App架构, ...
- 《Windows内核安全与驱动开发》阅读笔记 -- 索引目录
<Windows内核安全与驱动开发>阅读笔记 -- 索引目录 一.内核上机指导 二.内核编程环境及其特殊性 2.1 内核编程的环境 2.2 数据类型 2.3 重要的数据结构 2.4 函数调 ...
- 程序开发心理学阅读笔记——第I篇
1.软件的任务是为了解决某一特定的问题,而软件开发者的任务却需要解决一系列问题.2.温伯格说,我们不能要求每个人都聪明异常,能够解决所有难题:但是我们必须持续思考,因为只有如此,我们才能明白自己在做什 ...
- 【前端】移动端Web开发学习笔记【2】 & flex布局
上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...
- 阅读笔记 1 火球 UML大战需求分析
伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本 <火球 UML大战需求分析>,首先 ...
- 《uml大战需求分析》阅读笔记05
<uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...
- uml大战需求分析阅读笔记01
<<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...
随机推荐
- Java中类的继承,属性和方法的四种修饰符的作用范围,final关键字,java的三大特点中的2个:封装和多态,以及多态的一个设计模式,模板方法模式(template method)
(一)Java中的继承: 关于继承,在Java中类的继承只能是单继承,不像C+++那样灵活,可以多继承,多继承的后果就是各种关系乱套,就相当于一个孩子有2个母亲一样,社会关系的复杂,不利于程序后期的开 ...
- poptest老李谈分布式与集群 1
poptest老李谈分布式与集群 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90882 ...
- 10 分钟学会Linux常用 bash命令
目录 基本操作 1.1. 文件操作 1.2. 文本操作 1.3. 目录操作 1.4. SSH, 系统信息 & 网络操作 基本 Shell 编程 2.1. 变量 2.2. 字符串替换 2.3. ...
- BootstrapBootbox居中
/* 模态框居中样式 */ .bootbox-container { position: fixed; ; ; ; ; ; overflow-y: auto; } .bootbox-container ...
- This Handler class should be static or leaks might occur(null) 解决办法 (转)
原文链接:http://blog.csdn.net/wuleihenbang/article/details/17126371 首先解释下这句话This Handler class should be ...
- "!function",自执行函数表达式
如题为自执行函数表达式.在这种情况下,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function声明.下面2个括弧()都会立即执行 (function ...
- Linux命令的复习总结学习
1.-------------------------linux系统介绍------------------------------------------------------- Linux是一套 ...
- Activity的Task详解
1.Task Task是一个具有栈结构(后进先出)的容器,可以放置多个Activity实例.启动一个应用,系统就会为之创建一个Task,来放置根Activity.默认情况下,一个Activity启动另 ...
- Java解决TopK问题(使用集合和直接实现)
在处理大量数据的时候,有时候往往需要找出Top前几的数据,这时候如果直接对数据进行排序,在处理海量数据的时候往往就是不可行的了,而且在排序最好的时间复杂度为nlogn,当n远大于需要获取到的数据的时候 ...
- hadoop、Storm该选哪一个
如果hadoop.Storm还感觉混要,那么此篇文章将帮助你把他们完全区分 可以带着下面问题来阅读本文章: 1.hadoop.Storm各是什么运算 2.Storm为什么被称之为流式计算系统 3.ha ...