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这门课的时候,并没有好好学,那时我认为这门课并没有什 ...
随机推荐
- [SinGuLaRiTy] ZKW线段树
[SinGuLaRiTy-1007] Copyrights (c) SinGuLaRiTy 2017. All Rights Reserved. 关于ZKW线段树 Zkw线段树是清华大学张昆玮发明非递 ...
- Python之路-Linux命令基础(5)
作业一:nginx服务 二进制安装nginx包 1.使用网络yum源 2.使用yum安装epel-release扩展源 [root@localhost html]# yum install epel- ...
- kafka使用实例
定义一个procucer package cn.vko.common.kafka; import java.util.Properties; import org.apache.commons.lan ...
- Tensorflow学习笔记---0--TensorBoard
运行mnist_with_summaries学习TensorBoard时,由于需要GPU支持,运行窗口报错:Couldn't open CUDA library cupti64_80.dll 解决办法 ...
- 跟着刚哥梳理java知识点——IO(十五)
凡是与输入.输出相关的类.接口都定义在java.io包下 java.io.File类 1.File是一个类,可以有构造器创建其对象.此对象对应着一个文件或者一个目录. 2.File中的类,仅涉及到如何 ...
- Apache2.4.23+PHP5.6.30+MySQL5.7.18安装教程
最近在工作中常常接触到PHP,自己也写过一些简单的PHP页面.我们知道PHP是在服务器端运行的脚本语言,因此我们需要配置服务器环境.之前为了省事直接使用的是wamp集成环境,但是突然某一天领导要求我们 ...
- 解决failed to push some refs to
由于github我使用了dev和feature分支,团队合作合并到dev,个人开发都是feature....今天在本地feature中git pull origin dev 出现 在使用git 对源代 ...
- NPOI操作类
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...
- 第九章 Criteria查询及注解
第九章 Criteria查询及注解9.1 使用Criteria查询数据 9.1.1 条件查询 Criteria查询步骤: 1)使用session接口的cr ...
- CF #345 Div1 D Zip-line
题目链接:http://codeforces.com/contest/650/problem/D 大意是给一个数组,若干询问,每一次把一个数字改为另一个数字,问当前数组最长上升子序列,询问之间是独立的 ...