首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php类性能question...what应该怎么做?

php类性能question...what应该怎么做?
EN

Stack Overflow用户
提问于 2010-01-16 08:29:56
回答 3查看 1.5K关注 0票数 1

我正在建立一个使用php,ajax,javascript,mysql的webapp。我已经为某件事担心了一段时间,但我不确定这是否真的是一个问题。下面是代码如何工作的基本概念……我想知道我现在是否应该修改它,或者它是否可以按原样使用。性能对me...over很重要,5,000名用户应该能够使用该应用程序,而不会出现太多性能问题。我担心的一部分就是偏执地认为自己是自学成才的开发人员,并不知道所有的最佳实践。

以下是webapp的基本功能:

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

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

代码语言:javascript
复制
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页面中,如下所示:

代码语言:javascript
复制
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;
   }
}

我的基本假设是,当我调用特定函数时,我只包含所需的超文本标记语言,因此减少了HTMLphp.php页面的整体大小,假设这将有助于整个站点performance...am i in left field?我的部分想法是,这与第一个选项是一样的,只是组织方式不同,它会对整体性能做任何事情。然而,我确实在某处读到,更少的“include”对性能更好。

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

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-16 09:01:36

将特定的PHP文件包含在函数/方法中而不是打开的include中肯定会有所帮助,因为只有需要的项才会被包含和解释。但是PHP解释器仍然需要遍历这个庞大类的5000行代码,这是一个非常糟糕的方式,而且将是一个主要的瓶颈。

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

如果做完这些测试后结果看起来不是很好,那么找出瓶颈是什么。您可以使用APC或Memcache来实现缓存,或者使用各种其他方法来提高性能。但在黑暗中大胆尝试一下,我想说5k线路类是你应该考虑拆分的东西,不仅是出于性能的原因,也是为了一个好的设计。也许,如果构建这些HTML片段的逻辑不太复杂,您可以通过将数据作为JSON/XML发送,并让Javascript使用这些数据来构造表,从而将其卸载到客户机。

票数 2
EN

Stack Overflow用户

发布于 2010-01-16 08:41:25

你的类里真的有100多个函数吗?

很可能(不,我有110%的把握)你的类设计得不好,特别是当它“只”用于创建HTML表的时候。

面向对象编程是一种很好的技术,但你必须正确使用它。在我看来,您只是将所有的过程函数放在一个地方。这不是OOP。而且很难维护代码。

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

我不能让您在问心无愧的情况下使用这种类;)

你问你应该怎么做?

PHP的上下文中学习OOP,或许还可以阅读一些关于Design Patterns的知识。

编辑:

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

票数 2
EN

Stack Overflow用户

发布于 2010-01-17 00:26:27

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2075652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档