如何让你的Laravel在15毫秒内返回一个"hello world!"
下面由laravel教程栏目给大家介绍如何让你的Laravel在15毫秒内返回一个"hello world!",希望对需要的朋友有所帮助!
首先,我认为通过返回最基本的Hello world!
字符串,是所有以Laravel
为框架的项目中,最基本的一个请求过程。除此以外,项目中的任何http
请求,都会带有更多的业务逻辑和数据库查询等耗时操作,且这些逻辑的执行时间都是不可控和不可对比的。也就是说,其他任何请求都不会比返回一个Hello world!
字符串更短的时间了。所以,通过对比这个最基本的Hello world
请求响应时间,我们可以看出,不同的优化对于Laravel
框架从启动到执行结束的影响。
测试参数
参数 | 版本 |
---|---|
服务器 | 1c处理器,1G内存,1M带宽 |
PHP版本 | 8.0 |
进程管理 | PHP-FPM |
默认配置响应时间
可以看出,在安装PHP
后,默认配置情况下,返回一个Hello world!
平均需要140ms
左右。接下来,我们开始搞事情了!
Round 1:Laravel 缓存
Laravel
为我们提供了很方便的artisan
命令来开启缓存功能,有效的减少了文件读取次数。其中php artisan optimize
命令包括了php artisan config:cache
和php artisan route:cache
命令,但是会多出现一个Files
缓存。将下面的 5 个命令依次执行:
root@Aliyun-ECS / # php artisan optimize root@Aliyun-ECS / # php artisan config:cache root@Aliyun-ECS / # php artisan event:cache root@Aliyun-ECS / # php artisan route:cache root@Aliyun-ECS / # php artisan view:cache
我们再看下响应时间:
可见Laravel
的缓存对于最基础的请求,没有明显的影响。
Round 2:开启 opcache
这次,我决定使用提速效果最明显的手段:开启opcache
扩展。由于本人是使用的 remi 源安装的php8
,所以我这里安装opcache
扩展会比较容易,其他版本的安装请自行 Google。
root@Aliyun-ECS / # yum install php80-php-opcache
等待安装结束后,我们重启php
,然后看下扩展是否已经安装上:
root@Aliyun-ECS / # systemctl restart php80-php-fpm root@Aliyun-ECS / # php -i|grep opcache.enable opcache.enable => On => On opcache.enable_cli => On => On opcache.enable_file_override => Off => Off
ok,已经开启opcache
扩展了,我门再来看下Hello world!
的响应时间:
OHHHHHH!效果太明显了,一下子降到 30ms
以内,提升足足有将近 5 倍 的响应时间。注意一下,在第一次请求时,会比较慢,是因为opcache
在写缓存导致的,访问过一次以后,速度就飞起了。到这里你就满足了吗?看看文章标题,我们要进一步加大力度!
Round 3:开启 swoole
swoole
模块大家都懂,就是将应用程序提前加载到内存中,从而在处理请求时,减少文件的读取和加载过程,为PHP
插上了翅膀。下面安装swoole
扩展,其他版本的请自行 Google。
root@Aliyun-ECS / # yum install php80-php-pecl-swoole
老样子,安装完后检查下是否安装成功:
root@Aliyun-ECS / # systemctl restart php80-php-fpm root@Aliyun-ECS / # php -i|grep swoole.enable swoole.enable_coroutine => On => On swoole.enable_library => On => On swoole.enable_preemptive_scheduler => Off => Off
扩展已经启用了,但是还无法进行测试。因为 swoole
是一个 cli
模式下的扩展,php-fpm
无法使用。所以我们需要实现一个cli
模式下的http
应用。但实际上我们无需自己手动编写http
应用,社区中有大佬已经写好了。所谓「前人种树,后人乘凉」,我们引入 laravel-swoole 软件包,再启动一个http
服务即可,很简单。
// 引入软件包 root@Aliyun-ECS / # composer require swooletw/laravel-swoole // 发布配置文件 root@Aliyun-ECS / # php artisan vendor:publish --tag=laravel-swoole
执行以上两步操作后,即可在项目的config
目录下找到swoole_http
和swoole_websocket
两个配置文件。一个基本的Hello world!
测试,无需修改默认配置,我们只在项目的.env
文件中,添加SWOOLE_HTTP_HOST=0.0.0.0
和SWOOLE_HTTP_PORT=2020
即可,意思是在2020
端口启动一个http
监听程序。0.0.0.0
指任何IP都可远程访问。
// .env SWOOLE_HTTP_HOST=0.0.0.0 SWOOLE_HTTP_PORT=2020
基本配置修改完成,我们启动laravel-swoole
的http
应用:
root@Aliyun-ECS / # php artisan swoole:http start Starting swoole http server...Swoole http server started: <http://0.0.0.0:2020>
此时我们访问2020
端口,即可测试使用swoole
扩展后的应用。再看下请求的响应时间:
好家伙!直接干到15ms
以内。这里第一次时间较长,是因为开了opcache
的原因,会写入缓存。但这里的opcache
写缓存,要比Round 2
那个只开启opache
扩展要快很多,这都是swoole
的功劳。
结语
我又测试了一下,单独只启用swoole
扩展,不启用opcache
,发现响应时间和两个扩展都开启的响应时间一样。也就是说,有了swoole
后,opcache
就没用了?这个还得请各位大佬指点了。这里简单的做个对比:
通过实践对比,发现同时开启opcache
和swoole
扩展,是响应时间最快的。
其他问题
- PHP-FPM进程管理,为什么会创建master进程?不科学呀
感谢
感谢 @Hesunfly 的解答。有时在命令行中用
php -i
模式查看扩展信息,和在页面中使用phpinfo()
查看的扩展信息会有不一致的情况。这里引用下 @Hesunfly 原话:
「有的发行版确实是cli
和fpm
的配置公用的,例如 mac 使用 brew 安装的 php 就是只有一个php.ini
。 但是我在 centos 和 ubuntu 下安装的一般是区分了cli
和fpm
的。」
以上是如何让你的Laravel在15毫秒内返回一个"hello world!"的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Laravel9和CodeIgniter4的最新版本提供了更新的特性和改进。Laravel9采用MVC架构,提供数据库迁移、身份验证和模板引擎等功能。CodeIgniter4采用HMVC架构,提供路由、ORM和缓存。在性能方面,Laravel9的基于服务提供者设计模式和CodeIgniter4的轻量级框架使其具有出色的性能。在实际应用中,Laravel9适用于需要灵活性和强大功能的复杂项目,而CodeIgniter4适用于快速开发和小型应用程序。

