目录
缓存配置文件
路由缓存
类映射加载优化
优化 composer 的自动加载
JIT 编译器(即时编译器)
使用更快的缓存和会话驱动
不要低估通过优化查询语句带来的查询速度的提升
缓存查询结果
首页 php框架 Laravel 提高Laravel应用性能

提高Laravel应用性能

Jun 21, 2019 pm 04:31 PM
laravel 应用性能

提高Laravel应用性能

使用Laravel做开发是高效而愉悦的体验。
通常,当你准备部署应用的时候,你可能会意识到应用也许会在真实环境下表现不佳。

需要明白的是,没有银弹。通过努力去对应用的每个细节完成所有的优化,速度可能会变慢,但使用下面这些技巧会让你感到恰到好处。

缓存配置文件

laravel 的配置项分布在数十个配置文件中,在每次的请求中都将每个文件 including 进来很消耗性能。为了将所有的配置文件都合并为一个,可以使用:

php artisan config:cache
登录后复制

记住修改了配置文件后不会影响已有的配置文件缓存。为了刷新缓存,可以再次上述的命令。如果你想完全清除缓存,执行:

php artisan config:clear
登录后复制

路由缓存

在laravel中,路由也需要昂贵的开销。用以下命令缓存 routes.php 文件:

php artisan route:cache
登录后复制

请注意,它不适用于闭包。 如果你正在使用闭包,这是一个很好的机会将它们移动到控制器中,因为 artisan 命令在尝试编译绑定到闭包的路径而不是正确的控制器方法时会抛出异常。
与配置缓存相同,对 routes.php 的任何更改都不会有任何影响。 要刷新缓存,请在每次更改路径文件时运行上面的命令。 要完全清理干净路由缓存,请运行以下命令:

php artisan route:clear
登录后复制

类映射加载优化

在一个中型项目中,存在数百个 PHP 源文件是很正常的事情,由于良好的编程习惯,我们会把代码做一些分离,每一个 php 文件都有自己的职责。当然,这并非没有缺点,Laravel 必须为每一次请求都加载这数百个文件,这是一件很消耗性能的事情。

因此,一个比较好的办法是声明哪些文件是用户每一次请求(如:服务提供者,中间件等)都需要载入的 ,然后将这些需要每次加载的文件写入同一个文件中,减少 include 文件的数量。

这类似于 javascript 将文件合并为一个没有区别 (webpack, gulp),会减少游览器会服务器的请求。

如果需要添加其他的源文件,可以在 config / compile.php 的files key中声明。

当你把需要为每个请求都加载的文件设置好之后,它们就会写入同一个文件中,减少加载文件的性能消耗

php artisan optimize --force
登录后复制

优化 composer 的自动加载

这不仅适用于 laravel,而且适用于任何使用 composer 的应用程序。

我将首先解释 PSR-4 自动加载器的工作原理,然后向您展示应该运行什么命令来优化它。如果您对了解 composer 如何工作不感兴趣,我建议您直接跳到关于控制台命令的段落处。

当您向 compsoser 请求 App\Controllers\AuthController 类时,它首先在类映射中搜索直接关联。classmap 是一个由类和文件组成的 1 到 1 关联的数组。当然,由于您没有手动将 Login 类及其相关文件添加到类映射中,composer 将继续在命名空间中搜索。

因为 App 是一个 PSR-4 命名空间,默认情况下是与 Laravel 一起提供的,并且与 app/ 文件夹相关联,所以 composer 将尝试使用基本的字符串操作过程将 PSR-4 类名转换为文件名。最后,它猜测 App\Controllers\AuthController 必须位于 AuthController.php 文件中,它位于 Controllers/ 文件夹中,恰巧的是,该文件夹正好位于名称空间文件夹中,即 app/

所有这些艰苦的工作只是为了得到 App\Controllers\AuthController 类存在于 app/Controllers/AuthController.php 文件中。为了让 composer 扫描整个应用程序并创建类和文件的直接 1 对 1 关联,运行以下命令:

composer dumpautoload -o
登录后复制

请记住,如果您已经运行了 php artisan optimize --force,那么您就不必再运行这个函数了。因为优化命令已经告诉 composer 创建一个优化的自动加载器。

JIT 编译器(即时编译器)

PHP 并不是天然就被计算机理解的。你不能把它编译为字节码然后让计算机运行。PHP 必须要经过一个中介,像是 Zend 引擎,它会解释 PHP 文件并执行相应的 C 例程。如你所想,它的速度很慢。每次你的服务器执行一个 PHP 文件,都必须把它转换成 tokens —— 这个过程由 AST 解析器完成并解释。不幸的是,解析器必须每次都编译 PHP 文件,即使它每次都得到相同的结果。

为了让你的应用速度更快,你需要一个 编译一次,终生运行 的方法,而这就是一个 JIT 编译器所做的事情。

对于 Laravel 所推荐使用的 JIT 编译器是 HHVM,由 Facebook 创立并广泛使用。Wikipedia、Etsy 和其他上千项目也在使用它。

使用更快的缓存和会话驱动

将 session 保存在文件中是种足够快速而又优雅的方法,自 PHP 开始的时代就在这样做了。但是如果你追求性能,那么文件系统就是你需要注意的一件事,因为它很慢。一种更好的做法是将 cache 和 session 存储在内存中,因为它提供了一种高效读写数据的方式。幸运的是,laravel 支持一些基于内存的 cache 和 session 驱动。

