Forum Webscript.Ru
Программирование => PHP => Тема начата: Tronyx от 27 Июля 2002, 16:07:02
-
Что будет быстрее Unsirialize() или Explode(), данные хранятся в файле.
-
Tronyx
Кто сильнее - кит или слон?
Смотри:
array explode(string separator, string string [, int limit)
Returns an array of strings, each of which is a substring of string formed by splitting it on boundaries formed by the string separator. If limit is set, the returned array will contain a maximum of limit elements with the last element containing the rest of string.
unserialize() takes a single serialized variable (see serialize()) and converts it back into a PHP value. The converted value is returned, and can be an integer, float, string, array or object.
Перевести?
И еще почитай про Serialize() и implode().
ИМХО сравнение некорректно немного...
Что приметять зависит от того, какого типа данные храняться в файле.
-
Перевести?
Да. :)
ИМХО сравнение некорректно немного...
Да. Извини не корректно вопрос задал. Расшифровываю: как быстрее будет "добраться" до данных из файла? Хранить их в сериализованом виде или элементы разделять например "|", а потом explode`ом их разбивать.
ИМХО сравнение некорректно немного...
Что приметять зависит от того, какого типа данные храняться в файле
Задача: достать из файла (< 1 Kb) 2-3 массива с 3-4 элементами.
Если использовать explode:
$file=file("file.txt");
for ($i=0; $i $array[$i]=explode("|", $file[$i]);
}
Unserialize:
$file=file("file.txt");
$file=join("", $file);
Unserialize($file);
-
По моим тестам
explode - 0.0036240
unserialzie - 0.0021610
Только прежде чем производить unserialzie, нужно сначала сериализовать данные, что тоже отнимет время.
Хотя наверняка это время сильно зависит от размеров массива.
-
Задача: достать из файла (< 1 Kb) 2-3 массива с 3-4 элементами.
Explode однозначно...
GotZfild
прав
нужно сначала сериализовать данные
Лишняя операция.
-
нужно сначала сериализовать данные
Это не беда. Новые данные будут писаться очень редко
-
Tronyx
Т огда сам решай :)
-
Насколько я понимаю, сериализованные данные занимают больше одной строки.
А вообще вопрос, на мой взгляд, из серии бесполезных.
-
RomikChef
а вот мне кажется, что именно твой ответ и бесполезен. Прочитай сначала вопрос, а потом свой ответ.
Tronyx
в зависимости от типов данных - будет разная скорость. Лично я предпочитаю сериалайз, так как в таком случае ты не ограничиваешься на типе хранимых данных.
Представь например, как ты будешь хранить многомерный массив - т.е. сколько операций придется выполнить для его записи, чтения.
-
Stek
А я предпочитаю не доводить до того, чтобы приходилось хранить массивы.
Всегда можно обойтись без них, и это будет совместимо и удобно.
Про бесполезность я поясню.
Во-первых, совсем нетрудно потестить самому.
Во-вторых, я готов спорить, у него на сайте есть куда более животрепещущие проблемы и куда более серьезные дыры в производительности.
-
RomikChef
Может и так, но все таки не стоит на вопрос, при том нормальный, отвечать в духе "ну и фигню вы товарищ тут спрашиваете".
-
Stek
Если ты не понял моих слов, то это твоя проблема.
Я сказал, что это бесполезный вопрос. Это не тот вопрос, которому надо придавать такое уж внимание.
Но, пожалуй, я возьму свои слова обратно.
Тут действительно не было сказано о размере массива.
Если кто-то хочет хранить в сериализованном виде ленту новостей, то это дурная идея. Лучше разориться на 5 баксов и взять нормальный хостинг с базой данных.
-
Если кто-то хочет хранить в сериализованном виде ленту новостей, то это дурная идея. Лучше разориться на 5 баксов и взять нормальный хостинг с базой данных.
Во первых кто тебе сказал что у меня нет БД?! А во вторых это не лента новостей.
Я пишу скрипт который достаёт из БД контент (в зависимоти от URL, так как файл и папки виртуальные (прочти мою тему "виртуальные файлы и папки" там подробней рассказано)), затем вставляет его в шаблон. У каждой папки есть своё название, Title формируется путём "склеивания" этих названий, + для дюбой папки можно указать шаблон который будут наследовать все вложеные, использоваться будет самый последний шаблон.
И чтобы сэкономить на скорости (сделать меньше запросов к БД) я использую кеширование этой информации - сохраняю в файл массив названий папок, используемый шаблон и т.д. для конкретного URL (один URL - один файл). Если использовать explode это выглядет так:
заголовок1|заголовок2|...|заголовокN
Шаблон
ещё какой-нибудь параметр
Тут действительно не было сказано о размере массива.
Правда что ли! А это что такое?
> Задача: достать из файла (< 1 Kb) 2-3 массива с 3-4 элементами.
-
Я думаю, накладные расходы на работу с твоим "кэшем" равны скорости работы с базой. Ты вообще замерял?
-
Ты вообще замерял?
Нет, но при большой посещаемости и большой базе, думаю лучше для этого "кеша" использовать файлы.
-
А я думаю, что с базой будет удобнее.
Меньше сущностей - меньше глюков, меньше проблем.
Все равно ты контент достаешь из базы - ну и кто тебе мешает путь доставать?
А с файлами заморачиваться... Блокировки ставить, clearstatcache... оно тебе надо?
А при большой посещаемости надо не тайтлы кэшировать, а весь контент - статику генерить.
Не знаю, вот не очень я понимаю твоего вопроса. У меня столько дел на сайте - запросы оптимизировать, новые фичи добавлять... На такие, как твой просто времени не остается. Если сайт начинает тормозить - профилируем его, выделяем узкие места, и начинаем их выпрямлять.
-
Все равно ты контент достаешь из базы - ну и кто тебе мешает путь доставать?
Это ещё один запрос, а если новое поле в таблице с контентом создавать, то геморно будет переносить файлы из одной папки в другую, переименовывать...
А с файлами заморачиваться... Блокировки ставить, clearstatcache... оно тебе надо?
Пути это один из возможных видов кеширования, конечно же есть возможность кешировать весь контент.
У меня столько дел на сайте - запросы оптимизировать, новые фичи добавлять...
Так я тоже это делаю! С запросами уже вроде не плохо вот решил занятся "малым" и пинаю до совершенства.
-
А с файлами заморачиваться... Блокировки ставить, clearstatcache... оно тебе надо?
Проблемму то нашел :) Я себе для этого класс написал - и больше не вспоминаю.
А на сложном сайте кеширование сильно облегчает работу сервера.
-
Stek
Я понимаю кэширование ВСЕЙ страницы. Перевод в статику.
Я понимаю оптимизацию запросов.
Но кэшировать заголовок страницы при том, что весь контент берется из базы - я этого не понимаю.
-
Я понимаю кэширование ВСЕЙ страницы. Перевод в статику.
Я же сказал что это есть, на выбор даётся 4 варианта:
1. Кеширование абсолютно всей страницы.
2. Кеширование контента, затем он будет вставлен в дизайн.
3. Кеширование путей. Повторяю это убирает 1 запрос к БД и обработку результата (сравнительно большая), что тоже не плохо.
4. Не кешировать вообще.
при том, что весь контент берется из базы - я этого не понимаю.
Так ведь таблицы разные. В одной контент а в другой дерево папок. Чтобы достать инфу о загаловке, шаблоне... нужно сделать один запрос который достанет папки с нужными именами, затем нужно проверять вложеность этих папок (ведь может быть папка с таким же именем, но находящаяся в другой), и чтобы это каждый раз не делать я кеширую. Конечно же если включено кеширование контента то кешировать пути не нужно. Это довольно таки неплохой способ при минимуме затрат(нужно мало дополнительного места на диске).
Теперь понял?
P.S. В каком-то смысле это и есть оптимизация запросов :)
-
А как вставлять статичный документ? С помощью require() или file() ( echo join("", file("cash.html")); ). ИМХО если я не ошибаюсь то file(); "схавает" больше памяти.
-
readfile()
только статичные документы не "вставляют", а просто кладут в каталог веб-сервера и ставят на них ссылки.
Представь себе, есть такой способ представления данных.
-
только статичные документы не "вставляют", а просто кладут в каталог веб-сервера и ставят на них ссылки.
Представь себе, есть такой способ представления данных.
А ты почитай повнимательней предыдушие сообщения там сказано, что файлы и папки виртуальные и создавать их я небуду, а все закешированые страницы кидаются в отдельную папку.
-
Гы.
Дак я что. Я ничего.
Нехай будут в отдельной папке.
просто когда я буду переводиться на статику, это у меня займет в 10 раз меньше кода, будет работать быстрее и без ошибок :-)))
-
В принципе-то я понимаю, что у тебя система управления контентом, и все такое.
Просто лично мне все эти вещи не нравятся.
уж больно они усложняют систему и через какое-то время ее становится чертовски трудно поддерживать...
Я никогда не изменяю принципу KISS :)
-
Гы.
Дак я что. Я ничего.
Нехай будут в отдельной папке.
просто когда я буду переводиться на статику, это у меня займет в 10 раз меньше кода, будет работать быстрее и без ошибок :-)))
Сорри. Это я протормазил. ;) до меня самого это чуть позже дошло, а как сделать чтобы была полная статика ещё не совсем дошло :( Вот какие варианты приходят в голову:
1. Как-то через mod_rewrite узнать существует ли файл кеша и если да то переписать УРЛ на кеш, если нет то на скрипт. (но вроде это не реально).
2. Передавать на скрипт все запросы на .html файлы если файл кеша есть, а это будет такой же путь только файл - .htm делать Header(Location: ...);
3. Делать такое же дерево папок и файлов(не виртуальных) и не вы*быв@ться. (ИМХО ты вроде за этот вариант)
Если есть ещё какие-нибудь плиз подскажи.
-
Я думаю, второй - самый реальный.
А вообще для себя я буду делать так.
Кэш не автоматический ,а ручной.
анализируются самые посещаемые страницы.
Для них генерится статика.
А у тебя в базе, может, признак придумать какой-то, что эту страницу выдавать не из базы, а давать прямой линк.
Постой. А если так?
мод-реврайт направляет тебя на htm файл. Если его нету, то тогда уже обработчик 404 выдвет из базы?
Не, ккриво как-то...
-
Сорри. Это я протормазил. до меня самого это чуть позже дошло, а как сделать чтобы была полная статика ещё не совсем дошло Вот какие варианты приходят в голову:
1. Как-то через mod_rewrite узнать существует ли файл кеша и если да то переписать УРЛ на кеш, если нет то на скрипт. (но вроде это не реально).
2. Передавать на скрипт все запросы на .html файлы если файл кеша есть, а это будет такой же путь только файл - .htm делать Header(Location: ...);
Посмотри вот это
http://www.phpdevs.com/data/24/
Исходники есть, внутри - сплошная динамика, снаружи - уже как статика. Кеширование так же присутствует :)
В качестве обучающего примера - думаю сойдет :)
-
Я думаю, второй - самый реальный.
Но это опять же дерево папок нужно строить :( это я забыл. А вот если этот вариант немного улучшить:
Всё запросы на .html файлы "отправляются" на скрипт, затем он проверяет есть ли этот документ в кеше (а имя закешированого документа это путь, только все "/" заменяются на точку и расширение файла .htm, чтобы не зациклился), если есть то делает хедер локейшен на этот файл только вместо точек ставится "/", затем запускается mod_rewrite и переписывает этот путь на /cash/путь.с.точками.htm. Может это геморно?
Постой. А если так?
мод-реврайт направляет тебя на htm файл. Если его нету, то тогда уже обработчик 404 выдвет из базы?
Не, ккриво как-то...
Да мне это тоже в голову приходило, удобно, НО если кешировать довольно таки мало странц, будет лишняя нагрузка на сервер, смотри:
1. mod_rewrite переписывает УРЛ.
2. Apache ищет файл.
3. Apache даёт сигнал на ошибку.
4. Запускает новый процес на PHP.
5. Скрипт генерирует страницу.
Конечно если кешируется бОльшая часть страниц или даже все, просто кеша этой страницы ещё нет, то это ИМХО лучший вариант.
-
Tronyx
Блин, ну посмотри ты iCMS - я там эту проблему уже месяца четыре назад решил :)
-
CMS не плохая, но не доделаная и практически не имеет гибкости, тем не менее не плохая :) Админ интерфейс прикольный, мне очень понравилась навигация, в своей так же сделаю ;) На счёт кеширования там ИМХО глухо, а именно: делается файл в дириктории /cash, с именем закодированым с помощью md5() (что кодируется я толком не понял, не до этого), а потом (теперь самое интересное) данные из кеша достаются вот так:
unserialize(base64_decode(implode("", file($this->cach_dir."/".$dir.$file))));
Так что мой вариант кеширования (с инклудом) ещё не самый плохой ;)
-
Stek так это твоя! Блин ну я тормаз ;) Ну а твоё решение ИМХО тормозней моего.
-
и практически не имеет гибкости
По заказу строю на iCMS сайты любой констукции :)
По поводу кеша - это мой стандартный модуль кеширования. Его громозкость кода обусловленна тем, что, он предназначен не только для кеширования страниц, но и для кеширования массивов, объектов, элементов страниц и прочего.
Таким образом, если в странице меню делается сложными выборками и расчетами - мне достаточно сделать предварительные обработки, а готовый к употреблению объект записать в кеш, и потом уже его использовать .
Естественно, если необходимо кеширование только страниц - то все это можно сильно упростить, тем более с учетом того что iCMS построенна в основном на объектах.
-
По заказу строю на iCMS сайты любой констукции
А вдруг клиент тебе в последствии не сможет найти? Конечно это очень маловероятно, но всёже гибкость нужна!
Таким образом, если в странице меню делается сложными выборками и расчетами - мне достаточно сделать предварительные обработки, а готовый к употреблению объект записать в кеш, и потом уже его использовать.
Обычно это делается в шаблонизаторе. Или напиши разные функции.
Естественно, если необходимо кеширование только страниц - то все это можно сильно упростить
Это ты без проблем упростишь, а если заказчик купит только скрипт, а настройку и обслуживание не закажет? или в последствии захочет что-то изменить то прийдётся "рыться" в коде. Да и вообще что бы изменить способ кеширования лезть в код программы ИМХО очень не удобно.
З.Ы. И лучше напиши свой собственный шаблонизатор, который будет кешировать меню и т.д., а от FastTemplate тебе лучше отказаться его писали ещё для PHP3, уж очень он медленный.
-
А вдруг клиент тебе в последствии не сможет найти
И что ? Ты можешь привести пример сайто конструктора, где без программиста можно сделать сайт отличный от шаблона ?
Обычно это делается в шаблонизаторе
ты сможешь в шаблонизаторе кешировать объекты, массивы ? Кеш и шаблоны - совершенно разные вещи.
Это ты без проблем упростишь, а если заказчик купит только скрипт, а настройку и обслуживание не закажет
Скрипт бесплатный, и он во многом уступает другим скриптам. Деньги берутся не за скрипт, а за поддержку, за создание на нем сайтов.
З.Ы. И лучше напиши свой собственный шаблонизатор, который будет кешировать меню и т.д., а от FastTemplate тебе лучше отказаться его писали ещё для PHP3, уж очень он медленный.
IP II 600 / 256Ram с включенным кешированием держит порядка 300,000 реальных посетителей. Далее просто траффика для проверки не хватило.
Когда будут доставать проблеммы со скоростью, тогда и буду менять.
-
ты сможешь в шаблонизаторе кешировать объекты, массивы ? Кеш и шаблоны - совершенно разные вещи
А зачем тебе при создании кеша страницы кешировать объекты и массивы? ИМХО это совершенно не нужно.
Скрипт бесплатный, и он во многом уступает другим скриптам. Деньги берутся не за скрипт, а за поддержку, за создание на нем сайтов.
У тебя на сайте написано, возможно, что следующии версии будут за деньги, или ты хочешь переписывать его каждый раз, когда необходимо изменить какое-нибудь действие? А под заказчиком здесь можешь также понимать "простых" людей которые будут пользоваться твоей CMS бесплатно. Ведь не у всех такие же требования к CMS как у тебя.
Когда будут доставать проблеммы со скоростью, тогда и буду менять.
Но ведь это не правильно, лучше предусмотреть всё заранее, а тем более такую "мелочь".
-
А зачем тебе при создании кеша страницы кешировать объекты и массивы?
Ну как тебе сказать, некоторым заказчикам требуется больше чем просто меню с ссылками :D
У тебя на сайте написано, возможно, что следующии версии будут за деньги
И что ? Если я дойду таки до версии за деньги, то с моей стороны там будет полный саппорт.
В конце концов, цель любого продукта, так или иначе способствовать добыванию денег.
А по поводу скорости - то достаточно включить кеширование, чтобы забыть о всех проблеммах с темплейтами.
-
Ну как тебе сказать, некоторым заказчикам требуется больше чем просто меню с ссылками
А что они требуют?
А по поводу скорости - то достаточно включить кеширование, чтобы забыть о всех проблеммах с темплейтами.
А если места на диске мало? Кеш негде хранить? ИМХО лучше нормальный, быстрый шаблонизатор.
И что ? Если я дойду таки до версии за деньги, то с моей стороны там будет полный саппорт.
В конце концов, цель любого продукта, так или иначе способствовать добыванию денег.
И для каждого клиента ты будешь переписывать скрипт?
-
А если места на диске мало? Кеш негде хранить?
Издеваешся ? Теперь дисковое пространство копейки стоит. Даже для проекта стоимостью около 500 баксов, каждый месяц платить по 10 баксов за хостинг никогда проблем не составляет.
-
насчет кеширования страниц есть предложение посмотреть mod_accel _в_дополнение_ ко всему вышеизложенному
-
Antoxa
Уже не первый раз слышу о это модуле, кто то в разы у себя нагрузку снимал, по крайней мере из их утверждений.
Единственное но тут, как правило в таких вещах все зависит от хостера, и не всегда его можно уговорить на постановку дополнительного модуля.
Хотя с той же стороны, сайты с большой нагрузкой снимают свои сервера, и тут проблем в постановке своего софта нет.
-
Издеваешся ?
Нет. Просто сглупил :)
mod_accel
А что он именно делает?
-
кеширует ответы сервера, повторяю. ответы.
читать тут: http://sysoev.ru/mod_accel/