Как уже ответили многие другие люди, просто для забавы, вот очень быстрый тест (смею ли я так это называть?) ; рассмотрим следующий код:
$num = 1;
$list = array_fill(0, 5000, str_repeat('1234567890', $num));
$before = microtime(true);
for ($i=0 ; $i<10000 ; $i++) {
$str = serialize($list);
}
$after = microtime(true);
var_dump($after-$before);
var_dump(memory_get_peak_usage());
Я запускаю это на PHP 5.2.6 (в комплекте с Ubuntu jaunty).
И, да, есть только значения; нет ключей; и значения довольно просты: нет объекта, нет подмассива, нет ничего, кроме строки.
Для $num = 1
вы получаете:
float(11.8147978783)
int(1702688)
Для $num = 10
вы получаете:
float(13.1230671406)
int(2612104)
А для $num = 100
вы получите:
float(63.2925770283)
int(11621760)
Таким образом, кажется, что чем больше каждый элемент массива, тем больше времени занимает (на самом деле кажется справедливым) . Но для элементов, в 100 раз больших, вам не понадобится в 100 раз больше времени ...
Теперь с массивом 50000 элементов вместо 5000, что означает, что эта часть кода изменена:
$list = array_fill(0, 50000, str_repeat('1234567890', $num));
С $num = 1
вы получите:
float(158.236332178)
int(15750752)
Учитывая время, которое заняло 1, я не буду запускать его ни для $ num = 10, ни для $ num = 100 ...
Да, конечно, в реальной ситуации вы бы не делали это 10000 раз; так что давайте попробуем всего 10 итераций цикла for.
Для $num = 1
:
float(0.206310987473)
int(15750752)
Для $num = 10
:
float(0.272629022598)
int(24849832)
А для $num = 100
:
float(0.895547151566)
int(114949792)
Да, это почти 1 секунда - и совсем немного памяти использовалось ^^
(Нет, это не рабочий сервер: у меня достаточно большой предел памяти на этой машине для разработки ^^)
Итак, в конце концов, чтобы быть немного короче, чем эти числа - и, да, у вас могут быть числа, которые говорят, что вы хотите их - Я бы не сказал, что есть «предел», как в «жестко запрограммированном» в PHP, но в итоге вы столкнетесь с одним из них:
max_execution_time
(обычно на веб-сервере это никогда не превышает 30 секунд)
memory_limit
(на веб-сервере обычно не более 32 МБ)
- нагрузка, которую будет иметь ваш веб-сервер: во время работы одного из этих больших циклов сериализации потребовался 1 мой ЦП; если у вас на одной странице одновременно несколько пользователей, я позволю себе представить, что это даст; -)
- терпение вашего пользователя ^^
Но, за исключением случаев, когда вы действительно сериализуете длинных массивов больших данных , я не уверен, что это будет иметь большое значение ...
И вы должны принять во внимание, сколько времени / нагрузки на процессор при использовании этого кэша может помочь вам получить; -)
Тем не менее, лучший способ узнать это проверить себя на реальных данных; -)
И вы также можете взглянуть на то, что может Xdebug сделать, когда дело доходит до профилирования : эта ситуация одна из тех, для которых она полезна!