比较Laravel和CodeIgniter的数据处理能力:ORM:Laravel使用EloquentORM,提供类对象关系映射,而CodeIgniter使用ActiveRecord,将数据库模型表示为PHP类的子类。查询构建器:Laravel具有灵活的链式查询API,而CodeIgniter的查询构建器更简单,基于数组。数据验证:Laravel提供了一个Validator类,支持自定义验证规则,而CodeIgniter的验证功能内置较少,需要手动编码自定义规则。实战案例:用户注册示例展示了Lar

对于初学者来说,CodeIgniter的学习曲线更平缓,功能较少,但涵盖了基本需求。Laravel提供了更广泛的功能集,但学习曲线稍陡。在性能方面,Laravel和CodeIgniter都表现出色。Laravel具有更广泛的文档和活跃的社区支持,而CodeIgniter更简单、轻量级,具有强大的安全功能。在建立博客应用程序的实战案例中,Laravel的EloquentORM简化了数据操作,而CodeIgniter需要更多的手动配置。

Laravel - Artisan 命令 - Laravel 5.7 提供了处理和测试新命令的新方法。它包括测试 artisan 命令的新功能,下面提到了演示?

在选择大型项目框架时,Laravel和CodeIgniter各有优势。Laravel针对企业级应用程序而设计,提供模块化设计、依赖项注入和强大的功能集。CodeIgniter是一款轻量级框架,更适合小型到中型项目,强调速度和易用性。对于具有复杂需求和大量用户的大型项目,Laravel的强大功能和可扩展性更合适。而对于简单项目或资源有限的情况下,CodeIgniter的轻量级和快速开发能力则更为理想。

对于小型项目,Laravel适用于大型项目,需要强大的功能和安全性。CodeIgniter适用于非常小的项目,需要轻量级和易用性。

比较了Laravel的Blade和CodeIgniter的Twig模板引擎,根据项目需求和个人偏好进行选择:Blade基于MVC语法,鼓励良好代码组织和模板继承。Twig是第三方库,提供灵活语法、强大过滤器、扩展支持和安全沙箱。

Laravel - Artisan Console - Laravel 框架提供了三种主要的命令行交互工具,即:Artisan、Ticker 和 REPL。本章详细介绍了 Artisan。
