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

2015-04-23 08:42:00 +08:00
 Nicksxs

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

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

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

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

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

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


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

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

ps~~

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

因此,楼上都对。

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

@cevincheung 楼主,这是你失散已久的兄弟么?
Nicksxs
2015-04-23 16:46:44 +08:00
@raincious 不是PHP一直被诟病弱类型语言么,然后用SPL的类型有没有弥补这方便的缺陷呢?
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
2015-04-23 18:02:46 +08:00
我是来围观的。不要看我的头像。
RihcardLu
2015-04-23 18:18:07 +08:00
@jevonszmx 多谢分享......
jevonszmx
2015-04-23 18:28:39 +08:00
@cevincheung
围观萌头像

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/185632

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX