PHP - 《高性能php应用开发》学习笔记

一、基准测试

php网站优化最佳实践:优化前端(压缩js/css/images)--->程序优化(编码最佳实践、opcode缓存、变量/数据缓存)--->数据库、服务器调优-->操作系统调优

1、基准测试实用工具

定义请求/响应生命周期

典型的http请求包含正在尝试访问的主机信息、浏览器信息以及对web服务器有用的其他信息。

1)Apache Benchmark

实例:

D:\Webdev\bin\apache\apache2.2.22\bin>ab -n 10000 -c 50 http://localhost/phpinf

.php

This is ApacheBench, Version 2.3 <$Revision: 655654 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)

Completed 1000 requests

Completed 2000 requests

Completed 3000 requests

Completed 4000 requests

Completed 5000 requests

Completed 6000 requests

Completed 7000 requests

Completed 8000 requests

Completed 9000 requests

Completed 10000 requests

Finished 10000 requests

Server Software:        Apache/2.2.8

Server Hostname:        localhost

Server Port:            80

Document Path:          /phpinfo.php

Document Length:        52477 bytes

Concurrency Level:      50

Time taken for tests:   22.932 seconds

Complete requests:      10000

Failed requests:        2158

(Connect: 0, Receive: 0, Length: 2158, Exceptions: 0)

Write errors:           0

Total transferred:      526424140 bytes    #传输的总数据大小(以字节为单位);

HTML transferred:       524774140 bytes

Requests per second:    436.07 [#/sec] (mean)   #web服务器在模拟流量下每秒可以支持的请求总数;

Time per request:       114.660 [ms] (mean)   #完成一个请求所花费的最长时间(以毫秒为单位)

Time per request:       2.293 [ms] (mean, across all concurrent requests) #完成一个请求所花费的最长时间(以毫秒为单位)

Transfer rate:          22417.81 [Kbytes/sec] received

Connection Times (ms)

min  mean[+/-sd] median   max

Connect:        0    0   1.9      0      16

Processing:    16  114  32.4    109     468

Waiting:        0  109  26.6    109     281

Total:         16  114  32.4    109     468

Percentage of the requests served within a certain time (ms)

50%    109

66%    109

75%    125

80%    125

90%    140

95%    172

98%    203

99%    218

100%    468 (longest request)

①安装

②运行Apache Benchmark

③弄清响应的含义

关键字段:HTML transferred(整个模拟传输的内容正文的总大小)、Request per second(每秒支持的请求总数)、Time per request(满足一个请求需要花费的总时间)

目标:减少HTML transferred、提高Request per second并且降低Time per request

连接指标细目分类:

④ab选项标记

⑤并发测试

 -c的值必须小于等于n的值

⑥时间测试

模拟10个用户在20秒的时间内同时访问网站

7 ab陷阱

ab - n http://localhost/而不是ab -n http://localhost,加上/

设置用户代理:

⑧、修改apache并发数

apache处理并发是通过MPM模块完成的,MPM有三种处理模式(perform、worker、winnt)首先查看MPM的处理模式

然后查看httpd.conf,加载MPM模块

修改httpd-mpm.conf

2)Siege

①安装Siege

②运行Siege

测试指标

几个关键的指标:

Data transerred:响应数据的总大小(不包含头数据)

Transaction rate:每秒要响应的事务总数

Longest transaction:满足一个请求所需的最长时间

Shortest transaction:满足一个请求所需的最短时间   9.85 trans/sec

③测试多个url

在/usr/local/etc/urls.txt

测试

测试结果:

二、提高客户端下载和呈现性能

工具:

1.分析响应(Firebug、YSlow和Page Speed)

2.优化响应(YUI compressor,Closure Compiler和Smush.it),利用这些工具压缩JavaScript、CSS以及网页所需的图像。

三、PHP代码优化

php相关性能说明的列表:

http://talks.php.net/index.php/PHP

(1) require和require_once

代码测试:

require_once_test.php内容:

几个类文件只是定义了一个空类

每秒处理 1077.93个请求,处理时间为9.277ms

测试require:

require_test.php内容:

其他文件还是定义一个空类

测试结果:

可以看出,每秒的请求数从1077个到1612个请求,响应时间从9秒降到6秒。

(2)提前计算循环长度

for1.php:

for2.php:

连续运行这两个文件,发现后者比前者快好多

来自为知笔记(Wiz)

时间: 2024-08-12 09:52:58

PHP - 《高性能php应用开发》学习笔记的相关文章

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Activiti 学习笔记记录(三)

上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl

[原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

java/android 设计模式学习笔记(10)---建造者模式

这篇博客我们来介绍一下建造者模式(Builder Pattern),建造者模式又被称为生成器模式,是创造性模式之一,与工厂方法模式和抽象工厂模式不同,后两者的目的是为了实现多态性,而 Builder 模式的目的则是为了将对象的构建与展示分离.Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程.一个复杂的对象有大量的组成部分,比如汽车它有车轮.方向盘.发动机.以及各种各样的小零件,要将这些部件装配成一辆汽车,这个装配过

[原创]java WEB学习笔记12:一个简单的serlet连接数据库实验

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------