文档章节

学习PHP精粹,编写高效PHP代码之性能

风格时光
 风格时光
发布于 2014/06/07 20:36
字数 1045
阅读 46
收藏 0
点赞 0
评论 0

一、采用基准测试,检测代码的性能

基准测试涉及Web应用程序时,通常指“压力测试”,即在你的代码中尽可能多地加载流量,然后衡量它的执行能力。

推荐两种基准测试的工具:ApacheBench(ab)和JMeter。

要进行压力测试,我们需要两个东西:同时在线的用户和大量的请求。使用这些工具后,很多同时运行的应用程序线程便代表了用户。因此我们只需记住:并发线程=并发用户。

1、ApacheBench超级简单,通常包含了Apache安装,或是作为Apache开发包的一部分——一个被称为简单ab的二进制文件。要使用ab,只需指定请求的总数(-n),以及并发线程的数量(-c),然后让它开始工作。

例如:我们在这里使用-n 1000 -c 20生成20个并发线程执行1000个请求。

$ ab -n 1000 -c 20 http://example.org/

ab使用参考:http://httpd.apache.org/docs/2.0/programs/ab.html

2、JMeter是另一个具备GUI的Apache项目,而且具备更多功能。若要使用JMeter,你需要创建一个测试计划,添加线程组、添加采样器、指定JMeter的配置、添加Cookie处理器这样的其他选项、增加监听器处理结果。

JMeter网站:http://jmeter.apache.org/

二、利用缓存提高代码性能

1、对于Apache服务器,利用apc实现代码缓存。

从PECL(PHP Extension Community Library,PHP扩展共享类库)中获取APC进行编译,然后安装该扩展。

$ pecl install apc

在这之后,根据设置,需要编辑php.ini文件并添加它:

extension = apc.so

重新启动Apache,然后就可以了。

apc使用参考:http://www.php.net/manual/en/book.apc.php

2、对于Windows/IIS服务器,利用微软的WinCache实现代码缓存。

WinCache网站:http://www.iis.net/downloads/microsoft/wincache-extension

3、利用memcached实现会话数据缓存,memcached是基于内存的、群集友好的键/值对存储。如果你启用memcached扩展,就可以自动使用memcached代替磁盘存储回话。

memcached网站:http://memcached.org/

memcached使用参考:http://www.php.net/manual/zh/book.memcached.php

安装memcached:

$ pecl install memcache # Install ext/memcache
$ memcached -d -m 128 # Start memcached

 

设置php.ini:

session.save_handler = 'memcache'session.save_path = 'tcp://localhost:11211'

 

三、进行程序概要分析,寻找问题在哪里?

程序概要分析(profiling)是采用精确的时间或内存检测代码运行每个动作的行为。通过分析,找到问题的位置,然后进行优化。

我们有两个常用的profiling工具:

1、由Derick Rethans编写的可靠的Xdebug工具,并由KCachegrind或QCachegrind审核结果。

Xdebug网站:http://xdebug.org/

KCachegrind网站:http://sourceforge.jp/projects/freshmeat_kcachegrind/releases/

QCachegrind网站:http://sourceforge.jp/projects/freshmeat_kcachegrind/releases/

2、新开发的XHProf工具,是来自Facebook的一个应用,由Paul Reinheimer编写XHGui Web前段部分。

XHProf网站:http://pecl.php.net/package/xhprof

XHGui网站:https://github.com/perftools/xhgui

 

总结:

首先我们要解决性能下降这个最大的难题,这样便可获得整体性能的更好提升。如果一个SQL查询花费10秒,而你将它的执行速度提高了50%,这样你 为自己节省了5秒;然而,如果执行一个PHP函数花费5秒,你同样将它的执行速度提高了50%,你实际上却只节省了半秒钟。在某些时候,你将受到硬件性能 的绝对限制,以我们的经验你更有可能受到磁盘或网络I/O的限制,而不是CPU或RAM的限制。这时你需要开始在多台计算机上缩放应用程序。


© 著作权归作者所有

共有 人打赏支持
风格时光
粉丝 0
博文 4
码字总数 4542
作品 0
淮南
程序员
计算机书籍目录

计算机系统与网络 《图灵的秘密》 《计算机系统概论》 《深入理解Linux内核》 《深入Linux内核架构》 《TCP/IP详解 卷1:协议》 《Linux系统编程(第2版)》 《Linux内核设计与实现(第3版)...

Reborn-D
2016/11/01
24
0
浅谈皇冠体育源码搭建接水修复 PHP代码优化最佳实践

