首页 > 后端开发 > 正文

PHP7卓越性能背后的原理有哪些

2024-09-30 14:57:17 | 我爱编程网

最近经常有小伙伴私信询问PHP7卓越性能背后的原理有哪些相关的问题,今天,我爱编程网小编整理了以下内容,希望可以对大家有所帮助。

本文目录一览:

PHP7卓越性能背后的原理有哪些

PHP7卓越性能背后的原理有哪些

一 zval使用栈内存
在Zend引擎和扩展中,经常要创建一个PHP的变量,底层就是一个zval指针。之前的版本都是通过MAKE_STD_ZVAL动态的从堆上分配一个zval内存。而PHP7可以直接使用栈内存。PHP代码中创建的变量也进行了优化,PHP7直接在栈内存上预分配zval。这样节约了大量内存分配和内存管理的操作。
PHP5
zval *val; MAKE_STD_ZVAL(val);

PHP7
zval val;

二 zend_string存储hash值,array查询不再需要重复计算hash
PHP7为字符串单独创建了新类型叫做zend_string,除了char *指针和长度之外,增加了一个hash字段,用于保存字符串的hash值。PHP中array是核心数据结构,PHP程序中往往都有大量的$array[$key]操作,虽然hashtable查找的时间复杂度是O(1),但$key要转为hash值是要经过计算的。不仅仅是array操作,实际上PHP底层对于类属性、类方法、函数,访问时都要先通过hashtable查找到对应的指针,再执行对应的操作。PHP7之前Zend引擎会有大量的CPU时间用于计算hash值。
实际上PHP程序运行起来之后,大部分情况下$key的值都是不变的。PHP7干脆将这个hash值保存起来,下次直接使用,这样就节省了大量的hash计算操作,PHP的hashtable与C数组的性能一致。
三 hashtable桶内直接存数据
PHP5的hashtable每个元素都是一个 Bucket *,而PHP7直接存Bucket,减少了内存申请次数,提升了Cache命中率和内存访问速度。
四 zend_parse_parameters改为宏实现
PHP的C扩展函数与PHP中的变量进行参数输入时,要使用zend_parse_parameters()函数,这个函数根据一个字符串参数找到对应PHP的zval指针,然后进行赋值。 这个函数实际上有一定的性能消耗。PHP7直接使用宏替换了zend_parse_parameters函数,C扩展中不再需要使用zend_parse_parameters进行逐个参数的查找,宏展开后自动会实现参数赋值。仅此一项就提升了5%的性能。
五 新增加4种OPCODE
很多PHP程序中会大量使用call_user_function, is_int/string/array, strlen , defined 函数。PHP5 都是以扩展函数的方式提供,PHP7中这4类函数改成ZendVM的OPCODE指令,执行更快。
六 其他更多优化
除了上面5个主要优化点之外,PHP7还有其他更多的细节性能优化。如基础类型int、float、bool等改为直接进行值拷贝,排序算法改进,PCRE with JIT,execute_data和opline使用全局寄存器等等。PHP7对性能的优化会继续进行下去。

PHP7卓越性能背后的原理有哪些

PHP中的函数

ThinkPHP中 C(),D(),S()

1.在具体的Action方法里面,可以用C()对某些参数进行动态配置,主要指那些还没有使用的参数。具体用法如下:
C('参数名称'); //获取已经设置的参数值
C('参数名称','新的参数值'); //设置新的值

2.D()函数的使用:
先定义好模型类,如UserModel,然后就可以用D()函数对数据进行操作了。例如:
先在"你的项目"\Lib\Model下建立一个名为UserModel.class.php的PHP脚本,内容如下:
class UserModel extends Model{}
然后,无需增加任何属性和方法,就可以进行如下操作:
$User = D("User"); //实例化User对象,User是你在数据库建立的一个名为"前缀_user"的数据表
也可以用$User = new UserModel()代替,进行实例化对象的操作。
实例化之后,就可以对数据进行增删查改等一系列操作了,如:
$User->find(1); //查找主键为1的记录

3.S()函数的使用:
ThinkPHP把各种缓存方式都抽象成统一的缓存类来调用,而且ThinkPHP把所有的缓存机制统一成一个S方法来进行操作,所以在使用
不同的缓存方式的时候并不需要关注具体的缓存细节。如:
S('data',$Data); //使用data标识缓存$Data数据
S('data',$Data,3600); //缓存$Data数据3600秒
$Data = S('data'); //获取缓存数据

PHP7卓越性能背后的原理有哪些

