Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.06.2009, 14:11
Zidky
 
Сообщений: n/a

Пошаговый вывод скрипта для IE всех версий.
Здравствуйте!

Помогоите, пожалуйста, разобраться в скрипте меню "Dtree". При выводе через него на страницу большого меню (около 2000 пунктов) IE всех версий ругаются, что скрипт на данной странице может вызвать зависание браузера и спрашивает продолжить выполнение или нет. Если нажать продолжить - скрипт работает, но нужно сделать чтоб это предупреждение не показывалось.

Думаю сделать пошаговый вывод меню, но очень плаваю в javascript

Помогите, пожалуйста...

Если не ошибаюсь, то формирование происходит именно здесь. Как бы поставить сюда задержку или вывод не сразу, а с интервалом маленьким частями?

// Outputs the tree to the page

dTree.prototype.toString = function() {

	var str = '<div class="dtree">\n';

	if (document.getElementById) {

		if (this.config.useCookies) this.selectedNode = this.getSelected();

		str += this.addNode(this.root);

	} else str += 'Browser not supported.';

	str += '</div>';

	if (!this.selectedFound) this.selectedNode = null;

	this.completed = true;

	return str;

};



// Creates the tree structure

dTree.prototype.addNode = function(pNode) {

	var str = '';

	var n=0;

	if (this.config.inOrder) n = pNode._ai;

	for (n; n<this.aNodes.length; n++) {

		if (this.aNodes[n].pid == pNode.id) {

			var cn = this.aNodes[n];

			cn._p = pNode;

			cn._ai = n;

			this.setCS(cn);

			if (!cn.target && this.config.target) cn.target = this.config.target;

			if (cn._hc && !cn._io && this.config.useCookies) cn._io = this.isOpen(cn.id);

			if (!this.config.folderLinks && cn._hc) cn.url = null;

			if (this.config.useSelection && cn.id == this.selectedNode && !this.selectedFound) {

					cn._is = true;

					this.selectedNode = n;

					this.selectedFound = true;

			}

			str += this.node(cn, n);

			if (cn._ls) break;

		}

	}

	return str;

};
Ответить с цитированием
  #2 (permalink)  
Старый 17.06.2009, 15:04
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

в JS нету функции задержки, хотя имеется эмуляция ее, вызывающая 100% загрузку процессора, что в данном случае явно не подходит
судя по всему ваш скрипт оперирует строками, из которых он и "собирает меню"
я не вижу способа сделать его асинхронным, для распределения нагрузки по времени
Но, подозреваю, что это и не помогло бы, потому что скорее всего осел ругается не из-за того что скрипт ест много ЦПУ, а наверно из-за того что формирует очень длинную строку
так как скрипт формирует строку, котору потом видиво выводит в браузер(по-крайней мере так выглядит из этого скрипта), то можно было бы попытатся выводить ноды верхнего уровня по-отдельности
без остального сркипта, и образца его применения, трудно сказать, можно ли что-то сделать, но в любом случае, это уже не помощь, а работа
Ответить с цитированием
  #3 (permalink)  
Старый 17.06.2009, 15:16
Zidky
 
Сообщений: n/a

А нельзя ли сделать скрипт, который бы нажимал автоматом кнопку "нет" при предложении IE остановить выполнение скрипта (окно появляется несколько раз)? Если можно, то какая цена его? Пример этой "беды" здесь: http://www.plus38.info/index.php?opt...New&Itemid =2
Ответить с цитированием
  #4 (permalink)  
Старый 17.06.2009, 15:34
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Zidky
скрипт, который бы нажимал автоматом кнопку "нет" при предложении IE остановить выполнение скрипта
такой срипкт в принципе невозможен
Ответить с цитированием
  #5 (permalink)  
Старый 17.06.2009, 15:40
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

А зачем вы грузите дерево полностью?
лучше было бы грузить дерево только по тем частям, которые выбрал пользователь
или генерировать дерево на стороне сервера
Ответить с цитированием
  #6 (permalink)  
Старый 17.06.2009, 15:53
Zidky
 
Сообщений: n/a

А нет ли безотказного сценария (примера), по которому можно заставить скрипт исполнять не в браузере, а на сервере?
Ответить с цитированием
  #7 (permalink)  
Старый 17.06.2009, 16:05
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

только переписать генерацию дерева под ноль, чтобы оно генерировалось на серверном языке, анпример ПХП
Ответить с цитированием
  #8 (permalink)  
Старый 17.06.2009, 16:19
Zidky
 
Сообщений: n/a

Вы можете добавить в этот скрипт, чтоб он генерировал только часть дерева, а при открывании категории вторую часть собирал и т.д. как Вы описали выше. Сколько это стоит?

Скрипт по ссылке: http://plus38.info/components/com_so...dtree/dtree.js
Ответить с цитированием
  #9 (permalink)  
Старый 17.06.2009, 17:55
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

эта библиотека не предназначена для таких трюков, как выяснилось
как минимум надо дописать изрядно функционала в ней
но лучше использовать какую-нибудь более современную библиотеку генерации дерева, расчитанную на такие трюки
стоимость своего труда по доработке этой библиотеки я оцениваю в 100$
так много в первую очередь, из-за того что она не предназначена для таких трюков, и над этим придется изрядно покорпеть
Ответить с цитированием
  #10 (permalink)  
Старый 17.06.2009, 18:10
Zidky
 
Сообщений: n/a

Жаль, но такой бюджет не выделят... Извините.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как присвоить текст строке состояния для всех браузеров? Tend Общие вопросы Javascript 4 14.05.2009 16:38
Вызов скрипта для Opera Andrew_S Общие вопросы Javascript 8 25.09.2008 12:23