Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XML, DOM... и скорость 
:(
    Опции темы
dm9
Дата 19.9.2005, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Хочу задать несколько ламерских вопросов об XML, DOM и прочем. Сейчас я разбираюсь с CMS, основанной на XSLT-преобразовании. Всё сделано следующим образом. Генерируется большой XML и XSL, они представлены в виде строк (!). Ни о каком изначальном генерировании DOM-дерева речи не ведётся. Именно 2 стринга, а затем

$domxml = domxml_open_mem(WinToUTF8($sectionXML));
$domxsl = domxml_xslt_stylesheet($sectionXSL);
$result = $domxsl->process($domxml);
echo $domxsl->result_dump_mem($result);

У меня такой вопрос. Насколько с точки зрения производительности, то есть скорости выполнения преобразования, это оптимально или не оптимально? (Именно производительность, удобство работы с DOM-деревом мы в расчёт не берём.) Сейчас всё происходит таким образом. Генерится большая строка, затем она распарсивается, распарсивается XSLT, и в конце производится преобразование.

Правильно ли я понимаю, что если изначально мы представляем структуру в виде DOM-дерева, то затем можно проводить преобразование без дополнительных потерь на парсинг XML?


Это сообщение отредактировал(а) dm9 - 19.9.2005, 16:00
PM MAIL ICQ   Вверх
Sardar
Дата 19.9.2005, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



Потери на парсинг не очень большие, по сравнению с самим преобразованием.

Цитата(dm9 @ 19.9.2005, 14:29)
Правильно ли я понимаю, что если изначально мы представляем структуру в виде DOM-дерева, то затем можно проводить преобразование без дополнительных потерь на парсинг XML?

Да можно, так будет лучше не только в плане производительности, но и просто удобней с документом работать. Скорее всего твоя CMS использует DOM, а потом в конце генерит текст XML.

XSLT это не преобразование XML в HTML, это преобразование любого дерева(XML) в любое дерево(XML, XHTML...). Прежде чем сгенерить HTML, можно проводить несколько трансформаций, собирая большой документ из различных источников.

Технически можно генерить всю (X)HTML страницу последним преобразованием, хотя мне проще генерить отдельные части контента через XSLT, а потом полученную вёрстку вставлять в простейший шаблон. Плюсы в возможности простого кеширования результатов преобразований.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
dm9
Дата 19.9.2005, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Цитата(Sardar @ 19.9.2005, 17:27)
Скорее всего твоя CMS использует DOM, а потом в конце генерит текст XML.


Дык если бы.

Абсолютно всё делается таким образом:

Код

    function GetXML() {
      $xml = "<book
                id='{$this->id}'
                title='{$this->title}'
                author='{$this->author}'
                image='{$this->image}'";
      if (InString($this->image, '|')) {
         $str = explode('|', $this->image);
         $xml.= " image_small='{$str[0]}' image_big='{$str[1]}'";
      }
      $xml.='>';
      if ($this->type != null) {
         $xml .= $this->type->GetXML();
      }
      $xml .= "{$this->text}</book>";
      return $xml;
    }


Вот, собственно, что меня и удивило...


Цитата(Sardar @ 19.9.2005, 17:27)
Потери на парсинг не очень большие, по сравнению с самим преобразованием.


Ты уверен в этом? Эти слова основаны на каких-то реальных тестах? Типичный размер XML будет от 30 до 80 килобайт...

PM MAIL ICQ   Вверх
dm9
Дата 19.9.2005, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Я понимаю, что это зависит от сложности XSLT-преобразования, конечно... Но хотелось бы примерные данные, сколько ms займёт парсинг 30-100 килобайтного XML...

Чувствую, придётся мне самому исследлваниями заниматься...

PM MAIL ICQ   Вверх
AntonioBanderaz
Дата 20.9.2005, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 18



Ну дык сделай time() перед выполнением и вычти это из time() после выполнения и представляешь ввиде мс. smile


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
dm9
Дата 20.9.2005, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Уже...

Просто хотелось бы в сравнении с DOM получить результаты.

Вот, если кому интересно:

domxml_open_mem(WinToUTF8($sectionXML))
0,0633149147034 (много, блин...)

domxml_xslt_stylesheet($sectionXSL)
0,0268149375916

$domxsl->process($domxml)
0,039293050766

То есть сумма на всё это - порядка 0,128 сек. Только тут машина полностью в моём распоряжении, на реальном сервере помедленнее будет. Не знаю, конечно, но я привык к циферкам поменьше.

Впрочем, всё меркнет по сравнению с тем, сколько этот $sectionXML генерится. Всё сделано жутко неоптимально...

Это сообщение отредактировал(а) dm9 - 20.9.2005, 11:21
PM MAIL ICQ   Вверх
rax
Дата 17.2.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 4.6.2004
Где: Егорьевск

Репутация: нет
Всего: 1



Я пользуюсь xml + xslt уже около года, с небольшими сайтами (информационные на своей цмске) проблем не было - только плюсы, по сравнению со смарти и sql. Однако когда я столкнулся с генирированием на одной странице нескольких кусков с разных xsl шаблонов, да еще и если xml база внушительная, скорость была работы стала просто недопустимой.

Я думаю, есть 2 выхода: разбивать xml базы на разные файлы (в одной слишком много мусора, а сам domxml() занимает больше всего времени), либо хранить все в xml sql
PM MAIL WWW ICQ AOL YIM MSN   Вверх
IZ@TOP
Дата 17.2.2006, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 2
Всего: 73



Почитал, подумал. Сейчас писал новый двиг под РНР 5, по сравнению с прошлой версией (под четверку), работает немного медленее, но функционал возрос, и, фактически все один сплошной ООП - от простеших функций, до выдачи результов селектов с базы в виде объектов унаследованных от интерфейса итерации.
Я долго думал, много ли это, для полнофункционального движка (без оптимизации кода правда) 0.013, и решил что это вполне допустимо (хоть и без полной нагрузки). Сейчас старый двиг вырабатывает примерно 0.08 - 0.13 при загруженности всякого рода модулями и т.п. и сложной архитектуры построения разделов.
А на счет компоновки xsl - почему не юзать динамичное подключение шаблонов? Просто добавляем необходимые фрагменты ипортируя их в XSL документ и все. Хотя может для некоторых задач и вариант с генерацией кусочками пойдет.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
dm9
Дата 18.2.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Цитата(IZ@TOP @ 18.2.2006, 00:44 Найти цитируемый пост)
0.08 - 0.13


К сожалению, ни о чём не говорит без параметров сервера.

PM MAIL ICQ   Вверх
IZ@TOP
Дата 19.2.2006, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 2
Всего: 73



dm9, Semperon 2200. 512 ОЗУ.
Под FreeBSD на сервере работает в полтора раза быстрее.
Новый двиг тестирую на p4 2,8, 1GB ОЗУ.
На хостере по моему Xeon, 1,8 (вроде два), 1GB оперативки.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
IZ@TOP
Дата 27.2.2006, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 2
Всего: 73



dm9, да, если интересно, по сравнению с данным форумом (имею ввиду сам двиг, т.е. с несколькими форумами и небольшим кол. сообщ.), то форму работает вдвое медленее smile


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
dm9
Дата 28.2.2006, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



На самом деле, сравнивать сложно.

Я ориентируюсь на цифру 0.05 на средней машине разработчика (естественно, свободной от других напрягающих ЦП и диск процессов). Скажем, около 2 ГГц, 512 МБ. Иногда приходится опускаться до 0.1, хотя это уже очень медленно.

На хорошем вирт-хостинговом сервере нормальной загруженности (4 ЦП, Линукс) в этом случае получается в среднем раза в 2 меньше. Хотя, конечно, раз на раз не приходтся, если сайтов много на машине.

PM MAIL ICQ   Вверх
IZ@TOP
Дата 7.3.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 2
Всего: 73



dm9, в таком случае у меня 0.03 на моем (загруженном процессами) Semperon 2200+. Хотя думаю до 0.5 дойдет рано или поздно. Хотя как знать.

В общем я за XML руками и ногами + за грамотность разработчиков и оптимизаторов.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Alone
Дата 6.5.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 11.5.2003
Где: Dnepropetrovsk, U A

Репутация: нет
Всего: 6



Вот и скатились до мерки пиписьками... smile

Странно, а почему никто не учитывает транспортных затрат, которые в большинстве случаев в разы перекрывают затраты на генерацию контента?
 


--------------------
web developer/telecommunication specialist.
mailto: [email protected]
ICQ#28442924

PM MAIL WWW ICQ   Вверх
dm9
Дата 15.5.2006, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 1
Всего: 137



Цитата

Странно, а почему никто не учитывает транспортных затрат, которые в большинстве случаев в разы перекрывают затраты на генерацию контента?


Учитываем. Но волнует не это, а загрузка сервера - раз, работа на быстром канале - два (потому что жутко напрягает ждать на хорошей выделенке 5 секунд на страницу). Именно поэтому и интересует время исполнения.

И никто не меряется, это просто сравнение. В своё время мне эти цифры очень инетресны были. А доходить пришлось до этого самому.
 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: X технологии | Следующая тема »


 




[ Время генерации скрипта: 0.4386 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.