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这门课的时候,并没有好好学,那时我认为这门课并没有什 ...
随机推荐
- Truncated incorrect DOUBLE value错误
mysql报错:Truncated incorrect DOUBLE value sql的update语法错误eg: update Person set name = 'auhnayuiL' and ...
- 老李分享:性能测试你不应该只知道loadrunner(1)
老李分享:性能测试你不应该只知道loadrunner(1) poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest测试 ...
- 使用VS2015将解决方案同步更新到Github上
如今开源已经是一种趋势与潮流了,今天就来谈一谈如何将利用VS将我们的解决方案同步更新到Github上. 第一步:登录自己的Github账号(没有的自行注册). 我的Github登录后的界面: 第二步: ...
- Android Studio 安装后首次启动的 Config path ...... is invalid 问题(转)
原文链接:http://m.blog.csdn.net/blog/hnust_xiehonghao/46127775 1. 问题描述: 安装好Android Studio后,启动时弹出如下信息: Co ...
- WinForm中控件位置不随窗体大小的变化而改变
背景:在窗体开发中使控件的位置不随窗体的大小改变而变化的问题?这是一个同事在开发时遇到的问题,在思考试错之后,写出如下代码. 声明成员: Point m_InitLocation; Size m_In ...
- css伪类的组合用法
利用伪类组合,可以用css代替js以达到目的,少些一下js .textarea:empty:before { display: block; content: '请输入'; color: #ababa ...
- pt-online-schema-change的原理解析与应用说明
PERCONA提供了若干管理维护MySQL的小工具,集成在 PERCONA Toolkit工具中,有慢查询分析.主从差异对比.主从差异修复及在线表结构修改等工具,个人觉得挺好用的.本文简单 ...
- 实时Android语音对讲系统架构
本文属于Android局域网内的语音对讲项目系列,<通过UDP广播实现Android局域网Peer Discovering>实现了局域网内的广播及多播通信,本文将重点说明系统架构,音频信号 ...
- 开通阿里云 CDN
CDN,内容分发网络,主要功能是在不同的地点缓存内容,通过负载均衡技术,将用户的请求定向到最合适的缓存服务器上去获取内容,从而加快文件加载速度. 阿里云提供了按量计费的CDN,开启十分方便,于是我在自 ...
- 【代码学习】PHP 正则表达式
一.正则表达式介绍 正则表达式是用于描述字符排列和匹配模式的一种规则,主要用于字符串的匹配.查找.替换.分割等操作 ------------------------------------------ ...