我的建议是使用 memcached 作为 cache 和 session 的驱动,但你可以选择任何你喜欢的,只要它是基于内存工作的。

要更改 session 驱动,需要检查以下文件中「driver」项:

app/config/session.php
登录后复制

要更改 cache 驱动,需要检查以下文件中「driver」项:

app/config/cache.php
登录后复制

不要低估通过优化查询语句带来的查询速度的提升

就像你看到的,大部分优化都是在不同的层面使用缓存。但当面临数据库优化时,你不应该依赖缓存。缓存应是优化查询的最后手段。

缓存查询结果

MySQL 不会替你做这件事,也不如你自己做的好。当然了你肯定不会把应用中每个查询的结果都做缓存,看看数据统计,在应用程序中那些高频率的查询语句,它们真的有必要被频繁地执行?每 15 分钟运行一次然后把相同的结果提供给用户
不是更好吗?

在查询构造器中移除了 removing方法是件好事(它曾经是个很好的功能,但不够好 - 人们似乎高估了它的作用)。然后你可以更多地使用 Cache::remember 方法,就像这样:

$posts = Cache::remember('index.posts', 30, function()
{
    return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();
});
登录后复制

更多Laravel相关技术文章,请访问Laravel教程栏目进行学习!

以上是提高Laravel应用性能的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1252
24
laravel入门实例 laravel入门实例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用于轻松构建 Web 应用程序。它提供一系列强大的功能,包括:安装: 使用 Composer 全局安装 Laravel CLI,并在项目目录中创建应用程序。路由: 在 routes/web.php 中定义 URL 和处理函数之间的关系。视图: 在 resources/views 中创建视图以呈现应用程序的界面。数据库集成: 提供与 MySQL 等数据库的开箱即用集成,并使用迁移来创建和修改表。模型和控制器: 模型表示数据库实体,控制器处理 HTTP 请求。

解决 Craft CMS 中的缓存问题:使用 wiejeben/craft-laravel-mix 插件 解决 Craft CMS 中的缓存问题:使用 wiejeben/craft-laravel-mix 插件 Apr 18, 2025 am 09:24 AM

在使用CraftCMS开发网站时,常常会遇到资源文件缓存的问题,特别是当你频繁更新CSS和JavaScript文件时,旧版本的文件可能仍然被浏览器缓存,导致用户无法及时看到最新的更改。这个问题不仅影响用户体验,还会增加开发和调试的难度。最近,我在项目中遇到了类似的困扰,经过一番探索,我找到了wiejeben/craft-laravel-mix这个插件,它完美地解决了我的缓存问题。

Laravel如何学习 怎么免费学习Laravel Laravel如何学习 怎么免费学习Laravel Apr 18, 2025 pm 12:51 PM

想要学习 Laravel 框架,但苦于没有资源或经济压力?本文为你提供了免费学习 Laravel 的途径,教你如何利用网络平台、文档和社区论坛等资源,从入门到掌握,为你的 PHP 开发之旅奠定坚实基础。

laravel用户登录功能 laravel用户登录功能 Apr 18, 2025 pm 12:48 PM

Laravel 提供了一个全面的 Auth 框架,用于实现用户登录功能,包括:定义用户模型(Eloquent 模型)创建登录表单(Blade 模板引擎)编写登录控制器(继承 Auth\LoginController)验证登录请求(Auth::attempt)登录成功后重定向(redirect)考虑安全因素:哈希密码、防 CSRF 保护、速率限制和安全标头。此外,Auth 框架还提供重置密码、注册和验证电子邮件等功能。详情请参阅 Laravel 文档:https://laravel.com/doc

laravel框架安装方法 laravel框架安装方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了详细分步说明,指导读者如何轻松安装 Laravel 框架。Laravel 是一个功能强大的 PHP 框架,它 упростил 和加快了 web 应用程序的开发过程。本教程涵盖了从系统要求到配置数据库和设置路由等各个方面的安装过程。通过遵循这些步骤,读者可以快速高效地为他们的 Laravel 项目打下坚实的基础。

laravel有哪些版本 laravel新手版本选择方法 laravel有哪些版本 laravel新手版本选择方法 Apr 18, 2025 pm 01:03 PM

在面向初学者的 Laravel 框架版本选择指南中,本文深入探讨了 Laravel 的版本差异,旨在协助初学者在众多版本之间做出明智的选择。我们将重点介绍每个版本的关键特征、比较它们的优缺点,并提供有用的建议,帮助新手根据他们的技能水准和项目需求挑选最合适的 Laravel 版本。对于初学者来说,选择一个合适的 Laravel 版本至关重要,因为它可以显著影响他们的学习曲线和整体开发体验。

laravel怎么查看版本号 laravel查看版本号方法 laravel怎么查看版本号 laravel查看版本号方法 Apr 18, 2025 pm 01:00 PM

Laravel框架内置了多种方法来方便地查看其版本号,满足开发者的不同需求。本文将探讨这些方法,包括使用Composer命令行工具、访问.env文件或通过PHP代码获取版本信息。这些方法对于维护和管理Laravel应用程序的版本控制至关重要。

laravel和thinkphp的区别 laravel和thinkphp的区别 Apr 18, 2025 pm 01:09 PM

Laravel 和 ThinkPHP 都是流行的 PHP 框架,在开发中各有优缺点。本文将深入比较这两者,重点介绍它们的架构、特性和性能差异,以帮助开发者根据其特定项目需求做出明智的选择。

See all articles