несколько функций и страниц и надлежащие методы для их хранения для производительности - PullRequest
0 голосов
/ 07 марта 2019

У меня слишком много встроенных функций, почти 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(...){......}

и включается один раз на странице 1, используя include("page1_functions.php");


, которые я вижу для каждого метода:

все в одном как (functions.php) : включена ненужная функция, которая может каким-то образом повлиять на производительность

страницы для каждой функции (f1.php, f2.php, ...) : слишком много включений, которые могут каким-то образом повлиять на производительность

страница функций для каждой страницы (page1_functions.php, page2_functions.php) : функции могут повторяться несколько раз и занимать больше места, что может как-то повлиять на производительность

, поэтому я не могу решить, какой метод лучше всего следовать

1 Ответ

0 голосов
/ 07 марта 2019

Это слишком большая тема, чтобы ее действительно охватить, но.

Вот простой пример того, что у вас есть следующие функции:

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(), вместо этого у него есть все Foo и f5().FooBar имеет все Foo и f4().Вы можете наложить на него столько слоев, сколько захотите, вы даже можете переопределить методы из "родительского" класса и т. Д.Кроме того, поскольку это «методы» внутри класса, вы можете создать совершенно другой класс с одинаковыми именами методов без конфликтов имен.

Тогда при автозагрузке вам даже не нужны операторы 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;

Идея, стоящая за этим, заключается в загрузке файла класса (который представляет собой набор функций и прочего) по требованию, когда они вызываются с новым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...