php setcookie(name, value, expires, path, domain,

我爱编程网(https://www.52biancheng.com)小编还为大家带来php setcookie(name, value, expires, path, domain,的相关内容。

setcookie() 定义一个和其余的 HTTP 标头一起发送的 cookie 和其它标头一样 cookie 必须在脚本的任何其它输出之前发送(这是协议限制) 这 需要将本函数的调用放到任何输出之前 包括 <> 和 <head> 标签以及任何空格 如果在调用 setcookie() 之前有任何输出 本函数将失败并返回 FALSE 如果 setcookie() 函数成功运行 将返回 TRUE 这并不说明用户是否接受了 cookie 函数定义 bool setcookie ( string name [ string value [ int expire [ string path [ string domain [ bool secure]]]]] ) setcookie() 参数详解

参数        说明 举例 name cookie的名字 使用 $_COOKIE[ cookiename ] 调用名为 cookiename 的 cookie value cookie的值 存放在客户端 不要存放敏感数据 假定 name 是 cookiename 可以通过 $_COOKIE[ cookiename ] 取得其值 expire

Cookie 过期的时间 这是个 Unix 时间戳 即从 Unix 纪元开始的秒数

换而言之 通常用 time() 函数再加上秒数来设定 cookie 的失效期

或者用 mktime() 来实现

time()+ * * * 将设定 cookie 天后失效

如果未设定 cookie 将会在会话结束后(一般是浏览器关闭)失效

path Cookie 在服务器端的有效路径

如果该参数设为 / 的话 cookie 就在整个 domain 内有效

如果设为 /foo/ cookie 就只在 domain 下的 /foo/ 目录及其子目录内有效 例如 /foo/bar/

默认值为设定 cookie 的当前目录

domain 该 cookie 有效的域名

要使 cookie 能在如 example 域名下的所有子域都有效的话 该参数应该设为 example

虽然 并不必须的 但加上它会兼容更多的浏览器

如果该参数设为 example 的话 就只在 子域内有效

细节见Cookie 规范中的 tail matching 我爱编程网

secure

指明 cookie 是否仅通过安全的 HTTPS 连接传送

当设成 TRUE 时 cookie 仅在安全的连接中被设置 默认值为 FALSE

例子 setcookie() 发送例子

复制代码 代码如下: $value = something from somewhere ; setcookie("TestCookie" $value); setcookie("TestCookie" $value time()+ ); /* expire in hour */ setcookie("TestCookie" $value time()+ "/~ra *** us/" " utoronto ca" );

注意 cookie 中值的部分在发送的时候会被自动用 urlencode 编码并在接收到的时候被自动解码并把值赋给与自己同名的 cookie 变量 如果不想这样并且在使用 PHP 的话 可以用 setrawcookie() 来代替 下面这个简单的例子可以得到刚才所设定的 cookie 的值

复制代码 代码如下: <?php // 输出单独的 cookie echo $_COOKIE["TestCookie"]; echo $HTTP_COOKIE_VARS["TestCookie"]; // 另一个调试的方法就是输出所有的 cookie print_r($_COOKIE); ?>

要删除 cookie 需要确保它的失效期是在过去 才能触发浏览器的删除机制 下面的例子说明了如何删除刚才设置的 cookie 例子 setcookie() 删除例子

复制代码 代码如下: // 将过期时间设为一小时前 setcookie("TestCookie" "" time() ); setcookie("TestCookie" "" time() "/~ra *** us/" " utoronto ca" );

也可以通过在 cookie 名称中使用数组符号来设定数组 cookie 可以设定多个 cookie 作为数组单元 在脚本提取 cookie 时所有的值都放在一个数组种 例子 setcookie() 中使用数组的例子

复制代码 代码如下: <?php // 设定 cookie setcookie("cookie[three]" "cookiethree"); setcookie("cookie[o]" "cookieo"); setcookie("cookie[one]" "cookieone"); // 刷新页面后 显示出来 if (isset($_COOKIE[ cookie ])) { foreach ($_COOKIE[ cookie ] as $name => $value) { echo "$name : $value <br />n"; } } ?> lishixinzhi/Article/program/PHP/201311/21055

以上就是我爱编程网小编整理的内容,想要了解更多相关资讯内容敬请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
标签: PHP
与“PHP7卓越性能背后的原理有哪些”相关推荐
PHP7的五大新特性有哪些 PHP7的五大新特性有哪些一览
PHP7的五大新特性有哪些 PHP7的五大新特性有哪些一览

php函数中中$和&$的区别&amp;表示获取地址,类似指针,和C语言是差不多的,在VB、VFP等语言里面叫引用,其实是一个东西。在用于函数参数调用的时候,可以这样简单的理解:使用$是传递的变量的一个拷贝,函数里面对参数的修改只在函数执行期间有效,不影响函数外面原来变量的值。使用&amp;传递的就不复制,传递的是变量的引用(也叫指针,相当于快捷方式),那样在函数里面对参数的修改会影响函

2024-10-20 13:13:23
【黄啊码】用PHP7性能居然是5.6的三倍?赶紧看看它有什么新特性
【黄啊码】用PHP7性能居然是5.6的三倍?赶紧看看它有什么新特性

【黄啊码】用PHP7性能居然是5.6的三倍?赶紧看看它有什么新特性大家好,我是黄啊码。近日,有关PHP7性能的讨论引发了广泛关注。根据网友的测评,PHP7的性能显著提升,在某些WordPress基准测试中,其性能达到了PHP5.6的三倍。接下来,让我为您详细解析PHP7的新特性,包括标量类型与返回值类型声明、强制类型与严格类型的概念、void函数、NULL合并运算符以及太空船运算符。P

2024-11-27 11:46:48
问:php网站的安全性考虑都有哪些
问:php网站的安全性考虑都有哪些

php与jquery使用的都是$符号,会不会冲突当然不会,php的$出现在&lt;%%&gt;等php专用的标签内,而jquery的$出现在&lt;script&gt;标签内,即便嵌套实用,各自的标签也是分得清清楚楚的。所以会弄错的只有程序员,编译器是完全没有压力的。问:php网站的安全性考虑都有哪些大家都知道PHP已经是当前最流行的Web应用编程语言了。但是也与其他脚本语言一样,PH

2024-09-01 10:03:51
PHP和哪个数据库结合性能好?在百度上看了些评测,MSSQL的性能要比MYSQL好很多。
PHP和哪个数据库结合性能好?在百度上看了些评测,MSSQL的性能要比MYSQL好很多。

php及数据库PHP调用三种数据库的方法本文比较详细的介绍PHP调用MySQL、ODBC以及ORACLE数据库。MySQL是一个小巧灵珑的数据库服务器软件,对于中、小型应用系统是非常理想的。除了支持标准的ANSISQL语句外,最重要的是,它还支持多种平台,而在Unix/Linux系统上,MySQL支持多线程运行方式,从而能获得相当好的性能。它和PHP、Apache一样,是属于开放

2024-11-13 23:42:23
python源文件的后缀名有哪些
python源文件的后缀名有哪些

python源文件的后缀名有哪些python文件的后缀名有:“。py”、“。py3”、“。pyc”、“。pyo”、“。pyd”、“。pyi”、“。pyx”、“。pyz”、“。pywz”、“。rpy”、“。pyde”、“。pyp”、“。pyt”。以py扩展名的文件是Python源码文件,由python。exe解释,可在控制台下运行。可用文本编辑器读写。Python3脚本(Pytho

2024-02-12 02:02:20
能够编译运行python的软件有哪些
能够编译运行python的软件有哪些

写python的软件?以下是常用的几款Python代码编辑器和Python集成开发工具。一、Python代码编辑器1.SublimeTextSublimeText是一款非常流行的代码编辑器,支持Python代码编辑,同时兼容所有平台,并且丰富的插件扩展了语法和编辑功能,迅捷小巧,具有良好的兼容性,很受编程人士的喜爱!2.VimVim和Vi是一种模型编辑器,它将

2024-01-20 15:31:12
php的优点有哪些
php的优点有哪些

php的优点有哪些PHP作为一种脚本语言,有以下几个优点:1.易于学习和使用:PHP的语法易于理解和上手,对初学者来说比较友好,很容易掌握。2.高度兼容性:PHP可以运行在几乎所有的操作系统上,并且支持大多数的Web服务器和数据库。3.足够的扩展性:PHP支持大量的扩展和库,各种功能模块化,方便快捷的模块化操作,可以让开发者轻松创建复杂的功能。4.开发速度快:PHP提

2024-08-23 03:00:27
类的构造函数都有哪些类的构造函数都有哪些
类的构造函数都有哪些类的构造函数都有哪些

定义一个坐标点类Point,包含数据成员x和y,无参构造函数,带两个参数的构造函数.&lt;?php    class Point{        public $x = 0;        public $y = 0;        public function __construct($x,%y){            $this-&gt;x = $x;            $th

2024-11-22 17:28:20