17.06.2009, 14:11
|
|
Пошаговый вывод скрипта для 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;
};
|
|
17.06.2009, 15:04
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
в JS нету функции задержки, хотя имеется эмуляция ее, вызывающая 100% загрузку процессора, что в данном случае явно не подходит
судя по всему ваш скрипт оперирует строками, из которых он и "собирает меню"
я не вижу способа сделать его асинхронным, для распределения нагрузки по времени
Но, подозреваю, что это и не помогло бы, потому что скорее всего осел ругается не из-за того что скрипт ест много ЦПУ, а наверно из-за того что формирует очень длинную строку
так как скрипт формирует строку, котору потом видиво выводит в браузер(по-крайней мере так выглядит из этого скрипта), то можно было бы попытатся выводить ноды верхнего уровня по-отдельности
без остального сркипта, и образца его применения, трудно сказать, можно ли что-то сделать, но в любом случае, это уже не помощь, а работа
|
|
17.06.2009, 15:16
|
|
А нельзя ли сделать скрипт, который бы нажимал автоматом кнопку "нет" при предложении IE остановить выполнение скрипта (окно появляется несколько раз)? Если можно, то какая цена его? Пример этой "беды" здесь: http://www.plus38.info/index.php?opt...New&Itemid =2
|
|
17.06.2009, 15:34
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от Zidky
|
скрипт, который бы нажимал автоматом кнопку "нет" при предложении IE остановить выполнение скрипта
|
такой срипкт в принципе невозможен
|
|
17.06.2009, 15:40
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
А зачем вы грузите дерево полностью?
лучше было бы грузить дерево только по тем частям, которые выбрал пользователь
или генерировать дерево на стороне сервера
|
|
17.06.2009, 15:53
|
|
А нет ли безотказного сценария (примера), по которому можно заставить скрипт исполнять не в браузере, а на сервере?
|
|
17.06.2009, 16:05
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
только переписать генерацию дерева под ноль, чтобы оно генерировалось на серверном языке, анпример ПХП
|
|
17.06.2009, 17:55
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
эта библиотека не предназначена для таких трюков, как выяснилось
как минимум надо дописать изрядно функционала в ней
но лучше использовать какую-нибудь более современную библиотеку генерации дерева, расчитанную на такие трюки
стоимость своего труда по доработке этой библиотеки я оцениваю в 100$
так много в первую очередь, из-за того что она не предназначена для таких трюков, и над этим придется изрядно покорпеть
|
|
17.06.2009, 18:10
|
|
Жаль, но такой бюджет не выделят... Извините.
|
|
|
|