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]