有效提高thinkphp的应用性能的几点建议

author author     2023-04-30     624

关键词:

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

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

架构的优化需要根据自身运营情况来调整,切忌不可按图索骥提前优化,反而容易得不偿失,导致技术成本提高甚至“负优化”

部署环境千万不要忘记关闭调试模式,这不仅仅是出于性能考虑,更多是基于安全因素。事实上,建议通过环境变量来配置关闭调试模式,这样部署后不需要更改任何配置文件。

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

使用多模块功能会增加文件的 I/O 开销和额外的配置及检查,如非必要在规划你的应用架构的时候尽量考虑使用单一模块,然后使用控制器分级来解决控制器过多的问题。

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

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

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

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

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

对于 GET 请求的路由,可以设置路由的请求缓存。

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

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

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

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

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

不要总是以为模型的性能一定比 Db 类低,框架的ORM查询设计经过了较为合理的优化,正确使用模型一样可以有出色的性能,而且比 Db 查询要方便很多。

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

如果用 Db 类自己实现的话,费时费力,性能还不一定优。

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

你会发现用户数据不论是1万还是10万级别,内存开销并没有大的变化。

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

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

利用下面指令在部署后生成字段缓存,可以减少每次数据表的字段查询开销。

注意:一旦数据库的表结构发生变化,必须重新生成。

每次在应用初始化或者模块初始化的时候会有一定的 I/O 开销,如果已经开启 OpCache 的话对性能影响甚微,如果比较在意的也可以通过命令行指令生成配置缓存(包括相关的公共文件和各种定义文件)。

生成应用配置缓存:

生成模块配置缓存:

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

类库映射可以提升类库的自动加载性能,使用下面的指令可以生成系统类库和应用类库的类库映射(包括 extend 目录下的类库)。

vendor 目录下的类库可以使用 composer 的 dump-autoload 指令优化加载性能。

该命令把 PSR-0 和 PSR-4 转换为一个类映射表,来提高类的加载速度。

关于java性能优化的几点建议,看完豁然开朗

目录一、冒泡排序二、选择排序三、插入排序四、快速排序五、归并排序六、希尔排序七、堆排序八、基数排序(桶排序)九、递归十、链表十一、栈十二、队列十三、二叉树总结:心得体会既然选择这个行业,... 查看详情

学习springioc的几点建议

写在前面的话Spring是一个轻量级的企业级应用开发框架,经年累月的迭代spring已经包含了很多模块。其中包括springBoot,springframework,springdata,springcloud,博主想写一点关于spring全家桶的东西包括spring全家桶技术应用,如何看spring官... 查看详情

关于java性能优化的几点建议,github标星3.2k(代码片段)

一、Spring面试题1、Spring在ssm中起什么作用?答:Spring:Spring轻量级框架。作用:Bean工厂,用来管理Bean的生命周期和框架集成。Spring框架的两大核心:①.IOC/DI(控制反转/依赖注入):把dao依赖注入到servic... 查看详情

关于未来趋势的几点预测:

...内能源重要的供应形式,微电网和大电网之间会形成有效的互为补充,在“人造太阳”发明之前,光伏发电会成为新能源中 查看详情

关于未来趋势的几点预测:

...内能源重要的供应形式,微电网和大电网之间会形成有效的互为补充,在“人造太阳”发明之前,光伏发电会成为新能源中 查看详情

listview优化的几点建议

1、根据android官方文档的说明:在Adapter中使用ViewHolder(在android5.0materialsdesign中的组件RecyclerView已经体现),在getView方法中复用convertView,设置tag。自己的部分代码片段:@OverridepublicViewgetView(intposition 查看详情

关于菜鸟养鱼的几点建议

养了半年的鱼,算起来还是菜鸟中的菜鸟,然而确有几点亲身体会出来的建议,别的地方没有看到,入了很多的坑,记录在此,后续跟进修改:一.确实安心养的要买设备,一步到位,千万不要相信网上的自己DIV体验感觉很好。... 查看详情

关于异常处理的几点建议

一、原则        捕获异常必须处理异常,要么转换成对应文案返回给调用方,要么显式抛出异常给调用方,提醒调用方捕获处理,显式抛出异常时,源异常信息和异常Trace栈信息必须打印出来或者抛... 查看详情

工作上的几点建议-转载

2017-08-1119:16修改样式,润饰句子。我认为这些建议不仅仅是针对工作上的,生活,学习等方面同样适用。我觉得主要地从根本上来讲,给你以下几个建议:努力 工作要努力,随随便便过日子过四五年也是过,稍微努力的过四... 查看详情

入门:eclipse转idea的几点建议

此篇博文主要有以下目的:  1、给从Eclipse想转IDEA试水的童鞋一些快速入门的建议;  2、个人总结经验,以便后面学习、反思、总结;  3、不站队评价两款IDE优劣,只为共同学习进步。 好了,到目前为止,我已经扯... 查看详情

程序员找工作的几点建议(代码片段)

作为一名程序员,在找工作时,踩过很多坑,整理了几点建议,作为前车之鉴。1.整理简历(1)写明擅长的技术,熟悉的语言,框架等(2)整理做过的项目时,写清楚技术要点,突出自己在其中的角色。项目中涉及的知识点,好好整... 查看详情

gpu运行tensorflow的几点建议

1.在运行之前先查看GPU的使用情况:指令:nvidia-smi备注:查看GPU此时的使用情况或者指令:watchnvidia-smi备注:实时返回GPU使用情况2.指定GPU训练:方法一、在python程序中设置:代码:os.environ[‘CUDA_VISIBLE_DEVICES’]=‘0&rsquo... 查看详情

关于日志打印的几点建议以及非最佳实践

  日志的打印在软件开发过程中必不可少,一般分为两个大类:操作日志系统日志  操作日志,主要针对的是用户,例如在Photoshop软件中会记录自己操作的步骤,便于用户自己查看。  系统日志,主要针对的是软件开发人... 查看详情

c#提升性能的几点提示和技巧(代码片段)

C#性能提示和技巧在Raygun[1],我们是一群非常懂多种语言的开发人员。Raygun的各个部分使用不同的语言和框架编写-最好的工作方式。鉴于大量的C#和我们正在处理的数据的爆炸性增长,在不同的时间需要进行一... 查看详情

一位高级程序员的几点建议(转帖)

  我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#,VB.Net这样的大部头,这让我感到非常痛心。而许多搞不清指针是... 查看详情

研究生如何学习与科研的几点建议——来自一枚菜博的愚见

对刚入学研究生的如何学习与研究的几点建议1、如何高效科研和学习2、习惯的养成:每天睡觉前坚持做三件事3、研究生做人应该注意些什么4、博士答辩过后的反思1、如何高效科研和学习1)向前辈学习、利用师兄师姐... 查看详情

研究生如何学习与科研的几点建议——来自一枚菜博的愚见

对刚入学研究生的如何学习与研究的几点建议1、如何高效科研和学习2、习惯的养成:每天睡觉前坚持做三件事3、研究生做人应该注意些什么4、博士答辩过后的反思1、如何高效科研和学习1)向前辈学习、利用师兄师姐... 查看详情

写代码复现论文的几点建议!(代码片段)

不知道大家有时候会不会有一个很好的idea,但是就是写不出来具体的代码,或者写的代码不够高效。其实这种情况所有人都会遇到:场景1:比赛期间有一个新特征的方法,但是用pandas实现太慢,时间复杂... 查看详情