1

我正在使用 php、ajax、javascript、mysql 构建一个 webapp。我一直在担心某事,但不确定这是否真的是一个问题。这是代码如何工作的基本概念......我想知道我现在是否应该更改它,或者是否可以按原样使用。性能对我来说很重要……超过 5,000 名用户应该能够在没有太多性能问题的情况下使用该应用程序。我担心的部分原因是对自学成才的开发人员以及不了解所有最佳实践的偏执狂。

这是基本的 webapp 功能:

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

HTMLphp.php 包含用于返回整个 web 应用程序的 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 页面的整体大小,假设这将有助于提高网站的整体性能......我在左边的字段中吗思维?我的一部分认为这与第一个选项完全相同,只是组织方式不同,它会对整体性能产生任何影响。但是,我确实在某处读到过更少的“包含”对性能更好。

其他人在做什么,或者是否有其他关于如何做这类事情的最佳实践?对于一个拥有 5,000 到 10,000 个用户的网站,是否可以忽略这一点?

谢谢。

4

3 回答 3

2

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

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

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

于 2010-01-16T01:01:35.833 回答
2

你的班级真的有超过 100 个函数吗?
可能(不,我 110% 肯定)你的类当时设计得不好,特别是如果它“仅”用于 HTML 表格创建。

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

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

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

你问你应该怎么做?在PHP的上下文中
学习OOP ,也许还可以阅读一些有关设计模式的内容。

编辑:

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

于 2010-01-16T00:41:25.127 回答
0

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

于 2010-01-16T16:26:26.910 回答