在处理完程序员自身写代码习惯层面上的问题后,在项目代码要跑的环境上也会对项目造成很大的影响,当然这部分需要强大的资金作为后盾(服务器中软、硬件)
1、会对项目性能造成影响的外部原因如下:
在硬件上,硬盘的类型影响读写文件的速度,当然现在SSD硬盘越来越便宜,对于服务器上更换SSD硬盘会使读写文件操作有很大提升;其次,内存的大小也会影响程序跑的是否流畅,我们都知道,非关系型数据库等缓存系统都会直接写内存,那么硬件方面的内存也就会影响到缓存技术的使用
在软件上,数据库是基于文件系统的,虽然我们使用的数据库按分类应该属于软件,这就需要数据库服务商对我们使用的数据库进行更新,维护及性能优化,数据库软件越好,内部处理数据时间越短
那么在实际开发过程中,我们往往会把服务器上的空间都留给PHP来进行跑项目,至于硬盘,内存,数据库等全部都迁移到项目代码以外的服务器进行管理,这就意味着我们PHP在进行读写文件,操作数据库,操作缓存等都需要进行连接外部的服务器进行,这样,PHP运行的空间大了,但是又会出现一个问题,网络!不仅要考虑到网络是否稳定,还要考虑带宽的大小,网络的类型
2、PHP的开销次序:
读写内存<读写数据库<读写磁盘<读写网络数据
其中建立缓存技术貌似是最佳的选择了,当然,缓存中的数据也是需要从基于文件系统的数据库来储存的,所以对于数据库的选择也是必不可少的,最后对于网络数据的请求,实际开发中会大量用到,虽然开销大,但是实际开发中很多情况下我们无法不适用网络接口来进行获取数据
对于读写磁盘,只能说尽可能减少对文件的操作了,上篇文章已经讲述过了,PHP不太适合密集型业务的处理,尽量减少做PHP不适合的工作,没有那金刚钻,不揽那瓷器活,做好自己优势部分足以,我们可以使用扩展或者中间件来进行解决
3、读写网络数据造成性能低的原因及处理方案
对于网络数据的请求,其实是通过socket来进行,网络情况的好坏会影响到请求是否能跑通,数据是否能按时返回,其次,数据提供方数据是否正确,符合我们的需求,是否还需要进行处理都会加大请求的时间
那么,针对这部分问题,我们在使用网络请求的时候,尽量较少PHP请求的次数,并且在请求过程中一定要设置请求时间,通常情况下我们会设置连接超时时间,读超时时间,写超时时间来减少请求时间的总体请求时间的长短;其次,将网络请求并行化处理,通过PHP自带的curl_multi,或者通过扩展来实现(swoole),将排队请求并行处理。但会出现一个问题,数据返回时间会以时间最长的支路为主。