服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - PHP教程 - PHP中opcode缓存简单用法分析

PHP中opcode缓存简单用法分析

2019-10-15 11:12统一B界 PHP教程

这篇文章主要介绍了PHP中opcode缓存简单用法,结合实例形式分析了opcode的概念、原理、简单开启与使用方法,需要的朋友可以参考下

本文实例讲述了PHPopcode缓存简单用法。分享给大家供大家参考,具体如下:

1.什么是opcode

解释器分析代码之后,生成可以直接运行的中间代码,就称做操作码,opcode

2.解释器与编译器的区别

解释器是生成了中间代码后直接运行中间代码,运行时的控制权还是在解释器手里。

编译器则是生成了中间代码之后还进一步优化代码,生成可以直接运行的目标程序 ,但不执行,等待用户触发执行,他的控制权在目标程序,和编译器无关。

3.php是解释型语言,他的原理与编译有点相似,包括词法分析,语法分析,语义分析.....,php解释器的核心引擎就是zend engine

4.php如何查看一段代码的opcode

安装php的parsekit扩展,通过扩展的api就可以查看php的opcode,如parsekit_compile_string()

php -r "var_dump(parsekit_compile_string('print 1+1;'));"

5.opcode有生成

首先要经过词法分析,脚本代码可以看做是一系列单词组合,解释器要对这些单词进行分类,并打上记号

比如print,我们查看php源码包中的zend/zend_language_scanner.l在这个文件中我们就可以查找到pirnt对应的标记。T_PRINT

找到标记之后接下来就是语法分析,在zend/zend_language_parser.y中,我们可以找到T_PRINT对应的函数

接着在zend/zend_compile.c中找到这个函数实现代码,这个函数就是实现 了opcode的转换。所有的opcode都是用户整数来表示 的。

6、 开启opcode缓存

生成opcode是需要系统开销的,每一次执行都要生成一次opcode,这样的开销还是可观的,所以php的优化必须开启opcode的缓存,来避免重复的编译。

php的opcode缓存有APC,eAccelerator,XCache,这些都是把opcode放在共享内存中。

以APC为例:在php.ini中设置

apc.cache_by_default = on

通过

<?php print_r(apc_cache_info());?>

可以查看缓存的情况,

7.opcode缓存过期

opcode缓存是会过期的,如果过期就要得新生成一次,当然也可以跳过过期检查的机制,在php.ini中设置

apc.stat=off

这样程序代码的修改得通过重启服务器来生效。

8.脚本的跟踪与分析,可以使用xdebug来跟踪,用xdebug可以实现性能跟踪器,找到程序的执行瓶颈,从而优化程序。

xdebug.profiler_output_dir = /tmp/xdebug
xdebug.profiler_output_name = cachegrind.out.%p

xdebug的函数跟踪:

xdebug.trace_output_dir = /tmp/xdebug
xdebug.trace_output_name = trace.%c

window下可以用wincachegrind查看xdebug的报告文件。

希望本文所述对大家PHP程序设计有所帮助。

延伸 · 阅读

精彩推荐
  • PHP教程PHP实现随机数字、字母的验证码功能

    PHP实现随机数字、字母的验证码功能

    本文通过实例代码给大家介绍了PHP实现随机数字、字母的验证码功能,代码简单易懂,非常不错,具有一定得参考借鉴价值,需要得朋友参考下吧 ...

    我们家的小常客1712019-09-17
  • PHP教程利用PHP扩展Xhprof分析项目性能实践教程

    利用PHP扩展Xhprof分析项目性能实践教程

    XHProf是Facebook开发的性能调试工具,能帮助直观的统计显示PHP程序执行中各方法函数调用次数和消耗时间,以方便我们排查性能瓶颈并进行调优。下面这篇...

    tangqingsong3042019-09-08
  • PHP教程php 快速判断一个数字属于什么范围的实现方法

    php 快速判断一个数字属于什么范围的实现方法

    这篇文章主要介绍了php 快速判断一个数字属于什么范围的实现方法,需要的朋友可以参考下 ...

    gb42152873992019-09-19
  • PHP教程ThinkPHP中获取指定日期后工作日的具体日期方法

    ThinkPHP中获取指定日期后工作日的具体日期方法

    在本文中,我们给大家带来的是关于ThinkPHP中获取指定日期后工作日的具体日期的方法以及实例代码,有需要的朋友们学习下。...

    你看我哪里像好人1342019-09-02
  • PHP教程PHP中的访问修饰符简单比较

    PHP中的访问修饰符简单比较

    PHP public访问修饰符 示例: ?php header(content-type:text/html;charset=utf-8); // BaseClass class pub { public $tag_line = 服务器之家!; function display() { echo $this-tag_line.br/; } } ...

    laozhang1372019-06-21
  • PHP教程PHP children()函数讲解

    PHP children()函数讲解

    今天小编就为大家分享一篇关于PHP children()函数讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    php参考手册4012019-06-23
  • PHP教程关于ThinkPHP中的异常处理详解

    关于ThinkPHP中的异常处理详解

    和PHP默认的异常处理不同,ThinkPHP抛出的不是单纯的错误信息,而是一个人性化的错误页面,下面这篇文章主要给大家介绍了关于ThinkPHP中异常处理的相关资...

    菲猫的狗2022019-10-08
  • PHP教程PHP ADODB生成下拉列表框功能示例

    PHP ADODB生成下拉列表框功能示例

    这篇文章主要介绍了PHP ADODB生成下拉列表框功能,结合实例形式分析了php使用ADODB类进行数据库操作及下拉列表框显示的相关操作技巧,需要的朋友可以参考下...

    chengqiuming5062019-09-30