一: 我的环境:

Debian 7 (wheezy)  x64

PHP 5.4.4-14 (apt-get 而来)

Apache/2.2.22 (同上,非源码编译)

二 :安装vld. (# 代表是root下,下面不再说明. wget过来的是0.11.2的版本)

首先我用pecl install channel://pecl.php.net/vld-0.10.1 安装了一次,最后make install的时候失败了。于是换一种

#wget http://pecl.php.net/get/vld

#tar zxvf vld

#cd vld-0.11.2

#phpize

#./configure

#make install

现在去查看下/usr/lib/php5/20100525 下是否有vld.so

三:加到php里面去

#cd /etc/php5/mods-available               到php的模块目录去

#touch vld.ini                                              建个叫vld.ini 的配置文件

#echo -ne "; configuration for php VLD module \n; priority=20 \nextension=/usr/lib/php5/20100525/vld.so \n" > vld.ini       这里我比较懒。直接一句就把内容写完了,里面的vld.so是之前编译完后的vld.so 文件

#cd /etc/php5/conf.d

#ln -s  ../mods-available/vld.ini 20-vld.ini            给vld.ini 做一个软链接

#/etc/init.d/apache2 restart              重启下apache就行了

四:使用vld

例子很简单的。新建两个php文件,输出一个用 . ,一个用 , 连起来

1.php

<?php echo "Hello"." "."world!" ?>

2.php

<?php echo "Hello"," ","world!" ?>

在shell里面执行

#php -dvld.active=1 1.php

#php -dvld.active=1 2.php

然后可以看到

root@debian:/home/www$ php -dvld.active=1 1.php
Finding entry points
Branch analysis from position: 0
Return found
filename: /home/www/1.php
function name: (null)
number of ops: 4
compiled vars: none
line # * op fetch ext return operands
---------------------------------------------------------------------------------
1 0 > CONCAT ~0 'Hello', '+'
1 CONCAT ~1 ~0, 'world%21'
2 ECHO ~1
2 3 > RETURN 1 branch: # 0; line: 1- 2; sop: 0; eop: 3
path #1: 0, 
root@debian:/home/www$ php -dvld.active=1 2.php
Finding entry points
Branch analysis from position: 0
Return found
filename: /home/www/2.php
function name: (null)
number of ops: 4
compiled vars: none
line # * op fetch ext return operands
---------------------------------------------------------------------------------
1 0 > ECHO 'Hello'
1 ECHO '+'
2 ECHO 'world%21'
2 3 > RETURN 1 branch: # 0; line: 1- 2; sop: 0; eop: 3
path #1: 0,
Hello world!root@debian:/home/www$

上面就包含了PHP运行时所执行的Opcode信息,输出了执行的操作的个数,所有的变量集输出(compiled vars),还有一个包含执行操作的PHP代码行号,执行操作的次数(#)以及所执行操作的名称(op)。

我们重点关注关键项的数量,op的个数以及执行顺序。number of ops (OP数)标明了代码运行时在Opcode层级执行的操作总个数。在上面两个文件都是4次。

可以看到 1.php 执行用  "."  连接的时候,用了两个CONCAT(连接调用)和一个ECHO调用。

2.php 执行用 "," 连接的时候,没有用CONCAT操作,只有比CONCAT调用成本更低的ECHO调用。

所以这里我们可以得出一个简单的结论,就是用 "," 连接比用  "." 连接要快。

实际在编写PHP代码的时候,我们需要考虑是empty快还是isset好,是,快还是 .好,我们可以通过VLD来看看OP数是多少,具体都执行了什么操作,这样就可以得到正确的合适的选择了。

debian安装vld来查看Opcode,PHP调优。的更多相关文章

  1. Linux下安装、配置、授权、调优Mysql

    以前在linux已经安装了很多次的Mysql,但是时间间隔长了以后,安装步骤总是会遗漏,趁这次安装,做一下安装记录. 检查系统是否已经安装Mysql rpm -qa|grep -i mysql Mys ...

  2. (转)centos 7 Tomcat 8.5 的安装及生产环境的搭建调优

    原文:https://www.cnblogs.com/linhankbl/articles/9149804.html#top JVM菜鸟进阶高手之路七(tomcat调优以及tomcat7.8性能对比) ...

  3. nginx安装以及调优

    目录: 1.安装nginx 2.配置nginx 3.调优nginx 4.性能测试 ps:为了方便,文档使用docker容器来操作的. 1.安装nginx 1.1 启动容器.download nginx ...

  4. Nginx 源码安装和调优

    常见web架构: LAMP  =Linux+Apache+Mysql+PHP LNMP  =Linux+Nginx+Mysql+PHP   nginx概述: 知道:1  不知道:2 Nginx (&q ...

  5. mysql日常运维与参数调优

    日常运维 DBA运维工作 日常 导数据,数据修改,表结构变更 加权限,问题处理 其它 数据库选型部署,设计,监控,备份,优化等 日常运维工作: 导数据及注意事项 数据修改及注意事项 表结构变更及注意事 ...

  6. JVM调优基础到进阶

    GC和GC Tuning GC的基础知识 1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? 自动内存回收,编程上 ...

  7. Nginx源码安装及调优配置

    导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前的优 ...

  8. Nginx源码安装及调优配置(转)

      导读 由于Nginx本身的一些优点,轻量,开源,易用,越来越多的公司使用nginx作为自己公司的web应用服务器,本文详细介绍nginx源码安装的同时并对nginx进行优化配置. Nginx编译前 ...

  9. 开源服务专题之------sshd服务安装管理及配置文件理解和安全调优

    本专题我将讨论一下开源服务,随着开源社区的日趋丰富,开源软件.开源服务,已经成为人类的一种公共资源,发展势头可谓一日千里,所以不可不知.SSHD服务,在我们的linux服务器上经常用到,很重要,涉及到 ...

随机推荐

  1. Ubuntu的快捷键

    正如大家都知道的那样,Ubuntu的终端的Terminal能快捷的操作该linux系统,减少鼠标的使用.(vim党,尽量避免使用鼠标) 在Ubuntu中,终端的快捷键为(大小写无关的): Ctrl + ...

  2. PHP图片裁剪函数(图像不变形)

    PHP图片裁剪函数(图像不变形) <? *exif_imagetype -- 判断一个图像的类型 *说明:函数功能是把一个图像裁剪为任意大小的图像,图像不变形 * 参数说明:输入 需要处理图片的 ...

  3. 使用PHP把下划线分隔命名的字符串 转换成驼峰式命名方式 , 把下划线后面的第一个字母变成大写

    最近项目使用symfony框架,这个框架对数据库的操作在这个团队里使用的是ORM进行操作,说实话使用ORM的开发效率和运行效率不一定高多少,到是它的实体命名和现有数据库字段的命名不太一样,ORM实体属 ...

  4. win7本地搭建git ssh服务器

    本来是想在gogs上用ssh的,结果弄了好几次还没整明白,希望等他们的更新内置吧. 但是,意外收获,还是成功搭建了本地ssh服务器,只是没有和gogs成功关联. 简要记录一下: 主要软件: msysg ...

  5. Naive Bayes Theorem and Application - Theorem

    Naive Bayes Theorm And Application - Theorem Naive Bayes model: 1. Naive Bayes model 2. model: discr ...

  6. python网络编程-01

    python网络编程 1.socket模块介绍 ①在网络编程中的一个基本组件就是套接字(socket),socket是两个程序之间的“信息通道”. ②套接字包括两个部分:服务器套接字.客户机套接字 ③ ...

  7. Linux同平台Oracle数据库整体物理迁移

    Linux同平台数据库整体物理迁移需求:A机器不再使用,要将A机器的Oracle迁移到B机器.之前写过类似需求的文章: http://www.linuxidc.com/Linux/2015-05/11 ...

  8. Intellij IDEA + Android SDK + Genymotion Emulator打造最佳Android开发

    原文:Intellij IDEA + Android SDK + Genymotion Emulator打造最佳Android开发 Intellij IDEA + Android SDK + Geny ...

  9. Asp.net MVC中关于@Html标签的使用

    @Html帮助器简单说明,记录些基本的跟HTML中对应的@html帮助器,@Html基本包含了html中的表单控件和常用Html 在@Html中,带有For的主要是针对强类型的Html类型. 用于说明 ...

  10. findbugs的ant脚本实践

    <?xml version="1.0" encoding="UTF-8"?> <project name="codeCheck&qu ...