php 提高-帮助您有效提升ThinkPHP应用性能!

2023-12-03 0 7,329 百度已收录

下面thinkphp框架教程专栏将为您介绍如何有效提升ThinkPHP的应用性能。 希望对有需要的同事有所帮助!说到应用程序性能,涉及到的方面太多了。 有关于服务器优化和后端优化的文章。

下面thinkphp框架教程专栏将为您介绍如何有效提升ThinkPHP的应用性能。 希望对有需要的同事有所帮助!

当谈到应用程序性能时,涉及到的方面太多了。 关于服务器优化和后端优化,网上有很多文章,这里不再赘述。 本文仅简单介绍ThinkPHP 5.1应用开发(尤其是部署环境)中可能涉及到的一些性能优化方法和注意事项。

推荐:《ThinkPHP 5.1 全球首发视频教程》

首先指出一件事:应用性能的困境不是框架,而是架构设计、数据库和人才。 框架在设计之初,为了通用性,不会专门针对某个应用进行深度优化,而是提供了一些可能的手段和配置参数,供您进行针对性的调优。 下面列出了一些可能的优化。 开发过程中可以根据情况调整手段。

正确的性能优化步骤应该是:架构优化、数据库优化、代码优化。

1、架构优化

架构优化涉及技术、存储、网络、服务的选型和架构。 尝试使用成熟、现代的开发架构和设计模式。 前端与前端完全分离设计,方便前端与前端独立优化,也让测试变得更加容易。

如果你的应用遇到性能困难,此时你需要考虑的是优化架构而不是优化代码本身,因为架构层面的优化效果往往是最明显的。

2.关闭调试模式

不要忘记在部署环境中关闭调试模式。 这不仅是出于性能原因,也是出于安全原因。 实际上,建议通过环境变量来配置调试模式,这样部署后就不需要修改配置文件了。

由于调试模式会影响日志信息、附加调试信息以及缓存失效,因此关闭调试模式可以带来一定的性能提升。

3. 使用单一模块

使用多模块功能将减少文件I/O开销以及额外的配置和检测。 如果没有必要,在规划应用架构时尽量考虑使用单个模块,然后使用控制器层次结构来解决控制器过多的问题。 。

使用单个模块的性能优势在部署到swoole时可以更充分的展现出来,因为应用程序文件一旦启动服务就会被加载到显存中,每次启动都会重新加载该模块的相关文件要求。

4. 路由设计与优化

定义路由规则时php 提高,不要使用链表方法,尽量使用注册路由的方法,多使用路由组(或资源路由)。 组路由可以减少路由匹配的次数,从而提高路由性能。 如果您对多个域名有不同的路由,您还应该计划使用基于域名的路由。

尝试在路由中设计当前路由的数据验证、权限检测等操作。 一方面,比较明确。 另一方面php 提高,可以尽早进行验证操作,而无需等待控制器执行。

当报文较多时,启用路由延迟解析。

// 开启路由延迟解析
'url_lazy_route'    => true,

如果同一个组下有多个路由规则,建议合并路由规则。

// 合并分组路由规则
'route_rule_merge'       => true,

对于带有 GET 请求的路由,您可以设置路由的请求缓存

// 定义GET请求路由规则 并设置3600秒的缓存
Route::get('new/:id','News/read')->cache(3600);

在部署阶段,可以开启路由缓存。

// 开启路由缓存(仅部署模式有效)
'route_check_cache'	=>	true,

5. 查询优化

首先,保持良好的开发习惯,了解Db类和模型的正确用法。 对于数据库本身的性能优化,可以参考MySQL性能优化的21条最佳经验。 下面主要是框架中数据查询相关的优化策略。

正确使用查询缓存

尽量减少每次请求的查询次数,对于实时性要求不高的数据查询,合理规划数据查询缓存(优先使用redis缓存)。

Blog::where('id', 10)
    ->cache(30)
    ->find();

如果使用关联查询,则cache方法只能用于主模型的数据缓存,但可以使用Cache类的remember方法来方便地进行数据缓存。

$users = Cache::remember('users', function(){
    return User::with('profile')
        ->where('status', 1)
        ->select();},30);

不用太担心查询数量

最小化查询数量是出于性能原因,但不是必需的。 使用最少的查询并不一定意味着最高的性能。 一个复杂的JOIN查询的性能可能没有两个简单查询那么高,但是使用简单查询更清晰易懂,而且更方便缓存数据查询。

正确使用模型关联

不要总认为模型的性能一定低于Db类。 框架的ORM查询设计得到了合理的优化。 如果正确使用模型,仍然可以有出色的性能,而且比 Db 查询方便得多。

特别是对于一些复杂的设计,使用模型关联变得比直接使用 Db 更容易。 例如,使用关联预加载查询可以防止N+1查询问题。

User::with(['profile','book'])->select();

如果自己使用Db类来实现的话,会费时费力,而且性能也可能不会优秀。

海量数据处理优化

对于处理大量数据,请使用块批处理。

User::chunk(100, function($users) {
    foreach ($users as $user) {
        // 处理数据
    }});

对于需要大量显存的应用程序,在进行大量数据查询和处理时,使用游标方法可以利用PHP的生成器特性来减少显存的使用。

$cursor = User::cursor();foreach($cursor as $user){
    // 处理数据
    }

你会发现,无论用户数据是10000条还是100000条,内存消耗都没有明显变化。

当涉及到大量数据的处理,包括数据迁移、批量更新时,尽量使用命令行指令来运行,否则会因超时而中断。

充分利用数据集,避免多次查询

对于可以通过数据集完成的取子集或排序操作,不要再次查询,例如:

// 模型查询返回数据集对象
$users = User::select();
// 按照用户的成绩由高到低排序
$list1 = $users->order('score', 'desc');
// 筛选成绩在90分以上的用户
$list2 = $users->where('score', '>=', 90);

字段缓存

部署后使用以下命令生成主键缓存,可以减少每个数据表的主键查询成本。

php think optimize:schema

更多使用方法请参考数据数组缓存官方指南。

6.0 配置和公共文件缓存

每次初始化应用程序或初始化模块时,都会有一定的I/O消耗。 如果OpCache已经开启,对性能影响不大。 如果你关心的话,还可以通过命令行指令生成配置缓存(包括相关的公共的)。 文件和各种定义文件)。

生成应用程序配置缓存:

php think optimize:config

生成模块配置缓存:

php think optimize:config index

注意:配置或公共文件一旦更改,必须重新生成。

7.0 生成通用映射

类库映射可以提高手动加载泛型的性能。 使用以下说明生成系统泛型和应用程序泛型(包括扩展目录中的泛型)的泛型映射。

php think optimize:autoload

vendor目录中的泛型可以使用composer的dump-autoload指令来优化加载性能。

composer dump-autoload -o

该命令将PSR-0和PSR-4转换为类映射表,以提高类加载速度。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php 提高-帮助您有效提升ThinkPHP应用性能! https://www.wkzy.net/game/199330.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务