- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Сугубо по str_replace, его можно оптимизировать, примерно в 3 раза, но в мащтабе вселенной это не так существенно ))
А вот file_put_contents средствами php никак не оптимизируешь. Тут либо вичестер менять либо подход к програмироваю. Непонтяно для какой цели Вам 1000 одинаковых файлов? если можно держать шаблон текста и патерна поиска и уже динамически генерировать и отдавать текст.
Пожалуйста :)
Прирост скорости в несколько раз должен быть. Или вам больше нужно?
да хотябы раз в 5-10 поднять, сейчас в моём варианте 1000 файлов генерируется за 5 минут :(
вариант LEOnidUKG хорош, но не понятна реализация :( сейчас вот хочу попробовать подобную функцию написать чтобы на входе получала путь (куда сохранять файл) и содержимое. Копаю курл.
LEOnidUKG, а если file_put_contents в одном цикле около 7ми, не будут они конфликтовать или например ошибки с записью файлов возможны? Если бот не закончит запись, а тут ему ещё один GET запрос прилетает? :)
Unsiker, спасибо! Код для примера привёл, т.е. так то сохраняются файлы разные, я то изначально и решил что вся проблема в str_replace, так как именно эта функция преобладала в моём коде, но оказывается вот как всё повернулось :)
Попробуйте немного поменять алгоритм работы этого рерайтера (если не ошибаюсь). В цикле формируйте один (2-3, но не 1000) файл, а вне цикла его уже пишите на диск.
Попробуйте немного поменять алгоритм работы этого рерайтера (если не ошибаюсь). В цикле формируйте один (2-3, но не 1000) файл, а вне цикла его уже пишите на диск.
т.е. записывать сначало данные в массив, а потом из массива в файлы? Всёравно циклом вытаскивать элементы с массива придётся :(
т.е. записывать сначало данные в массив, а потом из массива в файлы? Всёравно циклом вытаскивать элементы с массива придётся :(
Нет, если эти файлы не конечный, а промежуточный этап хранения данных, то лучше один раз записать большой файл, чем 1000 раз маленькие. Если нужны именно 1000 маленьких файлов, то боюсь вы упираетесь в скорость файловой системы, и смотреть лучше именно в сторону SSD.
Весь алгоритм порочный, не держите данные в файлах во время работы скрипта а держите в переменных, а потом в конце работы сохраняйте.
Запись в файлы можно увеличить наверно в сотни раз -используйте memcache для записи (кроме контнта писать и флаг -сохранен ли контент в файл) и один дополнительный скрипт в фонорвом режиме, который бы обслуживал данные в memcache - данные не сохраненные (с флагом) писать на диск. Тогда все конкурирующие скрипты будут работать исключително с данными в памяти, а дополнительный скрипт будет сбрасывать данные на диск. Это так вкратце, главное чтобы время жизни в памяти было больше времени ожидания на запись.
Всем спасибо за внимание к проблеме.
Оказывается действительно в коде дело.
Вставил такую функцию:
Раскидал по коду в разных частях
И выявил 2 функции, которые очень тормозили процесс, переписал их и сейчас скорость вполне приличная :)
Отпишусь уж.
Вызывается:
http://site.ru/script.php?start=1&end=100
следующий запускаете:
http://site.ru/script.php?start=101&end=200
и т.д.
Чтобы не замарачиваться и руками прописывать, то можно сделать 1 файлик:
<?
file_get_contents('http://site.ru/script.php?start=1&end=100');
file_get_contents('http://site.ru/script.php?start=101&end=200');
?>
и вызвать его один, а он остальные запустит сразу.