php7.4 preload(预加载)_ball球的博客-CSDN博客_php preload


本站和网页 https://blog.csdn.net/qmhball/article/details/103503939 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

php7.4 preload(预加载)_ball球的博客-CSDN博客_php preload
php7.4 preload(预加载)
ball球
于 2019-12-12 10:12:14 发布
2291
收藏
分类专栏:
php
文章标签:
php7.4
preload
预加载
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qmhball/article/details/103503939
版权
php
专栏收录该内容
31 篇文章
0 订阅
订阅专栏
1. 什么是preload
什么是preload? Preloading in PHP 7.4中有一句话总结的简单到位: Opcache, but more! 那么preload比opcache多做了哪些呢?为了更好的说明问题,我们先来看下面这张opcache的工作原理图。
图中不难看出,对于执行过的代码,再次执行时将命中cache,cache中的opcode可以直接被取出,进而执行。从而省了下了词法析,语法分析,编译生成opcode的时间。
但是从cache中的opcode到执行opcode过程中还需要做两件事
将opcode从SHM(cache)中拷贝到处理请求的进程(比如php-fpm)空间中。链接,也就是解决依赖问题。比如:
A.php
class A{
...
B.php
class B extends A{
...
每个文件是单独编译并生成opcode的,所以当我们使B.php对应的opcode(也就是使用class B)时,还要再去拿A对应的opcode。 完成上面两件事后,代码才能真正开始执行。
此外,opcode是可以设置对文件的变化做检查的,比如每隔2秒,看下文件是否有变,如果改变,则cache中的opcode失效,重新编译。
上面这些事,都是在执行之前发生的,是否可以提前做好,把时间省下来呢?可以的,这就是preload的主要工作!
执行前将opcode直接放入处理进程中。提前链接,解决依赖。载入的opcode不可更改,省去了检查文件变更及可能的重新编译时间。相应的副作用是,如果不重启进程(比如php-fpm),代码的修改将不会生效。
2. 如何启用preload
2.1修改php.ini
[opcache]
zend_extension=opcache.so
opcache.enable=1 # 启用 opcache
opcache.preload=your_preload_script.php #该脚本用于执行预加载哪些文件
opcache.preload_user=a_user_name # preload用户,安全考虑禁止root用户
2.2预加载脚本
一段最简单的预加载脚本如下:
$files = /* An array of files you want to preload */;
foreach ($files as $file) {
opcache_compile_file($file);
files中对应的class将被预加载到内存中
3. 实例
3.1 php.ini配置
[opcache]
opcache.enable=1
opcache.preload=/home/rawphp/preload.php
opcache.preload_user=odin
3.2 预加载脚本
rawphp目录结构如下
├── a.php //业务代码
├── lib //基础库
│ ├── 1.php
│ ├── 2.php
│ └── base.php
└── preload.php预加载脚本
preload.php
<?php
$files = [
"lib/base.php",
"lib/1.php",
"lib/2.php"
];
foreach ($files as $one){
opcache_compile_file($one);
3.3 目录中的其它代码
a.php
<?php
$obj = new A1();
$obj->say();
lib/1.php
<?php
require_once(__DIR__."/base.php");
class A1 extends Base{
public function say(){
echo "i'm A1";
lib/2.php
<?php
class A2{
public function sayhi(){
echo "i'm A2";
lib/base.php
<?php
abstract class Base{
abstract function say();
3.4 说明及注意
因为作了preload, 所以a.php中不需要require(“lib/1.php”)就可以直接new A1()。A1依赖Base, 已经在文件中
require_once(__DIR__."/base.php")
但是在preload.php中依然要对base.php进行opcache_compile_file()。不然重启php-fpm时会报NOTICE
Can't preload unlinked class A1: Unknown parent Base.
也就是A1不会被预加载。进而带来的后里是,执行a.php时报Fatal error
Fatal error: Uncaught Error: Class 'A1' not found
3.5 从底层看效果
我们只启动一个php-fpm进程,这样可以通过strace对比一下开关preload的效果。
3.5.1开启preload
首先,我们打开preload,从浏览器执行a.php,看到strace结果如下: 只读取了a.php,没有读取依赖的1.php, base.php。因为已经直接从内存中加载。
3.5.2关闭preload,只保留opcache
修改php.ini
;opcache.preload=/home/ballqiu/rawphp/preload.php
修改a.php
//增加如下代码,否则无法执行
require_once("lib/1.php");
从浏览器执行a.php,第一次执行看到strace结果如下: 读取了1.php, base.php两个依赖。
第二次执行看到strace结果如下: 因为开启了opcache, 所以,虽然没有读取依赖文件,但仍然检查了文件是否更新。
4. 万物皆可preload么?
RFC的中Preloading Limitation是这样说明的。
Only classes without unresolved parent, interfaces, traits and constant values may be preloaded。
我的实验结果如下:
class, funciton, trait, interface能够进行预加载(在满足依赖的情况下)。全局变量,define, const,无法被预加载。比如preload.php中如果有如下代码:
<?php
define("NAME", "BALL");
$name = "ball";
const BOOK = "pot";
那么这些变量和常量在a.php中都是无法看到的。
预加载只加载文件,不执行文件,因此动态生成的一切无法被预加载。
5. 特别注意
修改preload.php(预加载脚本)时一定要特别小心,如果出问题,会导致php-fpm重启失败。被预加载的文件如果有修改,一定要重启php-fpm才会生效。开preload的前提是开opcache, 所以不存在只开preload不开opcache的情况。反之是可以的。
6. 性能测试
我们使用一个最简单的hello world程序,测试superphp框架(内部的一个中等复杂度的框架,可以类比CI)在不同条件下的性能。(测试机器配置:4核8G)
<?php
class Page_User_Index extends SOSO_Page{
public function run(){
echo "hello world";
使用ab做压测,记录不同并发下Time per request(单位毫秒)。
php 7.4.0
可见框架在开preload与不开preload时差别不大。这是因为代码比较简单,依赖不多,框架预加的类也不多。
php 7.0.1
可见同样是只开opcache, 即使在如此简单的逻辑下7.4的性能还是高于7.0。
7. 总结
预加载可以提升性能,但只有依赖繁多时才会起到明显效果。即使只开启opcache,性能提供也非常明显。升级php7.4得到的性能提供明显。
ball球
关注
关注
点赞
收藏
打赏
评论
php7.4 preload(预加载)
1. 什么是preload什么是preload?Preloading in PHP 7.4中有一句话总结的简单到位:Opcache, but more!那么preload比opcache多做了哪些呢?为了更好的说明问题,我们先来看下面这张opcache的工作原理图。图中不难看出,对于执行过的代码,再次执行时将命中cache,cache中的opcode可以直接被取出,进而执行。从而省了下...
复制链接
扫一扫
专栏目录
LSTM-实现写诗机器人
三人行必有我师的博客
08-22
3980
#数据处理
import collections
import numpy as np
start_token = 'B'#begin
end_token = 'E'#end
#数据集:总共有34646首诗,1721655个字(6110个去重后的字)
def process_poems(file_name):
# poems -> list of numbers诗集
p...
STRINGTABLE PRELOAD DISCARDABLE
最新发布
Y12231819的博客
12-01
208
STRINGTABLE PRELOAD DISCARDABLE
参与评论
您还未登录,请先
登录
后发表或查看评论
惊!揭秘AI人工智能机器人自动写诗的奥秘!
二狗子的博客
10-30
5250
最近央视某综艺节目中一个AI机器人随机为知名主持人撒贝宁即兴赋诗一首的事情在网络上热传,那么这个AI机器人究竟是如何在这么短的时间内根据一个人的名字写出这么优秀的诗作,甚至连撒贝宁自称为“千古之谜”的身高信息都能搜集得到!
前端性能优化:dns-prefetch和preload预加载资源
Suk__的博客
11-11
382
link指定rel=dns-prefetch后浏览器会在空闲时间预加载好资源但是不会执行,等真正请求的时候才执行,此时已经资源已经加载好了直接执行.和rel=prefetch不一样的是,前者会提前解析好dns,等到请求资源时就会起到提速的作用。
【深度学习】写诗机器人tensorflow实现
热门推荐
无名山丘,崛起成峰
06-29
2万+
代码地址:https://github.com/hjptriplebee/Chinese_poem_generator, 欢迎fork, star
机器人命名MC胖虎,目前只是最简单粗暴的方法,使用tensorflow完成,有些像人工智障,符合胖虎的人物设定,看一些效果:
LSTM的原理网上资料很多,不了解的可以看这里:http://www.jianshu.com/p/9dc9f41f
10行代码,实现写诗机器人
qq_30906721的博客
09-12
3470
集算器不仅有大数据计算,还有诗和远方。最近看到不少写诗机器人的新闻,于是尝试用集算器简单地实现一个。这个实现真的很简单,简单到只有10 几行代码,请看实现步骤:
1 下载字典和诗词
从网上找一个用于分词的字典文件,里面记录着每个中文词汇的词性。我从GitHub 上找了一个,稍微处理之后保存到集文件dict.btx 。
下载宋词三百首的TXT 文件,去掉空格和换行,以及其它文字以外的字符,得到...
php 预加载函数,php预加载,preload
weixin_34487308的博客
03-11
112
php预加载,preloadphp.ini# 只用设置成0以后重启php才能清空preload的文件opcache.enable = 1# 配置进行preload的php脚本,php-fpm启动的时候会先根据这个文件进行预加载opcache.preload=/home/www/test/preload.php# preload的用户,不建议使用rootopcache.preload_user = ...
php 预加载函数,php7.4 preload(预加载)
weixin_29163857的博客
03-11
210
1. 什么是preload什么是preload?Preloading in PHP 7.4中有一句话总结的简单到位:Opcache, but more!那么preload比opcache多做了哪些呢?为了更好的说明问题,我们先来看下面这张opcache的工作原理图。image图中不难看出,对于执行过的代码,再次执行时将命中cache,cache中的opcode可以直接被取出,进而执行。从而省了下了...
php预加载类库,php7.4 preload(预加载)
weixin_42537142的博客
04-10
105
1. 什么是preload什么是preload?Preloading in PHP 7.4中有一句话总结的简单到位:Opcache, but more!那么preload比opcache多做了哪些呢?为了更好的说明问题,我们先来看下面这张opcache的工作原理图。image图中不难看出,对于执行过的代码,再次执行时将命中cache,cache中的opcode可以直接被取出,进而执行。从而省了下了...
php7.4重量级特性:预加载
代码技巧
07-10
2050
php推出php7.4 alpha1版本,里面比较值得注意的是引入了预加载功能。本篇文章大概x字,预计阅读大概x分钟。opcode cache生产环境中,绝大部分是开启了...
preload 让加载和解析解耦
weixin_34190136的博客
05-27
649
TL;DR
preload本质:preload 是声明式的 fetch,可以改变浏览器加载资源的优先级,强制浏览器请求资源,同时不阻塞文档 onload 事件,也因此可以将 load 事件与脚本解析过程解耦
prefetch本质:让浏览器空闲的时候加载下一页可能需要的资源,同样的load和解析解耦
dns-fetch,让浏览器提前做dns预解析,当静态资源和html不在同一个域的时候,特别好用
...
读《利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令》有感
一个码农的笔记
11-01
2723
今天看来一篇文章:http://cb.drops.wiki/wooyun/drops/tips-16054.html
复现了一下,感觉有点坑
我把复现的过程,结果和遇到问题在这里总结一下
我的实验环境是centos7 php 5.4
首先按照要求编译一个so
1.创建一个hehe.c
#include
#include
#include
void payload()
利用环境变量LD_PRELOAD来绕过php disable_function执行系统命令
weixin_33738982的博客
03-08
775
YiYang · 2016/05/20 15:550x00 前言在做渗透测试的时候如果遇到安全配置比较好的服务器,当你通过各种途径获得一个php类型的webshell后,却发现面对的是无法执行系统命令的尴尬,因为这类服务器针对命令执行函数做了防范措施,后续的渗透行为都因此而止步。笔者这里分享一个绕过思路,希望你能在实际测试中派上用场。0x02 绕过思路严苛环境下php设置的disable_func...
【第1159期】CSS预加载Preload
前端早读课
01-05
4215
前言看天气预报,今天好多地方都开始下雪了。今日早读文章由@李斌分享。正文从这开始~Preload 作为一个新的web标准,旨在提高性能和为web开发人员提供更细粒度的加载控制。Preload使开发者能够自定义资源的加载逻辑,且无需忍受基于脚本的资源加载器带来的性能损失。在 HTML 代码中,它看上去大概是下面这样的一段声明式获取指令(declaratiev fetch directive)。 re
php7中require_once,php require_once的使用方法总结
weixin_31016735的博客
03-09
507
require_once 语句和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。参见 include_once 的文档来理解 _once 的含义,并理解与没有 _once 时候有什么不同。有一个文件a.php,里面有一个变量$var=1;我在b.php 中用require_once()函数引用了a.php文件,然后我在c.php 中用requ...
php8预加载,如何利用预加载优化Laravel Model查询详解
weixin_34587698的博客
03-13
86
前言本文主要给大家介绍了关于利用预加载优化Laravel Model查询的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍:介绍对象关系映射(ORM)使数据库的工作变得非常简单。 在以面向对象的方式定义数据库关系时,可以轻松查询相关的模型数据,开发人员可能不会注意底层数据库调用。下面将通过一些例子,进一步帮助您了解如何优化查询。假设您从数据库收到了100个对象,并且每个记录都有1...
php7.4 框架预载入,php7.4 preload(预加载)-Go语言中文社区
weixin_42316073的博客
04-06
68
1. 什么是preload什么是preload?Preloading in PHP 7.4中有一句话总结的简单到位:Opcache, but more!那么preload比opcache多做了哪些呢?为了更好的说明问题,我们先来看下面这张opcache的工作原理图。图中不难看出,对于执行过的代码,再次执行时将命中cache,cache中的opcode可以直接被取出,进而执行。从而省了下了词法析,语...
html5中preload是什么意思,html的video标签的preload属性详解
weixin_28947253的博客
06-15
6016
--------------------------------------------------------- Ta 只分享的内容开始 ---------------------------------------------------------------------html的video标签的preload属性详解最近做直播项目,页面有video加载很慢”的问题,想了解下原因,于是就看了...
centos php7 无法加载mysqli_PHP 7.4中的预加载(Opcache Preloading)
weixin_39718460的博客
11-27
118
php中文网最新课程每日17点准时技术干货分享在PHP 7.4中,添加了对预加载的支持,这是一个可以显著提高代码性能的特性。简而言之,这是它的工作方式:● 为了预加载文件,您需要编写一个自定义PHP脚本● 该脚本在服务器启动时执行一次● 所有预加载的文件在内存中都可用于所有请求● 在重新启动服务器之前,对预加载文件所做的更改不会产生任何影响让我们深入了解它。#Opcache虽然预加载是建...
php8预加载,php - 预加载PHP脚本时,“未知类型依赖项”是什么意思? - SO中文参考 - www.soinside.com...
weixin_34835735的博客
03-13
64
我正在尝试使用PHP 7.4以后的新preloading feature。我运行了composer install --no-dev --optimize-autoloader以生成项目中所有可用类的列表,并使用以下preload.php脚本预加载了它们:$files = require 'vendor/composer/autoload_classmap.php';foreach (array_...
php预加载图片,图片预加载的一个简明例子
weixin_29367103的博客
03-26
154
图片预加载技术的典型应用:如lightbox方式展现照片,无疑需要提前获得大图的尺寸,这样才能居中定位,由于javascript无法获取img文件头数据,必须等待其加载完毕后才能获取真实的大小然后展示出来,所以lightbox显示的图片的速度体验要比直接输出的差很多,而本文说提到的预加载技术主要针对获取图片尺寸。效果演示imgReady图片头数据加载就绪事件下载:演示:显示图片清空缓存(浏览器会缓...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
ball球
CSDN认证博客专家
CSDN认证企业博客
码龄15年
暂无认证
141
原创
3万+
周排名
34万+
总排名
110万+
访问
等级
7736
积分
141
粉丝
237
获赞
184
评论
287
收藏
私信
关注
热门文章
HTTP返回码中301与302的区别
137105
用shell切分文件--split
81784
curl抓取页面时遇到重定向的解决方法
60304
mysql中int长度的意义
42400
分析redis key大小的几种方法
41618
分类专栏
go
23篇
读书笔记
14篇
pdf开发
8篇
php7内核分析
5篇
postman
5篇
tag
1篇
phpunit
7篇
mysql
11篇
web前端
17篇
服务器配置
9篇
php
31篇
shell
5篇
yii
4篇
nosql
16篇
phing
5篇
git
4篇
coreseek/sphinx
1篇
swoole
4篇
其它
4篇
yapi
3篇
mock
1篇
jsonp
1篇
最新评论
logrus中输出文件名、行号及函数名
恋喵大鲤鱼:
两个片自?笔误?
如何让gorm输出执行的sql
ball球:
logrus
如何让gorm输出执行的sql
houjibofa2050:
博主您好,logger 这个用的是哪个包哈
go中类型的相等(==)及可比较规则
balagu0439:
//通道值可与nil比较
//输出:true true.
fmt.Printf("%v %v\n", ch4 == ch5, ch5 == ch1). 这里ch5==ch1 应该是false
php7数组的实现及部分源码分析
yangshubin110228:
这个文章我读了10遍,然后实际操作的一遍,写的很到位,果然是大牛,文档写的都这么好
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
聊聊go语言逃逸分析
go语言select语句中的求值问题
PDF Explained(翻译)第七章 文档元数据和导航
2021年26篇
2020年26篇
2019年10篇
2018年12篇
2017年8篇
2016年19篇
2015年10篇
2014年2篇
2013年12篇
2012年29篇
目录
目录
分类专栏
go
23篇
读书笔记
14篇
pdf开发
8篇
php7内核分析
5篇
postman
5篇
tag
1篇
phpunit
7篇
mysql
11篇
web前端
17篇
服务器配置
9篇
php
31篇
shell
5篇
yii
4篇
nosql
16篇
phing
5篇
git
4篇
coreseek/sphinx
1篇
swoole
4篇
其它
4篇
yapi
3篇
mock
1篇
jsonp
1篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
ball球
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值