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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Много ли памяти выделяется, Выделеная память, обход дерева 
:(
    Опции темы
acdcee
Дата 25.8.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот не давно написал целый класс, даже библиотеку для своих нужд.
Смысл в библиотеки в том что вывод и работа с html тегами представлена как в JS технологией DOM.
Т.е каждый узел имеет свои свойства и прочее.

Так вот при выводе уже переведенного с объектов дерево html тегов в строку, столкнулся с такими проблемами как скорость загрузки и выделеной памяти.

При разборе более 500 тегов: выделяется памяти около 4 мегабайт, скорость загрузки документа (в браузер) 0,200 приблизительно.
При разборе более 2000 тегов: выделяется памяти около 8 мегабайт, скорость соотвественно упала где то до 0,700 приблизительно.

Вопрос
В чем причина упадка скорости.
Почему в некоторых ситауциях не работает такая проверка как
Код

class bla {

function bla_bla() {
static $check = array();
if(count($check) == 0) {
  /* если count($check) > 0 то ничего не должно происходить т.е разборка документа должна быть единожды обработана,
      а она постоянная*/
}
}
}

И второе по какому принципу dump_mem строить документ, и сколько памяти выгружается для этого, зависит ли это от оюъема загруженного в него документа.

К чему все было сказано, да к тому что таким образом я к примеру меняю аттрибут класса <div class="test"> через метод getElementById своего класса ( т.е получаю объект данного узла и меняю значение аттрибута class на то что мне нужно без всяких там прописей html в php)
и динамически вывожу на экран посетителя. 
В принцепе скорость нормальная на загрузку и сервер не виснет.

Как тут и что можно оптимизировать????
Плюс еще есть parser шаблонов.
PM MAIL   Вверх
krundetz
Дата 25.8.2008, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

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



acdcee, а тестировали на сервере или на домашнем компе?

Насколько я помню в PHP есть расширения которые позволяют работать с DOM документами напрямую может вм стоит посмотреть в их сторону.


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
sTa1kEr
Дата 25.8.2008, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(acdcee @  25.8.2008,  17:01 Найти цитируемый пост)
Почему в некоторых ситауциях не работает такая проверка как

Значит массив в какой-то момент времени обнуляется. Мистики не бывает.

Цитата(acdcee @  25.8.2008,  17:01 Найти цитируемый пост)
И второе по какому принципу dump_mem строить документ, и сколько памяти выгружается для этого, зависит ли это от оюъема загруженного в него документа.

Целиком загружает документ в память и полностью его парсит.

Цитата(acdcee @  25.8.2008,  17:01 Найти цитируемый пост)
Как тут и что можно оптимизировать?

XMLReader и XMLWriter
PM MAIL   Вверх
acdcee
Дата 27.8.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть такие функции как xml_create_object и прочее, точную название не помню уже давно в мануал не лазил.
Ну к примеру не скомпилирован данный php движек в сторону этих функций, и уже видел такой пример. Дальше что мне делать ???  smile 
Вот и приходится самому писать...

А как на счет того чтобы при парсинге собрать данный класс, засунуть его в serialize а потом с этого файла делать вот так к примеру
Код

include_once "dom_document.php";
// какая то функция чтения файла dom_document_bla_bla.dom
$document = unserialize($string_object_dom);

$document->blabla


т.е я пропарсил весь документ, в сериализе засунул данный класс и всех потомков по дереву, и при проверке больше необращаюсь к парсингу.
Так как serialize сохраняет и ссылки и к примеру nodeName уже будет иметь имя тега, можно вызывать экземпляр класса dom_document
И дальше им пользоваться, при чем appendChild и прочее не так уж в движке часто используются и что самое главное сегодня тестровал уже напрочь вылизанный класс, вся потеря памяти и большой жер идет при парсинге и загоне тегов в объекты.

Как такой вариант для работы над классами?????

Плюс что еще не мало важно, это включения таких методов как innerHTML и innerText smile

Добавлено через 6 минут и 42 секунды
Тестировал и на сервере и на локальной машине.

Наверно сервер мощноватый был - скорость загрузки была 0.090 памяти кушал около 8 метров
Локальный сервер выдавал не много хуже - скорость 0.600 память 8.9 метров

XMLReader и XMLWriter  - тут будут проблемы с тегами и как xml_parse будет ругаться на DOCTYPE c аттрибутами PUBLIC
Плюс данные функции не корректно себя ведут с тегами meta input и не каждый дизайнер будет их править
У меня же они автоматом исправлялись
Плюс как мне известно в скорости не большой у них отрыв.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




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


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

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