• 提高PHP性能的方法


    提高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

  • 相关阅读:
    pytorch-第一章基本操作-基本使用方法 (1.torch.empty, 2.torch.rand, 3.torch.zeros, 4.torch.tensor, 5.x.new_ones,6.torch.rand_like, 7.torch.randn, 8.torch.from_numpy, 9.x.view(改变维度))
    mysql学习入门-数据库中库,表和内容操作
    校园客户端(DR)启动后提示我们缺失packet.dll,无法正常启动(7)
    DR客户端一直连接服务器....(6)
    优盘提示插入多卷集的最后一卷解决办法(5)
    apt-get默认下载路径
    Qt嵌入式开发环境搭建
    Ubuntu重启关机命令使用
    Linux如何修改网络环境参数
    VMware内部错误解决办法
  • 原文地址:https://www.cnblogs.com/restart/p/4403822.html
Copyright © 2020-2023  润新知