提高PHP性能的方法

下面的文字从Dustin Whittle的 Scaling PHP in the real world 摘抄而来。原文作于2013年,有些信息可能不是那么新了。 https://speakerdeck.com/dustinwhittle

性能的提高,对于高并发访问量的应用来说,至关重要。本文主要是对上文提到的各种方法进行进一步的解释。

Opcode Cache
后台用queue来处理工作 (doing work in the background with queues)
部署用HTTP caching (Varnish/Squid) 和反向代理缓存
分布式数据缓存: Memcached 或者 redis
采用合适的工具
Xdebug+ Valgrind + WebGrind
AppDynamics
重视架构

具体的小贴士:
* 升级到最新版本的PHP
* 用Nginx + PHP-FPM
* 使用opcode cache
  PHP是解释性语言,每次一个PHP页面请求处理的时候,服务器都需要解释PHP文件,编译成opcode,然后执行。 opcode 缓存把编译好的opcode保存到共享内存中,这样就避免了重复编译,减少了cpu的开销(对于瓶颈是cpu的应用来说,性能提升比较明显)。编译只需要在第一次请求的时候执行。多种方式可以做opcode 缓存: APC, Zend Opcache(https://pecl.php.net/package/ZendOpcache), XCache
 
* 使用自动加载, 避免了多require或者include的解析 spl_autoload_register()
    bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )
* 优化会话, 把缺省的文件保存形式转为数据库保存,并用缓存起来(memcached, redis等)
  限制会话数据大小为4M,把所有的数据保存在一个cookie中。
* 利用好内存数据缓存。
    Doctrine ORM for PHP 有基于memcached 和redis的缓存机制。缓存可以是某个页面,应用的配置文件, 或者网络服务的响应。
     http://memcached.org/
     http://redis.io
     http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html
* 在后台用一个队列来处理阻塞性工作
    Resque for PHP https://github.com/chrisboulton/php-resque
    Gearman
    RabbitMQ
    Kafka
    Beanstalkd
    ZeroMQ
    ActiveMQ
    http://kamisama.me/2012/10/09/background-jobs-with-php-and-resque-part-2-queue-system/
    http://kamisama.me/2012/10/12/background-jobs-with-php-and-resque-part-4-managing-worker/
* 使用HTTP缓存
   用Varnish作为反向代理
   http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html
   http://www.mnot.net/cache_docs/
*  优化你的框架
* 数据库 分片
× 学习如何分析PHP 代码,提高性能
    xdebug  http://xdebug.org/
    WebGrind https://github.com/jokkedk/webgrind
    XHprofi
    Appdynamic  http://appdynamics.com
    Valgrind  http://valgrind.org/info/tools.html#callgrind
    
资料来源
https://speakerdeck.com/dustinwhittle

时间: 2024-10-10 14:10:42

提高PHP性能的方法的相关文章

最新OCR文字识别软件提高OCR性能的方法

新一代ABBYY FineReader OCR文字识别软件在处理文件时,能够快速.准确的进行文件扫描和转换,并提供智能工具以增加工作效率,使企业和个人生产力在OCR性能上显着增强至新水平,包括新的黑白模式,提高了文件的处理速度.在精简的文件转换过程中,FineReader可以进一步提高其独特的能力,重建原生的多页文件格式,还支持最流行的格式轻松创建电子图书.此外,它扩展其业界领先的语言支持,使获奖的解决方案可用于新的全球市场. "ABBYY FineReader可以帮助人们在较短的时间内完成事半

一些微小提高sql性能的方法

set noccount on忽略计数(隐藏1行受影响) with(nolock)忽略事务锁(跨域的时候应用nolock) 避免在WHERE子句中使用in,not in,or 或者having.可以使用 exist 和not exist代替 in和not in. 不要以字符格式声明数字,要以数字格式声明字符值:避免全表扫描SELECT emp.ename, emp.job FROM emp WHERE emp.empno = 7369;不要使用:SELECT emp.ename, emp.job

