V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Nicksxs
V2EX  ›  PHP

在 php 中使用 spl 是个提升性能的好方法吗?

  •  
  •   Nicksxs · 2015-04-23 08:42:00 +08:00 · 3271 次点击
    这是一个创建于 3296 天前的主题,其中的信息可能已经有所发展或是发生改变。

    学php中发现了spl,不知道在使用中是否有性能提升,或者根本就没用,大神们来给我解答下。

    18 条回复    2015-04-23 18:28:39 +08:00
    lxrmido
        1
    lxrmido  
       2015-04-23 09:01:22 +08:00
    SPL的主要价值不是提升性能,而是提升开发效率
    anewg
        2
    anewg  
       2015-04-23 09:05:28 +08:00
    看成sql,差点开喷楼主。。罪过
    jevonszmx
        3
    jevonszmx  
       2015-04-23 09:06:04 +08:00
    写了N多年php代码了,性能瓶颈基本都不是php的问题,除非代码写的特别烂,比如效率差的循环/递归、循环查数据库之类的。

    一般性能影响最大的,还是数据库。
    RihcardLu
        4
    RihcardLu  
       2015-04-23 09:43:17 +08:00
    @jevonszmx 昨天大量读写数据的时候就出现了这种问题,一般的解决方有是哪些?读写分离?负载均衡?还是其他?
    tini19
        5
    tini19  
       2015-04-23 10:01:11 +08:00
    使用函数,绝不使用class,面向过程编程,是提升php性能的最佳途径
    jugelizi
        6
    jugelizi  
       2015-04-23 10:43:41 +08:00
    简直就是灾难
    imn1
        7
    imn1  
       2015-04-23 10:50:53 +08:00
    用 SPL 代码短很多,我试过几十行代码变成几行
    性能提升不大,甚至下降,不过我的知识停留在几年前了
    Nicksxs
        8
    Nicksxs  
    OP
       2015-04-23 10:53:51 +08:00
    @jugelizi 这么神奇
    imn1
        9
    imn1  
       2015-04-23 10:56:21 +08:00
    SPL中的递归器我用的最多,比自己写递归函数省事多了
    yakczh
        10
    yakczh  
       2015-04-23 11:52:52 +08:00
    有测试数据吗?
    dhlwing
        11
    dhlwing  
       2015-04-23 15:47:13 +08:00
    可读性和debug的时候会有一点障碍吧
    jevonszmx
        12
    jevonszmx  
       2015-04-23 16:03:57 +08:00
    @RihcardLu

    读写量太大的话,一般问题是会导致锁表(索引设置不合理,会导致写频繁时性能问题),最简单的方法就是读写分离。但是读写分离会有几个问题,1是读写分离数据同步会有延迟(我们运营老是抱怨后台操作了没反应,刷几次才有效果,哈哈~~),2是程序需要方便支持切换读写库(用主流框架就会好很多)。

    想要性能更好,也可以中间加一层缓存,比如:

    微博这样的场景:用户读微博列表,发微博,再刷新看最新微博。


    用户读微博列表:是从缓存读(如果逻辑改动太多,也可以改成读db,然后被动更新缓存);
    发微博:直接更新缓存(异步入库,或者推入待入库队列写入数据库中);
    再刷新看最新微博:是从缓存读

    这样做,读的压力基本上是缓存,写的时候因为也是更新缓存,所以写入后用户再读数据,还是从缓存读,大大减轻db压力。

    ps~~

    缓存推荐使用redis,渣浪微博有几次服务器挂了,可是还能看微博,应该就是redis服务器还健在~~
    raincious
        13
    raincious  
       2015-04-23 16:12:30 +08:00
    SPL = Stand PHP Library,只是提供一个标准的接口和方法,没有其他的意义(比如做出“用我更快”的保证)。

    因此,楼上都对。

    @jevonszmx @RihcardLu 你们竟然在歪楼。

    @cevincheung 楼主,这是你失散已久的兄弟么?
    Nicksxs
        14
    Nicksxs  
    OP
       2015-04-23 16:46:44 +08:00
    @raincious 不是PHP一直被诟病弱类型语言么,然后用SPL的类型有没有弥补这方便的缺陷呢?
    raincious
        15
    raincious  
       2015-04-23 17:11:06 +08:00
    @Nicksxs

    这……完全不是一回事。还是我#13说的,提供一套接口和方法而已。

    建议楼主看看: http://php.net/manual/zh/book.spl.php

    事实上你很早(5.4)就能在函数参数上检查压入的类型了,比如function myFunction(MyClass $instance),这个和SPL的关系可能仅仅是你能够function myFunction(ArrayIterator $iteratorInstance)这样(吧?)

    关于严格类型检查: http://php.net/manual/en/language.oop5.typehinting.php
    cevincheung
        16
    cevincheung  
       2015-04-23 18:02:46 +08:00
    我是来围观的。不要看我的头像。
    RihcardLu
        17
    RihcardLu  
       2015-04-23 18:18:07 +08:00
    @jevonszmx 多谢分享......
    jevonszmx
        18
    jevonszmx  
       2015-04-23 18:28:39 +08:00
    @cevincheung
    围观萌头像
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   829 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:36 · PVG 06:36 · LAX 15:36 · JFK 18:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.