编写好的PHP代码是创建快速稳定Web应用的关键一步。从一开始就遵循一些最佳实践技巧将节省后期填坑的时间。 尽可能的使用PHP的内置方法 [皇冠体育源码搭建bbs.yasewl.com请添加链接描述只要可...

超小码农
06/12
0
0
经典编程书籍大全

经典编程书籍大全 100+ 经典技术书籍,涵盖:计算机系统与网络、系统架构、算法与数据结构、前端开发、后端开发、移动开发、数据库、测试、项目与团队、程序员职业修炼、求职面试 和 编程相关...

Oscarfff
2016/10/30
41
0
10 件在 PHP 7 中不要做的事情

1. 不要使用函数 这一天终于来了,从此你不仅仅“不应该”使用函数。PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移到好得多的函数,或者更灵活的 PDO 实现。 2. 不要编写垃圾代码...

两味真火
2016/09/18
12.1K
52
学习PHP精粹,编写高效PHP代码之质量保证

一、使用静态分析工具测量质量 我们用静态分析测量代码而不运行它。实际上,我们将这些工具用于评估代码、读取文件、衡量它所写的要素。使用这些工具,可以帮助我们对代码库有一个完整的层次...

风格时光
2014/06/08
0
0
PHP机器学习/神经网络框架:PHP-ML库

PHP机器学习/神经网络框架:PHP-ML库 Love冥天个人博客-关注IT|PHP|互联网|php个人博客交流2017-10-1039 阅读 PHP框架神经网络 php-ml是一个使用PHP编写的机器学习库。虽然我们知道,python或...

Love冥天个人博客-关注IT|PHP|互联网|php个人博客交流
2017/10/10
0
0
程序员经典书籍清单

从网上看到的,还不错。 来源: https://github.com/jobbole/awesome-programming-books 计算机系统与网络 《图灵的秘密:他的生平、思想及论文解读》 《计算机系统概论》 《深入理解Linux内核...

wangtaotao
2016/12/27
0
0
2014 年 15 款新评定的最佳 PHP 框架

通常,框架都会被认为是帮助开发者快速设计和开发动态网站的软件应用。每个月都有极大数量的新发布的 PHP 框架,使网站开发更简单更高效。 如果你是位 PHP 开发者,正在寻找当前最好的一些 ...

oschina
2014/02/19
11K
79
如果有人让你推荐编程技术书,请叫他看这个列表

这个列表包括了 100 多本经典技术书籍,涵盖:计算机系统与网络、系统架构、算法与数据结构、前端开发、后端开发、移动开发、数据库、测试、项目与团队、程序员职业修炼、求职面试 和 编程相...

jason_wu_2
2016/12/23
22
0
归纳整理 PHP大神的十大优良习惯

  【IT168 资讯】   1、多阅读手册和源代码   没什么比阅读手册更值得强调的事了�C仅仅通过阅读手册你就可以学习到很多东西,特别是很多有关于字符串和数组的函数。就在这些函数里面包...

程序师
2015/03/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringBoot | 第七章:过滤器、监听器、拦截器

前言 在实际开发过程中,经常会碰见一些比如系统启动初始化信息、统计在线人数、在线用户数、过滤敏高词汇、访问权限控制(URL级别)等业务需求。这些对于业务来说一般上是无关的,业务方是无需...

oKong
14分钟前
2
0
存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储

存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储 存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储。 顺序结构和链接结构适用在内存结构中。 顺序表每个单元都是按物理...

DannyCoder
25分钟前
0
0
Firefox 61已经为Ubuntu 提供支持

最新和最好的Mozilla Firefox 61 “Quantum”网络浏览器已经为Ubuntu Linux操作系统的用户提供了支持,现在可以通过官方软件库进行更新。 Mozilla于2018年6月26日发布了Firefox 61版本,该版...

六库科技
51分钟前
0
0
Win10升级后执行系统封装(Sysprep)报错

开始封装 一年多以前开始给公司封装Win10系统,便于统一给公司电脑初始化携带各种软件的系统,致力于装完既可以开发的状态。那时候最新的版本是Win10 1703版本,自然就以他为母盘,然后结合V...

lyunweb
今天
39
0
php 性能优化

#什么情况下会遇到性能问题 PHP 语法使用的不恰当

to_be_better
今天
0
0
Jenkins 构建触发器操作详解

前言 跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。 一、定时构建语法 * * * * * (五颗星,中间用空格隔...

覃光林
今天
0
0
IDEA配置技巧

超详细设置Idea类注释模板和方法注释模板 idea去掉注解param下划线 JetBrains全系列破解

AK灬
今天
0
0
rsync通过服务同步/Linux系统日志/screen工具

rsync通过服务同步 分为服务端(机器A) 和客户端(机器B) 机器A操作编辑/etc/rsyncd.conf配置文件 [root@yolks1 ~]# vim /etc/rsyncd.conf 文件中添加以下配置 port=873 ...

Hi_Yolks
今天
0
0
分发系统介绍expect脚本远程登录expect脚本远程执行命令 expect脚本传递参数

分发系统介绍 分发系统-expect讲解(也就是一个分发的脚本) 场景: 业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者lnmp,最好还需要吧代码上传到服务器上;但是因为业...

lyy549745
今天
0
0
android studio 中设置创建类时的说明信息(包含 作者 ,创建时间,注释说明等)

今天简单来说一下android studio开发工具中的 一个小设置功能; 在开发过程中我们习惯给新建的类添加一些注释信息,创建日期、时间和作者等。 设置信息 File—>Settings—>Editor—>File and...

切切歆语
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部