使用opcache为你的网站加速(转载)_alexlee0123的博客-程序员宅基地

技术标签: 运维  php  

[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/137/ ]

可能很多朋友在接触PHP的时候或多或少了解到:PHP是脚本语言、一种解释型语言,所以它不需要经过编译就能运行,诸如此类. 这种说法虽然并不完全正确,但对于初学者来说,这么理解或许还比较合适,不仅能快速入门,调试代码还挺方便.但当你想要优化基于PHP开发的网站,以支持更高的并发访问时,就得了解什么是Opcodes.

可能很多朋友在接触PHP的时候或多或少了解到:PHP是脚本语言、一种解释型语言,所以它不需要经过编译就能运行,诸如此类。

这种说法虽然并不完全正确,但对于初学者来说,这么理解或许还比较合适,不仅能快速入门,调试代码还挺方便。但当你想要优化基于PHP开发的网站,以支持更高的并发访问时,就得了解什么是Opcodes。

 默认情况,PHP对每一个请求,都会进行代码解析、编译等一系列处理生成对应的操作码,最后通过Zend引擎执行。如图所示:

没有Opcodes缓存

引用Laruence的例子

1
2
3
4
5
<?php
echo  "Hello World" ;
$a  = 1 + 1;
echo  $a ;
?>

PHP执行这段代码会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend)
1.Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)
2.Parsing, 将Tokens转换成简单而有意义的表达式
3.Compilation, 将表达式编译成Opocdes
4.Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。

Opcodes缓存的作用正是把编译好的操作码保存一段时间,让Zend引擎在之后的请求中不用再次解析、编译。如图所示:启用Opcodes缓存

当你在苦苦寻求加快PHP网站响应速度的方法时,我敢说缓存Opcodes就是你要找的方法之一,而且是最容易的。

本文介绍如何使用Opcache(原名Zend Optimizer Plus,简称O+)给PHP程序加速。O+是由Zend公司开发的一个PHP性能提升工具,不同于其他Opcodes缓存工具, O+除了缓存Opcodes以外, 还做了很多的Opcodes优化。

从PHP5.5开始, O+已经随着PHP的源代码一起发布了。5.2以上的PHP版本也可以通过编译的方式,加载O+。下载地址http://pecl.php.net/zendopcache

相同配置下,使用Apache Benchmark进行压力测试,O+的优化效果对比如下:

ab -c50 -t2 10.0.0.59/ab_test.php

开启O+:Requests per second:    168.77 [#/sec] (mean)

关闭O+:Requests per second:    157.44 [#/sec] (mean)

提高了11.33

ab_test.php代码如下:

1
2
3
4
5
6
7
8
9
<?php
$x  = 10000;
$arr  array ();
while ( $x ) {
     $arr [ $x ] =  $x --;
}
foreach $arr  as  $row ) {
     echo  "$row<br>" ;
}

接下来就把我的安装流程贴出来,因为我是用yum搭建环境的,可能不适用于你的情况,仅供参考。

1)下载、编译、安装

1
2
3
4
5
6
7
wget http: //pecl .php.net /get/zendopcache-7 .0.3.tgz
tar  zxvf zendopcache-7.0.3.tgz
cd  zendopcache-7.0.3/
phpize
. /configure
make
make  install

 

2)编辑php.ini,在文件底部添加配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vi  /etc/php .ini
zend_extension= /usr/lib64/php/modules/opcache .so
;命令行模式是否开启缓存功能,我建议不开启
opcache.enable_cli=0
;共享内存大小, 这个根据你们的需求可调
opcache.memory_consumption=128
;interned string的内存大小, 也可调
opcache.interned_strings_buffer=8
;最大缓存的文件数目
opcache.max_accelerated_files=4000
;60s检查一次文件更新
opcache.revalidate_freq=60
;打开快速关闭, 打开这个在PHP Request Shutdown的时候,回收内存的速度会提高
opcache.fast_shutdown=1
;不保存文件/函数的注释
opcache.save_comments=0

3)让php-fpm重新加载配置文件

1
/ect/init .d /php-fpm  reload

4)运行如下代码

1
2
<?php
phpinfo();

如果能找到类似的文字提示,说明PHP已经成功加载了OPcache。马上体验一下,PHP网站是不是响应更快了呢?

with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

转载于:https://www.cnblogs.com/doubilaile/p/8434280.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/alexlee0123/article/details/101943365

智能推荐

顶部栏样式1:左侧对齐,右侧贴边,同时缩放出现不换行_yanwuhc的博客-程序员宅基地

最近做项目遇到一个小问题,需要做以下顶部栏需求:这里利用flex布局实现上面的需求。整体思路:最上方logo和中间的板块看成一个整体,设置display为flex,称为板块1。右边的板块称为板块2。板块1与板块2设置flex,同时两端对齐。html代码:&lt;div class="top"&gt; &lt;div class="quick"&gt; // logo跟middle整体构成板块1 &lt;div class="logo"&gt;

