php& mySQL:只加载需要的功能,并且仅在需要时加载,同时避免重复

时间:2010-03-01 18:35:39

标签: php function

我使用以下程序调用我的网络应用程序页面中的功能。

//index.php
include("functions.php");
include("file1.php");
include("file2.php");

我的所有功能都进入了functions.php页面。此页面的内容可能超过5000行代码,它包含网站中使用的所有功能。因此,在我的网站的所有页面中加载5000多行代码,即使它不需要,也似乎需要大量的负载。所以我的问题是:

如何仅加载所需的功能,而无需为每个页面创建单独的功能页面?

请考虑这个例子:

//functions.php contains functions f1 through 10
function f1() 
{
  //do something
}
function f1() 
{
  //do something
}
...(through)
function f10() 
{
  //do something
}

如果index.php页面仅使用函数f1和f2,那么如何在该页面上只加载那两个函数,而不必加载所有其余的函数(f3到f10)?请注意我的应用程序。正在使用mysql数据库(如果有帮助的话)。

也许再次值得一提的是,我已经拥有的一个想法是我需要为我的每个页面创建函数,即在index.php页面中使用的functions_index.php页面,同样,创建不同的函数页面我的应用程序中的其余页面。虽然这似乎是一个好主意,但我最终可能反复重复相同的功能,这可能导致重复。我唯一的目标是让所有页面集中访问这些功能,但只能按需加载功能。希望这是可能的。

谢谢。

注意:请注意,所有编写的代码主要通过函数和基于IS NOT OOPS来完成。因此,我真的很感激任何可以实现的解决方案,而无需切换到使用OOPS概念。再次感谢。

5 个答案:

答案 0 :(得分:1)

如果切换到OO设计,您可以创建自动加载功能(并使用spl_autoload_register注册)以按需加载类。

除此之外,执行一些分析以查看加载所有功能的影响。在性能方面,相对于其他方面可能没有显着影响。拥有一个包含您可能需要的所有功能的单片文件会产生设计方面的影响,即增加coupling的危险。你减少separating concerns的耦合。

答案 1 :(得分:0)

首先,加载5k行代码对于php来说并不难,但除此之外,你应该认真考虑将单个文件拆分成单独的,易于处理的块,当你在它时,你甚至可以开始以oop方式编码

答案 2 :(得分:0)

没有真正干净的方法让PHP在某些地方加载某些功能而不需要权衡代码重复。例如,你可以将你的函数分成逻辑类,然后只为相应的部分加载适当的类 - 但这些类不能重叠,否则你最终会复制代码并击败你想要做的事情。第一个地方(并且有一些东西总会重叠)。

但是,如果您担心在整个地方重复加载相同的5000+行文件,那么真正的问题是:

1)您是否因为这个而看到实际性能下降?如果没有,为什么要担心?

2)如果你是,你有没有想过使用APC(Alternative PHP Cache)?这样可以减少对该文件的重复解析,但每次都会执行。

答案 3 :(得分:0)

你能把他们分成有意义的小组吗?

例如:

  • 数据库功能
  • 文件管理功能 =字符串函数

如果是这样,它可能会对你做类似的事情,然后只包括你想要的组。

第1页:

include_once( “功能/ db.php中”);

include_once( “功能/ strings.php”);

和第2页可能是:

include_once( “功能/ files.php”);

include_once( “功能/ strings.php”);

答案 4 :(得分:0)

我曾做过类似的事情。我提出了一个由三部分组成的解决方案,其中一个或全部可能有所帮助。

首先,我将我知道我将永远需要的函数分离出来并将它们放在一个名为core的目录中,该函数在加载索引时自动加载它们。

然后我确定了有时我只需要的东西并将它们按范围分开。因此,应用程序中的一组特定工具可能需要一组在其他任何地方都不需要的特定功能,并且它们都可以从上面加载相同的功能。

然后我会在随机的地方需要一些大的东西(比如邮件程序,oauth,键值存储等),这些东西在核心内有最小的包装函数,然后加载包装器时所需的所有额外的库函数被调用。