I just found that the browser appears to be part of the problem. I am
running IE6 with Windows 2000...so SP1. I ran the same test with IE7 and
the same test took about 10 seconds. I used a Windows Vista Ultimate box
for the IE7 test, but the hardware should be pretty close between the two
boxes (e.g. the same amount of RAM). I am running Tomcat with Wicket on the
same 2000 box I am doing my testing on, but I think the speed problem
happens client side. I ran the same test on the 2000 box with Firefox 2.0
and it took about 5-6 seconds for the same operation that took about 25
seconds in IE. This leads me to believe that my speed problem is browser
related.
Also, my test includes expanding a bunch on nodes. When I did the expand in
both IE browsers I started to get a delay when expanding the nodes. I did
the same test in Firefox and did not notice a delay.
Matej Knopp-2 wrote:
>
> Hi,
>
> you shouldn't do target.addComponent(tree). You shouldo only call
> tree.upateTree() (or tree.updateTree(target), should do the same
> thing). Also you could consider using DefaultTreeModel.insertNodeInto
> instead of parent.addNode, as it automatically fires the listener for
> you.
>
> Btw. I was thinking of some code I could actually run (so also the
> page with tree and the prebuit tree). Thus if this answer doesn't help
> your problem you can consider providing a quickstart project I can use
> to reproduce it.
>
> -Matej
>
> On Sat, Mar 15, 2008 at 12:57 AM, jeredm <[EMAIL PROTECTED]>
> wrote:
>>
>> Here is the code that pops up a modal for the user to enter a new option
>> for
>> a
>> multiple choice question. When the modal returns I add the object it
>> sends
>> back to
>> a node and then add the the node to the tree. Finally, I refresh the
>> tree.
>>
>> The BaseTreeNode is an extended DefaultMutableTreeNode. The
>> model on my link tree is a set of BaseTreeNodes...so
>> tree = new MWLinkTree("tree", new
>> DefaultTreeModel(rootBaseTreeNode)){...};
>>
>> I don't know if this will be much more help. Keep in mind that I had
>> 875
>> nodes that were
>> in an expanded state during the tests. Thanks again for your help.
>>
>>
>> MWAjaxSubmitLink newButton = new MWAjaxSubmitLink("newButton",
>> indicatorImg,
>> feedback){
>> private static final long serialVersionUID = 1L;
>>
>> @Override
>> protected void onSubmit(AjaxRequestTarget target, Form form) {
>> ARGS.addParam("QuestionPk", option.getQuestionPk());
>> modal.setContent(new
>> Exam_QuestionsNewOptionPanel(modal.getContentId(),
>> ARGS));
>>
>> modal.setWindowClosedCallback(new
>> MWModalWindow.WindowClosedCallback(){
>> private static final long serialVersionUID = 1L;
>>
>> public void onClose(AjaxRequestTarget target){
>> QuestionOption newOption =
>> (QuestionOption)ARGS.getParam("NewQuestionOption");
>>
>> // Check to see if the action was canceled
>> if(newOption != null){
>> PageData passArgs = new PageData();
>> passArgs.addParam("QuestionOption", newOption);
>>
>> TreeNodeFactory factory = TreeNodeFactory.getObject();
>> BaseTreeNode newNode = factory.buildReplaceNode(treePanel,
>> StringUtil.truncateForList(newOption.getShortDesc(), 18),
>> "QuestionOption",
>> newOption, passArgs, "Exam_QuestionsOptionPanel", "swapPanel",
>> TreeNodeState.NONE);
>>
>> // ADD NEW NODE HERE --------------------------------
>> // the node is the selected node
>> ((BaseTreeNode)node.getParent()).add(newNode);
>>
>> // REFRESH THE TREE HERE -----------------------------
>>
>> DefaultTreeModel model =
>> (DefaultTreeModel)tree.getModelObject();
>> int[] changes = new
>> int[]{model.getIndexOfChild(newNode.getParent(), newNode)};
>> model.nodesWereInserted((TreeNode)newNode.getParent(),
>> changes);
>>
>> target.addComponent(tree);
>> }
>> }
>> });
>>
>> modal.show(target);
>>
>>
>> target.appendJavascript("document.getElementById('answerDesc').select()");
>> target.addComponent(this.feedback);
>> }
>> };
>> form.add(newButton);
>>
>>
>>
>> Matej Knopp-2 wrote:
>> >
>> > Sorry, I meant the updateTree method. Anyway, 23 seconds seems quite a
>> > lot to me. Any chance you could submit a stripped down example I can
>> > take a look at?
>> >
>> > -Matej
>> >
>> > On Fri, Mar 14, 2008 at 6:01 PM, jeredm <[EMAIL PROTECTED]>
>> > wrote:
>> >>
>> >> I added the following code and it correctly refreshed the node:
>> >>
>> >> DefaultTreeModel model = (DefaultTreeModel)tree.getModelObject();
>> >> int[] changes = new int[]{model.getIndexOfChild(parentNode,
>> newNode)};
>> >> model.nodesWereInserted((TreeNode)parentNode, changes);
>> >>
>> >> The time difference seemed close to invalidateAll().
>> invalidateAll()
>> >> took
>> >> about 24 seconds while the new method took 23 seconds. It is likely
>> >> that
>> >> they are the same speed as I was counting in my head and only ran
>> the
>> >> test
>> >> once. The test was with 875 nodes open in the tree...so that is
>> about 1
>> >> second for every 35 nodes. I think a typical user will have about
>> 90
>> >> nodes
>> >> in the tree at the most and 30 on average, so between 2.5 and 1
>> >> second(s) to
>> >> wait for the node to display after clicking save. The speed I am
>> seeing
>> >> may
>> >> just be the time it takes to render in the browser. If that is the
>> >> case,
>> >> then I am fine with it. I just want to make sure I am correctly
>> >> updating
>> >> the tree and not making it work harder than it needs to.
>> >>
>> >> I also tried tree.updateTree() after I added the node and found that
>> it
>> >> did
>> >> not solve the refresh problem. When you said call update() on the
>> model
>> >> what function should I be calling (I don't see update in the API)?
>> >>
>> >> Thanks for your help!
>> >>
>> >>
>> >>
>> >>
>> >> Matej Knopp-2 wrote:
>> >> >
>> >> > Make sure your tree model fires the appropriate events when your
>> tree
>> >> > is modified. The Tree implementation should properly update the
>> >> > changed portions of tree (assuming you call the update() method).
>> >> >
>> >> > -Matej
>> >> >
>> >> > On Fri, Mar 14, 2008 at 1:27 AM, jeredm
>> <[EMAIL PROTECTED]>
>> >> > wrote:
>> >> >>
>> >> >> I have a LinkTree where am adding new nodes via AJAX where the
>> node
>> >> is
>> >> >> not
>> >> >> visually refreshing until I call myLinkTree.invalidateAll();.
>> The
>> >> >> problem
>> >> >> is that the tree refresh takes too long when I have a bunch of
>> nodes
>> >> >> displayed. AbstractTree.invalidateAll() appears to "redraw" the
>> >> whole
>> >> >> tree,
>> >> >> but I only need to "redraw" the single node (I may be wrong on
>> this
>> >> and
>> >> >> it
>> >> >> may be working exactly as I need it to, but it is slow).
>> >> >>
>> >> >> My basic setup is a tree on the left that dynamically swaps out
>> >> panels
>> >> >> via
>> >> >> AJAX on the right based on the node selected. The tree itself
>> only
>> >> >> starts
>> >> >> with the root and first children. All first children load their
>> >> child
>> >> >> nodes
>> >> >> via an AJAX call on expand. These nodes will correctly refresh
>> as
>> >> the
>> >> >> nodes
>> >> >> are added and then the parent is expanded. I cannot collapse
>> and
>> >> >> re-expand
>> >> >> the parent node in this case as expanding a node would cause the
>> >> tree to
>> >> >> close nodes the user has already opened. What I need is to be
>> able
>> >> to
>> >> >> insert a node like so...
>> >> >>
>> >> >> - My Root
>> >> >> |--First Child
>> >> >> |-- First Grandchild
>> >> >> |-- NEW NODE
>> >> >> |-- Last Grandchild
>> >> >>
>> >> >> I need the First Grandchild and Last Grandchild to already be
>> >> expanded
>> >> >> and
>> >> >> displaying before I add NEW NODE.
>> >> >>
>> >> >> --
>> >> >> View this message in context:
>> >> >>
>> http://www.nabble.com/LinkTree-Node-Refresh-tp16041813p16041813.html
>> >> >> Sent from the Wicket - User mailing list archive at Nabble.com.
>> >> >>
>> >> >>
>> >> >>
>> >> ---------------------------------------------------------------------
>> >> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> >> >> For additional commands, e-mail: [EMAIL PROTECTED]
>> >> >>
>> >> >>
>> >> >
>> >> >
>> >> >
>> >> > --
>> >> > Resizable and reorderable grid components.
>> >> > http://www.inmethod.com
>> >> >
>> >> >
>> ---------------------------------------------------------------------
>> >> > To unsubscribe, e-mail: [EMAIL PROTECTED]
>> >> > For additional commands, e-mail: [EMAIL PROTECTED]
>> >> >
>> >> >
>> >> >
>> >>
>> >> --
>> >> View this message in context:
>> >> http://www.nabble.com/LinkTree-Node-Refresh-tp16041813p16048613.html
>> >>
>> >>
>> >> Sent from the Wicket - User mailing list archive at Nabble.com.
>> >>
>> >>
>> >>
>> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> >> For additional commands, e-mail: [EMAIL PROTECTED]
>> >>
>> >>
>> >
>> >
>> >
>> > --
>> > Resizable and reorderable grid components.
>> > http://www.inmethod.com
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: [EMAIL PROTECTED]
>> > For additional commands, e-mail: [EMAIL PROTECTED]
>> >
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/LinkTree-Node-Refresh-tp16041813p16062572.html
>>
>>
>> Sent from the Wicket - User mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>
>
> --
> Resizable and reorderable grid components.
> http://www.inmethod.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
--
View this message in context:
http://www.nabble.com/LinkTree-Node-Refresh-tp16041813p16097033.html
Sent from the Wicket - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]