Реклама на сайте Advertise with us

Для спецов в PHP

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 22/11/04 в 17:53       Ответить с цитатойцитата 

хочу скрипт оптимизировать...
есть асоциативный массив А типа
$a['a']=array('a','b');
$a['b']=array('b','c');
и т.д. обьем полученного массива больше 100кб.
(эту часть оптимизировать не нужно icon_smile.gif)

и имеем функцию ПРИМЕР которая в основном скрипте вызывается несколько раз.

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

далее задача для оптимизации...
как передать данные в массиве А в функцию ПРИМЕР так чтобы достичь максимальной скорости ?

вариант 1
задать массив А внутри самой функции - гигантские тормоза, так как при каждом вызове функции массив задается поновой.

вариант 2
задать массив А в основном скрипте, а в функции использовать global A; - чуть быстрее, но все равно почемуто тормозит скрипт.

вариант 3
задать массив А в основном скрипте, а функцию опеределить как
function ПРИМЕР($a){} т.е. передавать массив непосредственно в параметрах вызова функции... - это вроде самый быстрый вариант. хотя не уверен что правильный.

Есть еще какието варианты ?
(и где можно почитать на тему оптимизации функций и обьектов в рнр?)

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 

Снимаю. Порчу.

С нами с 25.12.99
Сообщения: 1234
Рейтинг: 786

Ссылка на сообщениеДобавлено: 22/11/04 в 18:27       Ответить с цитатойцитата 

вариант 4
передать в функцию ссылку на массив

0
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 22/11/04 в 18:39       Ответить с цитатойцитата 


пример кода можно ? а то я так не понимаю. icon_sad.gif

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 

Снимаю. Порчу.

С нами с 25.12.99
Сообщения: 1234
Рейтинг: 786

Ссылка на сообщениеДобавлено: 22/11/04 в 18:41       Ответить с цитатойцитата 

function ПРИМЕР(&$b){}

$a['a']=array('a','b');
$a['b']=array('b','c');
.....

ПРИМЕР($a)

1
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 22/11/04 в 19:08       Ответить с цитатойцитата 

Gary писал:
function ПРИМЕР(&$b){}
$a['a']=array('a','b');
$a['b']=array('b','c');
.....
ПРИМЕР($a)

х.з. почему, но на тесте выдало 25 секунд, против 5 секунд у варианта с передачей массива без ссылки (т.е. тоже сто и у тебя, но без знака &).

самый быстрый вариант ,что удалось найти, это использование $GLOBALS['a'].

p.s. наконец то я нашел новый мануал по РНР, а то бы и не знал что так можно работать icon_smile.gif)

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 

Снимаю. Порчу.

С нами с 25.12.99
Сообщения: 1234
Рейтинг: 786

Ссылка на сообщениеДобавлено: 22/11/04 в 20:07       Ответить с цитатойцитата 

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

а что за новый мануал?

0
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 22/11/04 в 20:15       Ответить с цитатойцитата 

Gary писал:
странно.. ведь при передачи по ссылке не резервируется память для массива в функции и осутствует процесс копирования в эту память..
а что за новый мануал?

по идее да, но у меня в тесте получилось что прироста скорости нет.
попробуй у себя - может я что то не учел.

а мануал как я понял zendовский, выдран наверное с последнего вебстудио.

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 23/11/04 в 03:38       Ответить с цитатойцитата 

Есть еще вариант - статические переменные. Глянь мануал, "variable scope".

А вообще ты уверен, что именно в этом месте тормозит, а не, скажем, на обработке всех этих данных?

P.S. При таком объеме данных и частом обращении я бы вообще задумался над тем, чтобы вынести данные куда-то еще, где они будут обрабатываться быстрее. Скажем, в базу. Или в DB-файл. Или вообще написать php-extension какой. 100к данных прямо в скриптовом коде заведомо медленного php - это как-то ненормально.

1
 



С нами с 31.07.03
Сообщения: 839
Рейтинг: 413

Ссылка на сообщениеДобавлено: 23/11/04 в 12:20       Ответить с цитатойцитата 

а вообще лучше такие вопросы задавать ещё и здесь паралельно
phpclub.ru

1
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 23/11/04 в 14:58       Ответить с цитатойцитата 

Dr.Syshalt писал:
Есть еще вариант - статические переменные. Глянь мануал, "variable scope".

пробовал, просто не стал писать, по скорости примерно тоже самое что и при использовании глобал.

Dr.Syshalt писал:
Или вообще написать php-extension какой. 100к данных прямо в скриптовом коде заведомо медленного php - это как-то ненормально.

А где почитать о том как делать php-extension ? И какие у этого будут плюсы ?

PRIVATE, не успеваю просто за всем следить. а спецов по РНР и здесь вроде хватает icon_smile.gif

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

0
 



С нами с 30.06.03
Сообщения: 794
Рейтинг: 202

Ссылка на сообщениеДобавлено: 23/11/04 в 17:58       Ответить с цитатойцитата 

Эта задача решается проще... Если я понял что ты делаешь=))))
****
_****
__ ****
перебор массива а внутри цикла захватываем следующие n элементов.

Если не так то сорри=)))))

(_ это пробел, борда парсит)

Я бы взял частями, но мне нужно сразу=))

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 23/11/04 в 18:14       Ответить с цитатойцитата 

bog писал:
А где почитать о том как делать php-extension ? И какие у этого будут плюсы ?


Почитать можно как в мануале ("PHP API: Interfaces for extension writers"), так и в книжке O'Reilly "Programming PHP" (глава "Extending PHP"), которая, как и все книжки O'Reillly, может быть найдена в P2P ;)

Преимущества - обычные преимущества C перед PHP. Когда много данных в памяти, и их надо обрабатывать, C будет в разы быстрее.

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »