php> производительность> сессия против глобалов против дБ>? - PullRequest
2 голосов
/ 05 марта 2012

При сравнении следующих сценариев, какой из них будет самым быстрым?Пример кода ниже.

По сути, я пытаюсь выяснить, что является лучшей альтернативой использованию глобальных переменных.Глобальные переменные, которые я храню, будут одинаковыми для всех пользователей ... это значения уровня приложения, которые одинаковы для всех пользователей, например, application_name или application_home_page_url ...

У меня будет тоннафункции, использующие эти значения уровня приложения, и я не хочу передавать их по аргументу, хотя я думаю, что это будет самый быстрый способ .. Мои параметры, кажется, работают либо с поиском БД, либо с использованием переменных сеанса или глобальных переменных ..

Конечно, вы можете поднять его на следующий уровень, бросив сотрудника.массивы в уравнение, чтобы сделать его быстрее / медленнее.

Другой фактор, который мы должны учитывать, - это то, что мы говорим о большом количестве пользователей здесь.

Итак, как лучше всего работать с этими переменными уровня приложения в отдельных функциях?

//for global based approach
$my_global_var1 = "abc";
$my_global_var2 = "xyz";

//for global + array based approach
$my_globals['var1'] = "abc";
$my_globals['var2'] = "xyz";

//for session based approach
$_SESSION['my_global_var1'] = "abc"
$_SESSION['my_global_var2'] = "xyz";

//for session + array based approach 
$_SESSION['my_globals']['var1'] = "abc";
$_SESSION['my_globals']['var2'] = "xyz";

//for db based approach
$varname = 'var1';

//or some other way, you may think of
//??

function func1()
{
   global $my_global_var1;
   global $my_global_var2;
   //....

    my_var1 = $my_global_var1;
}


function func2()
{
    $my_var1 = $my_globals['var1'];
}

function func3()
{
    $my_var1 = $_SESSION['my_global_var1'];
}

function func4()
{
    $my_var1 = $_SESSION['my_globals']['var1'];
}

$my_var1 = func5($varname)
function func5($varname)
{
    return lookup($varname);
}

Ответы [ 3 ]

2 голосов
/ 05 марта 2012

Я бы предложил использовать для этого класс Registry.

Я уверен, что существует несколько способов создать такой класс, но я предпочитаю использовать один статический класс:

class Registry {
    private static $values = array();

    public static function set($key, $value) {
        self::$values[$key] = $value;
    }

    public static function get($key) {
        return self::$values[$key];
    }
}

Тогда вы просто включили бы реестр в верхней части вашего приложения и связали бы его с Registry::set('abc', 'xyz'); и Registry::get('abc');

Несколько ссылок на эту технику:

http://www.devshed.com/c/a/PHP/Registry-Design-Pattern/

http://www.phpro.org/tutorials/Model-View-Controller-MVC.html#5

1 голос
/ 05 марта 2012

Идея глобальных переменных и переменных сеанса отличается.Глобальные переменные предназначены для использования одной и той же переменной в одном скрипте, независимо от области видимости.Сессия для хранения переменных для одного пользователя на разных страницах.Если я понимаю, что вы пытаетесь сделать правильно, вероятно, лучше использовать переменные сеанса.

Что касается скорости, попробуйте измерить время выполнения вашего скрипта с помощью microtime ().Вы можете использовать это (примечание: ввод не очищен!):

<?php
    $start = microtime(true);
    if ($_GET['include']) { @include $_GET['include']; }
    $end = microtime(true);
    echo '<hr />';
    echo 'The script executed in: '.(($end - $start)*1000).' milliseconds.';
?>

РЕДАКТИРОВАТЬ:

Комментарий к вашему посту выше меня просто помог мне понять, что вы пытаетесь сделать.Действительно, если эти переменные должны оставаться постоянными, используйте константы.

0 голосов
/ 05 марта 2012

Вы должны передавать переменные в функции, если это возможно.

Пример, где используются глобальные переменные:

<?PHP
$Variable = '1234567';

function funcName()
{
global $Variable;
echo $Variable;
}
?>

или вы можете просто сделать

<?PHP
$Variable = '1234567';

funcName($Variable);

function funcName($varPassed)
{
echo $varPassed;
}
?>

переменные SESSIONиспользуются для хранения пользовательских настроек или переменных при нескольких загрузках страниц или страниц.Они используются для хранения информации о сеансе (имя пользователя, пароль, последняя страница), но у вас есть полный контроль над ней.Также переменные SESSION хранятся во временных файлах.Если материал, который вы храните, предназначен для отдельных пользователей, тогда используйте SESSION ... MySQL будет забиваться, если не будет правильно с правильными индексами и тому подобным.

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