php类性能问题......我该怎么办?

时间:2010-01-16 00:29:56

标签: php performance include server-side-includes

我正在使用php,ajax,javascript,mysql构建一个webapp。我一直在担心某些事情,但不确定这是不是真的有问题。这是代码如何工作的基本概念......我想知道我现在是否应该更改它,或者是否按原样使用o.k.性能对我来说很重要......超过5,000名用户应该能够使用该应用程序而不会出现太多性能问题。我担心的部分原因只是成为自学成才的偏执狂而不知道那里的所有最佳实践。

以下是基本的webapp功能:

用户通过浏览器通过onclick事件执行调用 - > ajax调用phpPG1.php。 - > phpPG1.php对数据库运行查询并将结果存储在数组中,然后包含另一个名为HTMLphp.php的php页面,从HTMLphp.php页面实例化新对象,这是一个类 - > calles类的函数并传递包含查询结果的数组 - >类函数构建HTML表并传回一个字符串 - > phpPG1.php页面将带有表数据的字符串发送回ajax调用,该调用显示它所属的给定DIV标记中的字符串。

HTMLphp.php包含用于为整个webapp返回HTML表的所有函数。 HTMLphp.php看起来像这样:

Class HTML_stuff
{
   function html_TABLE1($results_array)
   {

      $string = 'THE HTML TABLE WITH ITS DATA IN IT'
      return $string
   }

   function html_TABLE2($results_array)
   {

      $string = 'THE HTML TABLE WITH ITS DATA IN IT'
      return $string
   }

}

所以,这是我的问题。 HTMLphp.php页面现在有5,606行代码,它代表了类中100个左右的函数。基本上,我的webapp中的每个页面都“包含”此页面,以便能够使用类函数来显示html表。我大约已经完成了一半的webapp,所以会有更多的代码行添加到这个文件中。我对计算机如何执行代码并不完全一致,特别是在使用类对象时,但我理解“解释性语言”如php的基础知识。

我想知道这是不是一个坏主意,如果我应该做这样的事情:对于HTML_stuff类中的每个函数,只需删除每个函数的代码并将其放在它自己单独的.php页面中像这样:

Class HTML_stuff
{
   function html_TABLE1($results_array)
   {
      include_once 'TABLE1.php'; //the html table for this function.
      return $string;
   }

   function html_TABLE2($results_array)
   {
      include_once 'TABLE2.php';
      return $string;
   }
}

我的基本假设是我只包含调用特定函数时所需的HTML,因此减少了HTMLphp.php页面的整体大小,假设这有助于整体网站性能......我在左边有这种想法的领域?我的一部分认为这与第一个选项完全相同,只是组织不同,它会对整体性能做任何事情。但是,我确实在某处读到了“包含”更少的性能。

其他人做了什么,或者有其他关于如何做这类事情的最佳做法?用一个5000到10,000个用户的网站来担心这个问题可以忽略不计吗?

感谢。

3 个答案:

答案 0 :(得分:2)

你班上真的有100多个功能吗? 可能(不,我110%肯定)你的课程设计不合理,特别是如果它只是“用于创建HTML表格。”

面向对象编程是一种很好的技术,但你必须正确使用它。听起来你只是将所有程序功能放在一个地方。那不是OOP。并且很难维护代码。

一个班级中的100个方法太多了。重构您的代码,将其放入多个类中,只导入您真正需要的代码。即使不了解您的应用程序,我也可以说它(和您)将从中受益。

我不能让你良心良好地使用这样的课程;)

你问你应该怎么做? 在OOP的上下文中了解PHP,也可以阅读有关Design Patterns的内容。

修改

我刚刚看到你有一个函数在你的应用程序中创建每个HTML,这是正确的吗?如果是这样,你真的应该考虑动态构建表,这将导致更少的代码,并且可能更容易维护。

答案 1 :(得分:2)

在函数/方法中包含特定的PHP文件而不是open include肯定会有所帮助,因为只包含和解释所需的项目。但PHP的intrepreter仍然需要通过那个庞大的类的5000行代码,恕我直言,这是一个非常糟糕的方法,并将成为一个主要的瓶颈。

实际上,5000-10000用户不是很多,但它又取决于使用方式。如果所有这些都可以同时登录,并在您的服务器上发出请求(类似于每分钟10k请求或大约166 req / s)并且几乎没有涉及缓存,那么它可能是一个严重的瓶颈但又一次取决于很多因素。相反,一个好的方法是使用某种负载测试工具,如abJMeter,并找到它真实的。

如果在进行这些测试后结果看起来不那么好,那么找出瓶颈是什么。您可以使用APC或Memcache来实现缓存,或其他各种方法来提高性能。但是在黑暗中疯狂拍摄,我会说5k线类是你应该考虑拆分的东西,不仅仅是出于性能原因而且还有一个好的设计。也许,如果构建这些HTML部分的逻辑不是太复杂,您可以通过将数据作为JSON / XML发送到客户端,并让Javascript使用此数据构建表。

答案 2 :(得分:0)

问题解决了。我改为代码只读取调用时所需的函数。现在它读取了几百行而不是5,000行。