IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   str_replace and huge strings зкщидуь(+) (https://www.imho.ws/showthread.php?t=66910)

Sheryld 24.08.2004 16:56

str_replace and huge strings problem(+)
 
пытаюсь сделать что-то вроде:

Код:

$sourceString = str_replace('placeholder', $hugeString, $sourceString);
в качестве $hugeString выступает строчка размером в несколько мегабайт:)

важные детали:

этот код находится в методе некоторого класса. этот метод самый "прожорливый", если верить профайлеру.

там сначала строчка собирается из массива в цикле, а уже затем происходит replace.

так вот на рабочем компе все ок. на хостинге скрипт захлебывается.

скрипт, который использует даный класс, работает по следующией схеме:

1. сначала идет запрос к бд.

2. затем на основе выборки идут еще несколько запросов(больших, несколько тыс. записей).

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

далее при обработке(fetching). в поле класса(типа array) добавляется новый элемент, т.е. массив постоянно растет.

затем после окончания обработки всех записей вызывается тот самый "прожорливый" метод, который делает единую строку из массива и вставляет ее в другую строку(см. пример выше).

3. затем результат должен записываться в файл.

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


4. класс находится в отдельном файле от скрипта.

replace - нельзя использовать для больших строк? или я концептуально ошибся?

is_absent 25.08.2004 11:53

Цитата:

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

Sheryld 25.08.2004 14:17

дык, я стараюсь максимально отделить код от представляения...

is_absent 25.08.2004 14:23

если это простая конкатенация, то что тут отделять?
собрал строку -- отдал методу, который будет ее отображать. лучше по ссылке.

NarcomBAT 26.08.2004 08:58

если я правильно понял то:

сначала формируется массив(например 3 Mb),
затем из массива создается одна строка (еще 3 Mb)
затем $sourceString еше 3 Mb
Итого: 9 Mb. (конечно если не передавать значения по ссылке)

а у тебя на хостере нет ограничения на размер выполняемого скрипта?


Часовой пояс GMT +4, время: 14:32.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.