пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 22/11/04 в 17:53 |
хочу скрипт оптимизировать...
есть асоциативный массив А типа
$a['a']=array('a','b');
$a['b']=array('b','c');
и т.д. обьем полученного массива больше 100кб.
(эту часть оптимизировать не нужно  )
и имеем функцию ПРИМЕР которая в основном скрипте вызывается несколько раз.
функция ПРИМЕР берет данные из массива А и на их основе производит некоторые вычисления.
при этом массив А нигде кроме этой функции не используется, и данные в массиве А не изменяются.
далее задача для оптимизации...
как передать данные в массиве А в функцию ПРИМЕР так чтобы достичь максимальной скорости ?
вариант 1
задать массив А внутри самой функции - гигантские тормоза, так как при каждом вызове функции массив задается поновой.
вариант 2
задать массив А в основном скрипте, а в функции использовать global A; - чуть быстрее, но все равно почемуто тормозит скрипт.
вариант 3
задать массив А в основном скрипте, а функцию опеределить как
function ПРИМЕР($a){} т.е. передавать массив непосредственно в параметрах вызова функции... - это вроде самый быстрый вариант. хотя не уверен что правильный.
Есть еще какието варианты ?
(и где можно почитать на тему оптимизации функций и обьектов в рнр?)
|
|
|
|
Снимаю. Порчу.
С нами с 25.12.99
Сообщения: 1234
Рейтинг: 786
|
Добавлено: 22/11/04 в 18:27 |
вариант 4
передать в функцию ссылку на массив
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 22/11/04 в 18:39 |
пример кода можно ? а то я так не понимаю.
|
|
|
|
Снимаю. Порчу.
С нами с 25.12.99
Сообщения: 1234
Рейтинг: 786
|
Добавлено: 22/11/04 в 18:41 |
function ПРИМЕР(&$b){}
$a['a']=array('a','b');
$a['b']=array('b','c');
.....
ПРИМЕР($a)
|
|
|
|
пенсионер
С нами с 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. наконец то я нашел новый мануал по РНР, а то бы и не знал что так можно работать  )
|
|
|
|
Снимаю. Порчу.
С нами с 25.12.99
Сообщения: 1234
Рейтинг: 786
|
Добавлено: 22/11/04 в 20:07 |
странно.. ведь при передачи по ссылке не резервируется память для массива в функции и осутствует процесс копирования в эту память..
а что за новый мануал?
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 22/11/04 в 20:15 |
Gary писал: | странно.. ведь при передачи по ссылке не резервируется память для массива в функции и осутствует процесс копирования в эту память..
а что за новый мануал? |
по идее да, но у меня в тесте получилось что прироста скорости нет.
попробуй у себя - может я что то не учел.
а мануал как я понял zendовский, выдран наверное с последнего вебстудио.
|
|
|
|
Чингачгук, вождь красноглазых
С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824
|
Добавлено: 23/11/04 в 03:38 |
Есть еще вариант - статические переменные. Глянь мануал, "variable scope".
А вообще ты уверен, что именно в этом месте тормозит, а не, скажем, на обработке всех этих данных?
P.S. При таком объеме данных и частом обращении я бы вообще задумался над тем, чтобы вынести данные куда-то еще, где они будут обрабатываться быстрее. Скажем, в базу. Или в DB-файл. Или вообще написать php-extension какой. 100к данных прямо в скриптовом коде заведомо медленного php - это как-то ненормально.
|
|
|
|
С нами с 31.07.03
Сообщения: 839
Рейтинг: 413
|
Добавлено: 23/11/04 в 12:20 |
а вообще лучше такие вопросы задавать ещё и здесь паралельно
phpclub.ru
|
|
|
|
пенсионер
С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166
|
Добавлено: 23/11/04 в 14:58 |
Dr.Syshalt писал: | Есть еще вариант - статические переменные. Глянь мануал, "variable scope". |
пробовал, просто не стал писать, по скорости примерно тоже самое что и при использовании глобал.
Dr.Syshalt писал: | Или вообще написать php-extension какой. 100к данных прямо в скриптовом коде заведомо медленного php - это как-то ненормально. |
А где почитать о том как делать php-extension ? И какие у этого будут плюсы ?
PRIVATE, не успеваю просто за всем следить. а спецов по РНР и здесь вроде хватает
|
|
|
|
С нами с 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 будет в разы быстрее.
|
|
|
|