代码之家  ›  专栏  ›  技术社区  ›  Devner

php&mysql:只加载需要的函数,只按需加载,同时避免重复

  •  0
  • Devner  · 技术社区  · 15 年前

    我使用以下过程调用我的web应用程序页面中的函数。

    //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页面中使用的function s_index.php页面,同样地,为我的应用程序中的其他页面创建不同的函数页面。虽然这看起来是个好主意,但我可能会一遍又一遍地重复同一个函数,这会导致大量的重复。我的唯一目标是让所有页面都能集中访问这些函数,但只按需加载这些函数。希望这是可能的。

    谢谢您。

    注: 请注意,所有编写的代码主要是通过函数完成的,而不是基于oops的。因此,我非常感谢任何可以实现的解决方案,而无需切换到使用oops概念。再次感谢。

    5 回复  |  直到 15 年前
        1
  •  1
  •   outis    15 年前

    如果切换到oo设计,则可以创建自动加载函数(并将其注册到 spl_autoload_register )按需加载类。

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

        2
  •  0
  •   roman    15 年前

    首先,对php来说,加载5k行代码并不难,但除此之外,您应该认真考虑将单个文件拆分成单独的、易于处理的块,并且,在这样做的同时,您甚至可以以面向对象的方式开始编码。

        3
  •  0
  •   Ross Snyder    15 年前

    没有一种真正干净的方法可以让php在某些地方加载某些函数,而不需要在代码复制方面进行权衡。例如,您可以将函数分为逻辑类,然后只为适当的部分加载适当的类-但是这些类不能重叠,否则您将复制代码并挫败您首先要做的事情(有些事情会总是重叠)。

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

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

    2)如果是,是否考虑过使用apc(替代php缓存)?这将减少对该文件的重复解析,尽管每次都会执行。

        4
  •  0
  •   easement    15 年前

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

    例如:

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

    如果是这样的话,你可以这样做,然后只包括你想要的小组。

    第1页:

    包含一次(“functions/db.php”);

    包含一次(“functions/strings.php”);

    第2页可以是:

    包含一次(“functions/files.php”);

    包含一次(“functions/strings.php”);

        5
  •  0
  •   CJ Trowbridge    8 年前

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

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

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

    然后在随机位置(比如mailer、oauth、key-value store等)需要一些大的东西,这些东西在core中有最小的包装函数,然后在调用包装函数时加载它们需要的所有额外库。