首页 > 解决方案 > 多种功能和页面以及存储它们以提高性能的适当方法

问题描述

我在一个名为的文件中有太多的自制函数,其中近 30 个是functions.php这样排序的

<?php
function f1(...){......}
function f2(...){......}
function f3(...){......}
function f4(...){......}
          ------
function f30(...){......}

我的网站上有 10 个页面,上面有这个include("functions.php");

但是对于每个页面,它使用有限数量的功能,例如

page1 = f1(), f2(), f3(), f4(), f5()
page2 = f1(), f3(), f5(), f7(), f9()
page3 = f1(), f2(), f4(), f8(), f9()
page4 = f1(), f6()
         ---------
page10 = f1(), f2(), f3(), f14(), f22(), f24(), f29()

所以我认为为每个页面包含所有 30 个功能是过度使用它所以我想到了这个

1-每个功能的页面分别包含在每个功能中,例如

page1

include("f1.php");
include("f2.php");
include("f3.php");
include("f4.php");
include("f5.php");

2-一个页面包含每个页面的所有功能,例如

page1_functions.php

function f1(...){......}
function f2(...){......}
function f3(...){......}
function f4(...){......}
function f5(...){......}

并使用在 page1 中包含一次include("page1_functions.php");


我看到的每种方法的缺点是

all-in-one as (functions.php):包含不必要的功能,可能会以某种方式影响性能

每个函数的页面(f1.php,f2.php,...):包含太多可能会以某种方式影响性能

每个页面的功能页面(page1_functions.php,page2_functions.php):功能可能会重复多次并占用更多空间,并且可能会以某种方式影响性能

所以我无法决定最好的方法是什么

标签: phpperformance

解决方案


这是一个太大的话题,无法真正涵盖,但是。

这是一个简单的例子,说你有这些功能:

function f1(...){......}
function f2(...){......}
function f3(...){......}

function f4(...){......}

function f5(...){......}

你总是需要前 3 个而不是第二个。

 //Foo.php
 class Foo{
     function f1(...){......}
     function f2(...){......}
     function f3(...){......}
 }

 //FooBar.php
 require_once 'Foo.php'
 class FooBar extends Foo{
     function f4(...){......}
 }

 //FooBiz.php
 require_once 'Foo.php'
 class FooBiz extends Foo{
     function f5(...){......}
 }

所以现在如果我使用 Foo

 require_once 'Foo.php';
 $Foo = new Foo;
 $Foo->f1();

所以现在如果我使用 FooBar

 require_once 'FooBar.php'; //which has its own require_once 'Foo.php';
 $FooBar = new FooBar;
 $FooBar->f1(); //from extends foo
 $FooBar->f4();

等等。 FooBiz将与 相同,FooBar只是它没有,f4()而是具有所有Foof5()FooBar拥有所有Foof4()。您可以随意分层,甚至可以覆盖“父”类中的方法等...

除了这个还有很多,但这是基础。另外,因为这些是类中的“方法”,您可以使用相同的方法名称创建一个完全不同的类,而不会发生命名冲突。

然后通过自动加载,您甚至不需要这些require_once语句。

这是我制作的一个自动加载器,事实上的标准是使用 Composer 和它的自动加载器,但你可以玩这个并了解它们是如何工作的。

https://github.com/ArtisticPhoenix/Autoloader

有一些命名约定和需要考虑的东西,但如果你不使用命名空间,只要Autoloader.php它与类文件在同一个文件夹中,它应该能够使用以下方式加载它们:

require_once 'Autoloader.php';

$Autoloader = \evo\autoloader\Autoloader::getInstance();

// require_once 'Foo.php'; - no longer needed, nor is the ones in the class files
$foo = new Foo;

这背后的想法是在使用 new 调用类文件(它是函数和其他东西的集合)时按需加载它们。


推荐阅读