一: 我的环境:

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. cocos2d-X-3.X 场景与层

    1场景与层的相关函数 1. void runWithScene(Scene * scene). 该函数可以运行场景.只能在启动第一个场景时调用该函数.如果已经有一个场景运行,则不能调用该函数. 2.  ...

  2. Linux学习之挂载

    linux的系统组织方式是——整个系统从根开始,按树形目录依次向下逐渐扩大,分类存放不同用途的文件,/读作“斜线”,英文slash:当其写作一个路径时,第一个/表示根,即root,其他的/表示路径分割 ...

  3. Servlet基础知识(三)—— 会话机制Session,Session和Cookie的异同

    Servlet会话机制: Http是一种无状态协议,它是无记忆的.也就是说,服务器不会保存用户的任何信息,当同一用户再次去访问时,服务器是不认识你的,它还是会建立新的连接. 但有时候我们需要服务器保留 ...

  4. Eclipse+EGit的配置注意点, 以及解决Github多个本地仓库之间的冲突

    问题描述 不同本地仓库(e.g. Repo1, Repo2)之间同时修改一个文件时, 出现文件无法merge的情况. 具体表现为, 冲突(红色双向实心箭头)一直存在, 点pull没反应, 点push报 ...

  5. [转载]标签a的href和onclick

    转载自:http://gocom.primeton.com/blog21307_27051.htm 我以前在写<A>的href和onclick一直很随意,后来出过几次问题,以后才开始重视这 ...

  6. 容易被误解的overflow:hidden

    http://www.ofcss.com/2011/03/20/misunderstood-of-overflow-hidden.html(转) 容易被误解的overflow:hidden 15条评论 ...

  7. latex 批量注释

    在LaTex中的注释有3种方法: 1. 右键单击选中要注释的文本,选择 Insert Comment ,WinEdt 就会自动给选定的行添加 % ,完成段落文本的注释: 右键单击选中已经注释的文本,选 ...

  8. windows server system32下常见快捷指令

    win+R       命令行窗口 cmd        dos命令窗口 mstsc      远程登录输入窗口 calc         快速打卡计算器 control     打开控制面板 eve ...

  9. HDU 4416 Good Article Good sentence(后缀自动机)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4416 [题目大意] 给出一个字符串,然后,给出一个字符串集合,问在该字符串中出现,且不在字符串集合 ...

  10. java 学习 ——计算器小程序

    简易计算器小程序代码: package jisuanqi; //声明须要插入的包 import java.awt.*; import java.lang.Object; import java.lan ...