tp5.1使用总结(6):有效提高tp框架的性能

前言

    框架并不是应用性能的瓶颈,架构设计、数据库和人才是。框架出于通用性的考虑,不会特意针对某个应用做深入优化,但提供了一些可能的手段和配置参数让你进行针对性的调优。

    正确的性能优化:架构优化、数据库优化、代码优化。

    架构优化涉及到技术、存储、网络、服务的选型和架构,尽量使用成熟和现代的开发框架和设计模式。前后端完全分设计,便于前后端的独立优化,也更加便于测试工作。

    如果你的应用遇到了性能瓶颈,这个时候要考虑的就是优化架构而不是优化代码本身,因为架构层面的优化效果往往最显著。

    下面罗列的是tp5.1应用开发中一些性能优化手段和注意事项。


一:关闭调试模式

    正式环境:关闭调试模式。一是性能考虑,二是基于安全因素。通过环境变量来配置关闭调试模式,部署后不需要更改任何配置文件。

    因为调试模式影响日志记录信息、额外的调试信息和缓存失效,关闭调试模式能带来一定性能提升。


二:使用单模块

    1:为什么要使用单模块?

        使用多模块会增加文件的I/O开销和额外的配置及检查,可以使用控制器分级来解决控制器过多的问题。

    

    2:使用单模块的好处?

        在部署到swoole的时候,可以充分体现单一模块的性能优势,因为应用文件一旦启动服务,就会载入内存,而模块的相关文件则会每次请求重新加载。


三:路由设计及优化

    1:使用方法注册路由

        在定义路由规则时,不要使用数组方式,尽量使用方法注册路由,并且多使用路由分组(或者资源路由)。分组路由可以减少路由的匹配次数,从而提升路由性能。如果你有多个域名的不同路由,也要按域名规划使用路由。


    2:尽量在路由中进行当前路由的数据验证和权限检查。

        尽可能设计在路由中进行当前路由的数据验证和权限检查等操作,一方面比较清晰,另外一方面可以尽量把验证操作提前,而不必等到控制器执行。


    3:开启路由延迟解析

        a, 在分组比较多的情况下,开启路由的延迟解析

        阿群博客

        

        b, 如果在同一个分组下面有比较多的路由规则,合并路由规则

        阿群博客


    4:get请求路由,设置路由请求缓存

    阿群博客


    5:部署阶段,开启路由缓存

    阿群博客


四:查询优化

    1:合理使用查询缓存

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

        阿群博客

        关联查询,cache方法是主模型的数据缓存,用Cache类的remember方法进行方便的数据缓存

        阿群博客

    

    2:不要过于纠结查询次数

        尽量减少查询次数是出于性能考虑,但不是必须,使用最少的查询不代表性能一定最高,一个复杂的join不见得有两次简单的查询高,而使用简单的查询反而更清晰易懂,并且方便进行数据查询缓存。


    3:正确使用模型关联

        对于一些复杂的设计来说使用模型关联显得比直接用Db更加简单,如使用关联预载入就可以避免N+1查询问题

        阿群博客


    4:大量数据处理优化

        大量数据处理操作使用chunk分批处理方法

        阿群博客

        对于内存开销比较大的应用,在做大量数据查询和处理,使用cursor方法,可以用php生成器特性,减少内存占用

        阿群博客

        注意:设计到对大量数据的处理,包括数据迁移、批量更新,尽量使用命令行指令运行,否则会因超时而中断。

    

    5:善用数据集方法避免多次查询

        通过数据集的方法完成的子集或者排序操作不要再次查询

        阿群博客

   

     6:字段缓存

        在部署后生成字段缓存,可以减少每次数据表的字段查询开销

php think optimize:schema


五:配置和公共文件缓存

    每次在应用初始化或者模块初始化的时候会有一定的I/O开销,如果已经开启Opcache的话对性能影响甚微,可以通过命令行生成配置缓存。

    1:生成应用配置缓存

php think optimize:config

    2:生成模块配置缓存

php think optimize:config index

     ps:一旦配置或者公共文件发生变化,必须重新生成。


六:生成类库映射

    类库映射可以提升类库的自动加载性能。

    1:系统类库和应用类库的类库映射(包含extend目录下的类库)

php think optimize:autoload

    2:vendor目录下的类库

#该命令把PSR-0 和 PSR-4转换为一个类映射表
composer dump-autoload -o

            

阿群博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论