Android的WIFI局域网对讲机_weixin_34122548的博客-程序员宅基地

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

python3__leecode/0350. 两个数组的交集 II_百里 Jess的博客-程序员宅基地

350. 两个数组的交集 II一、刷题内容原题链接内容描述二、解题方法1.方法一:哈希表2.方法二:排序 + 双指针一、刷题内容原题链接https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/内容描述给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8

用DirectX12绘制一个Cube_异次元的归来的博客-程序员宅基地

用DirectX12绘制一个Cube之前一篇文章讲了DirectX12的初始化流程,现在来看看在此基础上如何绘制一个Cube。首先,我们要为这个Cube准备一个shader,来告诉GPU绘制的具体流程,DirectX中的shader使用的是hlsl:cbuffer cbPerObject : register(b0){ float4x4 gWorldViewProj; };struct VertexIn{ float4 Color : COLOR; float3 PosL : POS

#uni-app# 组件复用_楚君君的博客-程序员宅基地_uniapp 组件复用

前言为什么需要组件复用,那是因为在实际开发里面,往往会有一些重复性的版块,这个时候为了减少代码的书写以及更高效地进行开发,我们就会用到组件复用提示:以下是本篇文章正文内容,下面案例可供参考下面的组件主要是排版相同的组件之间的复用,不涉及传值步骤:第一步:在目录——components里面,右键新建组件“test”第二步:在“test.Vue”组件里面,写出可复用组件的内容第三步:在需要用到复用组件的页面,进行引入、注册、使用复用组件引入:

redis mysql 整合demo_SpringBoot整合MyBatis并使用Redis作为缓存组件的Demo_Enzo 恩佐的博客-程序员宅基地

本博客 猫叔的博客,转载请申明出处Auth:HMStrange-TIAN e-mail:[email protected]历史文章安装流程1、安装docker &amp; redis如果不清楚docker是什么,请查看docker的文档和简介,这里给出docker的安装过程1.1 安装虚拟机(如果有远程服务器的,请略过此步骤)本文推荐VMvare,尽管vmvare比较臃肿,但是对于新手比较...

随便推点

VMware vsphere中的名词关系_weixin_33860737的博客-程序员宅基地

vSphere,ESXi,vCenter之间的关系VMware vSphere集成容器(VIC)建立了一个在轻量级虚拟机内部署并管理容器的环境。全新的虚拟机环境提供了更高级别的硬件隔离度,灵活性以及可扩展性使得容器对开发人员以及企业应用具有如此大的吸引力。VMware vSphere 是业界领先且最可靠的虚拟化平台。vSphere中的核心组件为VMwa...

STL set 应用 HDU2096 产生冠军_生于忧患,死于安乐2017的博客-程序员宅基地

产生冠军Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 25048Accepted Submission(s): 11194Problem Description有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最...

关于Android的一些设计_le4的博客-程序员宅基地

谈到应用程序设计,对设计师来说,Android就像是房间里的大象。很多设计师会更希望这是iOS,在那里所有任何人都只需要关心iPhone手机,iPad和App Store。然后没有人可以忽略Android,它目前已占据智能手机中最大的市场份额,且已经被广泛用于从平板电脑到电子阅读器等各种产品。总之,谷歌的Android平台正在迅速遍地开花,品牌厂商们很难不注意到。  让我们一起面对吧。Andr

c# 检测中英输入法_C# 切换中英文输入法_weixin_39941262的博客-程序员宅基地

在界面输入时,有时需要限定输入法。在不自定义正则表达式或者其它输入处理的情况下,切换中英文时与当前语言栏匹配,有以下的几种系统方案:InputLanguage方案1 /// 2 ///获取当前输入法3 /// 4 /// 5 private stringGetCultureType()6 {7 var currentInputLanguag...

struts2校验、ajax校验、javascript验证有何区别及联系?[email protected]的博客-程序员宅基地

struts2验证:Struts2的validate数据校验有两种方式:1.    Action中的validate()方法Struts2提供了一个Validateable接口,这个接口中只存在validate()方法,实现这个接口的类可直接被Struts2调用,ActionSupport类就实现了Vadidateable接口,但他的validate()方法是一个空方法,需要我们来重写。valid...

NotePad++更改背景颜色_weixin_34235105的博客-程序员宅基地

白色的编辑框看得眼睛不舒服,怎么样更改NotePad++的背景颜色使眼睛更舒服些?1.设置--语言格式设置2.设置背景色“背景色”一栏,选择背景色颜色   “使用全局背景色”一栏要打上√,否则无效参考网址:NotePad++更改背景颜色 ...

推荐文章

热门文章

相关标签