性能测试(六)前端性能优化方法

日常工作和生活中,我们经常利用浏览器去打开一些URL来获取我们所需的资源,那么作为一个开发者或者性能测试工程师,如何去测试并提升优化前端的性能呢? 一.浏览器打开URL和方式和过程 不同浏览器工作方式不完全一样,大体来讲,浏览器的核心是浏览器引擎:不同浏览器对W3C的规范支持不尽相同,在具体功能的实现上也不完全一致. 1.连接到URL所在的服务器 用户在浏览器地址栏输入URL,打开URL时,浏览器首先寻找该URL所在的服务器.通过向DNS服务器查询,获取该URL所在网站的IP地址,然后浏览器向该

Android提高UI性能技巧

提高UI性能的方法事实上有非常多在实际的开发中都已经用到了,在此做一下总结. 1.降低主线程的堵塞时间 若一个操作的耗时较长(超过5秒),我们应该将其放入后台线程中运行.仅仅在须要改动UI界面时通知主线程进行改动. Android已经提供了AsyncTask以实现从主线程生成新的异步任务的方法. 2.提高Adapter&AdapterView的效率 (1)重用已生成过的Item View (2)加入ViewHolder , 避免反复查找须要改动的控件 public View getView(in

CSS 优化、提高性能的方法

如何提高CSS性能,根据页面的加载性能和CSS代码性能,主要总结有下面几点: 1.尽量将样式写在单独的css文件里面,在head元素中引用 有时候为了图方便或者快速搞定功能,我们可能会直接将样式写在页面的style标签或者直接内联在元素上,这样虽然简单方便,但是非常不利于日后的维护.将代码写成单独的css文件有几点好处: (1)内容和样式分离,易于管理和维护 (2)减少页面体积 (3)css文件可以被缓存.重用,维护成本降低 2.不使用@import 这条手段已经是众所周知,这里简单提一下,@i

PHP提高网站性能的一些方法

前段时间面试问到了这个问题,回答的不是很全面,就去问了度娘,得到了一些比较全的答案,由于出处较多就没法确定原文出处了.下面是分享的答案. 一.大型网站性能提高策略: 大型网站,比如门户网站,在面对大量用户访问.高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器.高性能的数据库.高效率的编程语言.还有高性能的Web容器.这几个解决思路在一定程度上意味着更大的投入. web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如Jav

提高室内薄型钢结构防火涂料防火性能的方法

泊腾室内薄型钢结构防火涂料工程师简介正确使用室内薄型钢结构防火涂料提高防火性能.钢结构薄型防火涂料施工前须清除钢结构表面的灰尘.油污及杂物,确保表面清洁.现场室内薄型防火涂料施工前需用搅拌枪充分搅拌均匀,如觉太稠可稀释到便于施工.采用油漆刷和滚刷分层刷涂,室内防火涂料薄型靠前遍刷涂涂层应薄,一般为0.4mm,以增强涂层与钢基材的粘结强度. 待头遍涂层干后再进行下一次涂刷,时间间隔为6-8小时,每次涂层厚度应不大于0.6mm.施工环境应达到CECS24:90规定的条件,雨天或钢结构表面有结露现象,

数据提高查询速度的方法(摘抄)

处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:     select id from t where num is null     可以在num上设置默认值0,确保表中num列没有

Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net

1. 提升单例有能力的1 2. 减少工作数量2 2.1. 减少距离2 2.2. 添加索引2 2.3. Dma api2 2.4. Cdn2 2.5. Cache2 2.6. Pool技术2 2.7. 减少HTTP请求数2 2.8.  ·更大的数据格式2 2.9. 循环展开2 2.10. 循环转置3 2.11. 提高Cache命中率3 2.12. 小组件替换大组件4 3. 并行处理4 3.1. 多线程4 3.2. 数据库分区4 4. 减少等候4 4.1.  2.流水线(Pipeline)4 4.2