Mod-perl и наши переменные ускоряют работу?

Я использую мод-перл. У меня такое впечатление, что наша переменная не будет создаваться для каждого выполнения. т. е. если я создам хэш-переменную как нашу, то эта переменная будет создана один раз и останется в кеше памяти apache для последующего запуска.

Итак, мой вопрос: будет ли какая-либо разница в скорости выполнения для менее двух в mod-perl?

Module1
....
....
our %myhash = qw ( list of key value );
...
....
sub fun() {
  if(exists $myhash{'key'}) {
  ...................
   return ;
}

а также

Module2
.....
.....
sub fun() {
  my %myhash = qw ( list of key value );
  if(exists $myhash{'key'}) {
  ...................
   return ;
}

Какой из них лучше с точки зрения скорости выполнения на mod-perl, если я вызываю эту функцию один раз для каждого запуска?


person Gaurav Pant    schedule 19.02.2014    source источник


Ответы (2)


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

Вам не нужно объявлять их, используя «наш». Если на них ссылаются только в одном пакете, вы можете использовать «my» (конечно, вне всех подпрограмм), чтобы свести к минимуму риск конфликта имен.

person harmic    schedule 19.02.2014

Я выберу Module1, так как он создает глобальную переменную, которая создается один раз и может быть доступна подпрограмме(ам), а не создаваться каждый раз при вызове подпрограммы.

person HackerKarma    schedule 19.02.2014
comment
Что делать, если я использую эту функцию один раз для одного запуска. не два раза? - person Gaurav Pant; 19.02.2014
comment
В таком случае это не имеет значения. Это зависит от варианта использования. Часто некоторые переменные поддерживаются глобально, что значительно повышает удобство сопровождения программы. Но я обычно стараюсь свести глобальные переменные к минимуму. - person HackerKarma; 19.02.2014