PHP - Zend框架-使用静态方法进行数据访问


PHP - Zend Framework - Using static methods for data access

我一直在网上阅读关于使用静态方法从数据库访问数据的利弊的文章。我有一个基于Zend框架的LAMP网站。

有人说,在性能方面,几乎没有任何区别,正如这里引用的Greg Beech的分析

在调用一个方法20亿次时,你可以通过将其设置为静态来节省大约5ms,这对于每个方法调用

来说几乎没有节省什么。

但是如果我正确理解静态方法的概念-只有一个方法实例,这意味着只有一个DB连接-所以在高流量的网站上-当一个请求被服务时-其他请求将排队使用相同的方法,对吗?

所以只是想知道你的想法和输入,是否有意义声明访问方法为静态或不。

谢谢

我想你可能对这里的过程有一个错误的理解。

单个访问者的每个单独请求都是完全相互独立的。想象这两个独立的请求:

Request visitor 1              Request visitor 2
index.php                      index.php
creates Zend_Db instance $db   creates Zend_Db instance $db
calls $db->insert()            calls $db->insert()
calls $db->insert() again      calls $db->insert() again
                    '        /
                     '      /
                      '    /
                     Database
           Queue might be something like:
             4. insert 2 from request 2
             3. insert 2 from request 1
             2. insert 1 from request 2
             1. insert 1 from request 1

换句话说:基本上只有数据库本身有SQL语句排队的问题。

PHP脚本彼此独立工作。因此,无论您是创建实例方法还是静态方法,都与SQL查询如何排队完全无关。

静态方法并不一定意味着只有一个,它意味着您不需要类的实例来调用方法。如果你只希望一个对象的一个实例在一个请求的生命周期中存在,可以使用单例模式。

每个请求页面的单独用户将获得该对象的自己的实例,但每个用户只能拥有一个。

正如fireeyedboy所说,数据库将负责在请求进入时对其进行排队。在请求大量涌入的情况下,每个页面与数据库交互的调用可能必须等待先处理较早的请求,从而导致处理延迟。