我正在建立一个使用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看起来像这样:
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;
}
}我的基本假设是,当我调用特定函数时,我只包含所需的超文本标记语言,因此减少了HTMLphp.php页面的整体大小,假设这将有助于整个站点performance...am i in left field?我的部分想法是,这与第一个选项是一样的,只是组织方式不同,它会对整体性能做任何事情。然而,我确实在某处读到,更少的“include”对性能更好。
其他人做什么,或者有关于如何做这类事情的其他最佳实践吗?对于一个有5,000 - 10,000用户的网站来说,担心这个问题可以忽略不计吗?
谢谢。
发布于 2010-01-16 09:01:36
将特定的PHP文件包含在函数/方法中而不是打开的include中肯定会有所帮助,因为只有需要的项才会被包含和解释。但是PHP解释器仍然需要遍历这个庞大类的5000行代码,这是一个非常糟糕的方式,而且将是一个主要的瓶颈。
在现实中,5,000-10000个用户并不是很多,但这又取决于用户的使用情况。如果它们都可以同时登录,并在服务器上发出请求(大约每分钟10k个请求或166个请求/秒)而且很少或根本不涉及缓存,那么这可能是一个严重的瓶颈,但这又取决于许多因素。相反,一个好的方法是使用某种负载测试工具,如ab或JMeter,并真正找到它。
如果做完这些测试后结果看起来不是很好,那么找出瓶颈是什么。您可以使用APC或Memcache来实现缓存,或者使用各种其他方法来提高性能。但在黑暗中大胆尝试一下,我想说5k线路类是你应该考虑拆分的东西,不仅是出于性能的原因,也是为了一个好的设计。也许,如果构建这些HTML片段的逻辑不太复杂,您可以通过将数据作为JSON/XML发送,并让Javascript使用这些数据来构造表,从而将其卸载到客户机。
发布于 2010-01-16 08:41:25
你的类里真的有100多个函数吗?
很可能(不,我有110%的把握)你的类设计得不好,特别是当它“只”用于创建HTML表的时候。
面向对象编程是一种很好的技术,但你必须正确使用它。在我看来,您只是将所有的过程函数放在一个地方。这不是OOP。而且很难维护代码。
在一个类中使用100个方法实在是太多了。重构你的代码,把它放到多个类中,只导入你真正需要的那些。即使不了解您的应用程序,我也可以说它(和您)将从中受益。
我不能让您在问心无愧的情况下使用这种类;)
你问你应该怎么做?
在PHP的上下文中学习OOP,或许还可以阅读一些关于Design Patterns的知识。
编辑:
我刚刚看到你有一个在你的应用程序中创建每个HTML的函数,这是正确的吗?如果是这样的话,您真的应该考虑动态构建表,这将减少代码,并且可能更易于维护。
发布于 2010-01-17 00:26:27
问题解决了。我将代码改为只读入调用时所需的函数。现在它只读取几百行代码,而不是5000行。
https://stackoverflow.com/questions/2075652
复制相似问题