JsonRestStore Dojox загружает одну и ту же вещь несколько раз - PullRequest
1 голос
/ 31 августа 2011

Я использую ленивое дерево загрузки в проекте веб-приложения; однако я столкнулся с каким-то странным поведением. Кажется, простое дерево с 3 уровнями вызывает 7 запросов на корневую структуру. Посмотрев на официальный тест дерева JRS, я не уверен, нормально ли это или нет.

Посмотрите на этот пример: http://download.dojotoolkit.org/release-1.6.1/dojo-release-1.6.1/dijit/tests/tree/Tree_with_JRS.html

Когда я посещаю его, мой браузер делает 5 запросов на корневую структуру. Мой единственный вопрос: почему?

Редактировать : Стоит отметить, что этого не происходит с додзё 1.5 или ниже.

Вот как это выглядит в инспекторе (Chrome): Chrome Inspector

Ответы [ 2 ]

1 голос
/ 13 марта 2012

наконец-то я нашел решение этой проблемы, благодаря этому посту по интересам додзё: thisisalink .

В основном, в dojo 1.6 dijit.tree.ForestStoreModel был расширен несколькими новыми функциями, похожими на крючки (я полагаю, из-за работы, выполненной с TreeGrid). Один из них, onSetItem, вызывается после раскрытия узла дерева (таким образом, он переходит из предварительно загруженной в полностью загруженную при использовании хранилища lazyLoading). В базовой реализации эта функция вызывает _requeryTop(), которая запрашивает все корневые элементы.

для нашего приложения мы могли бы просто заменить dijit.tree.ForestStoreModel на нашу реализацию digicult.dijit.tree.ForestStoreModel, где onSetItem и onNewItem не вызывают this._requeryTop.

К сожалению, недостаточно создать подкласс ForestStoreModel, поскольку в функциях есть вызовы this.inherited(arguments);, которые не могут быть легко заменены, поэтому нам пришлось скопировать весь класс (скопировать класс, переименовать, закомментировать две строки - проще всего) исправление в течение долгого времени :-)) - это может вынудить нас снова изменить класс, как только мы обновим dojo до еще более новой версии.

0 голосов
/ 24 апреля 2014

Я также столкнулся с проблемами с производительностью дерева dijit при наличии дерева с 10000+ узлами, которые должны быть загружены одновременно, с ~ 3000 элементами на самом верхнем уровне. В дереве был только один фиктивный корневой узел, который загружает все дерево при первом клике с помощью вызова ajax.

В этом случае создание дерева заняло более 1 минуты для загрузки, и я получил всплывающее диалоговое окно «Остановить выполнение этого скрипта» в IE8.

После нескольких шагов оптимизации дерево теперь загружается в течение 2 секунд во всех основных браузерах (включая IE8-IE11).

Первая оптимизация, которую я сделал, использовала dijit/tree/ObjectStoreModel в качестве модели дерева и dojo/store/Memory в качестве хранилища данных.

Это ускорило вставку узлов json ответа ajax в хранилище данных дерева.

Вторая оптимизация касалась медленного создания узлов дерева. Это потребовало больше усилий, чтобы исправить:

Мне пришлось расширить dijit/Tree и переопределить функцию setChildItems() (часть, которая вызывает функцию _createTreeNode()).

Я сохранил всю логику setChildItems() без изменений, просто добавил распараллеливание создания узлов дерева с помощью этой техники:

http://www.picnet.com.au/blogs/Guido/post/2010/03/04/How-to-prevent-Stop-running-this-script-message-in-browsers.aspx

Надеюсь, это поможет, если нужно, я могу опубликовать исходный код моего обходного пути

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...