Hi Harbs, That's fantastic ! That means, that I could use a normal DataGrid and "emulated" the infinite behaviour ? If you managed time to push the bead with a example of use, would be great (when you have time).
But, don't forget that the user can grab the scroll bar and drop somewhere. Harbs <harbs.li...@gmail.com> escreveu no dia quarta, 26/04/2023 à(s) 10:26: > The way I handle performance in my app is with requestAnimationFrame. > > Stash an array of your data providers and add them i.e. 20 at a time: > > private function handleScrollEnd():void{ > for(var i:int=0;i<20;i++){ > if(pendingTags.length){ > // shift the first item and add it > to tags > tags.addItem(pendingTags.shift()); > } else { > break; > } > } > tagsList.dataProvider = tags; > if(pendingTags.length){ > requestAnimationFrame(handleScrollEnd); > } > } > > This makes things very snappy. > > Another thing to look out for in terms of performance: Don’t create any > unnecessary SVG elements (especially) in your itemRenderers. They are huge > performance killers. > > Somewhat related: > > I recently learned about IntersectionObservers and it’s greatly improved > my infinite scrolling code: > > > private var gridObserver:Object; > private var observedItem:DataItemRenderer; > private function observeGridItem(lastIndex:int):void{ > if(!gridObserver){ > gridObserver = new > window["IntersectionObserver"](handleGridItemIntersection, { > root: view.images.element, > rootMargin: "0px", > threshold: 0.1 > }); > } > unobserveGridItem(); > var dataContainerView:DataContainerView = > prefUtils.treeLayout ? view.imageTree.view as DataContainerView : > view.imageGrid.view as DataContainerView; > observedItem = > (dataContainerView).getItemRendererAt(lastIndex) as DataItemRenderer; > if(observedItem && observedItem.element){ > gridObserver.observe(observedItem.element); > } > } > private function unobserveGridItem():void{ > if(!observedItem){ > return; > } > if(!gridObserver){ > return; > } > gridObserver.unobserve(observedItem.element); > observedItem = null; > } > private function > handleGridItemIntersection(entries:Array):void{ > if(!entries.length){ > return; > } > var entry:Object = entries[0]; > if(entry.isIntersecting){ > unobserveGridItem(); > handleScrollEnd(); > } > } > > > In this class, handleScrollEnd makes a request for more data. > > When I have time, I should really create beads for both of these > patterns... > > > On Apr 26, 2023, at 11:19 AM, Hugo Ferreira <hferreira...@gmail.com> > wrote: > > > > Hi, > > > > File sent. > > > > Thanks for trying to improve virtualdatagrid. > > It is far from perfect but for those who want to use it for an > application with a lot of data, for now it is the solution (or use > pagination). > > > > Regards, > > Hugo. > > > > <cont...@cristallium.com <mailto:cont...@cristallium.com>> escreveu no > dia quarta, 26/04/2023 à(s) 07:37: > > Hi Hugo, > > > > Thank a lot for your reply and sharing. > > I don't know if it's an issue with my webmail, I don't have an > attachment. Could you send it directly on my email ? (contact at > cristallium.com <http://cristallium.com/> ) > > I will try with latest build from source to have some of your fix and > study your DataGrid.as > > I will keep you in touch if I can do more improvements > > Regards > > Fred > > > > Le 2023-04-25 23:51, Hugo Ferreira a écrit : > > > >> Hi, > >> > >> DataGrid does not work good with a lot of data (as you saw). > >> You can use pagination (the users hate this approach and it's not very > mobile friendly but it's technically a simple way to solve this problem) or > you can render on the screen only what is visible (the users love this > approach, it's mobile friendly but technically it's hard). > >> Think about a game with 1000 players on the screen that you hide what > is not visible at a specific moment. > >> > >> VirtualDataGrid have this goal however there are many chalenges to be > usable. > >> I saw in action several issues, I was able to find what I fix the > majority of them and push to Royale github (I recomend compile from the > lastest source), I was able to fix 2 other problems in a ugly way and for > that reason I have an extension of the VirtualDataGrid on my libraries (as > soon I find better approach, I will exchange this local patches to Royale). > >> You can find in attachment my DataGrid.as that extends from Royale > VirtualDataGrid.as > >> The 2 issues are commented in English (sorry for my bad English), so > it's easy to understand the issues and what the pach does. > >> > >> I also recomend to create ItemRenderes to all your needs where you can > have 2 states: reading and editing, exchaning from a Label to a TextInput > for example. > >> > >> About your issue, I kwnow it and for now it's the only major issue with > VirtualDataGrid that I'm aware and I was not able to find iet a stable fix, > however I found a more or less workaround (you can find it on my > DataGrid.as). > >> I have created a bead DataGridScrollSpeed that I'm using on my > DataGrid.as > >> This slow a bit the scroll and the issue reduces for almost of the time > unless you force several times. > >> You can decrease even more the speed and reduce 99% the issue. > >> It's not the correct fix but I was not able to find out a better > approach. > >> If someone can fix this for good, great ! > >> > >> Regards, > >> Hugo. > >> > >> <cont...@cristallium.com <mailto:cont...@cristallium.com>> escreveu no > dia terça, 25/04/2023 à(s) 18:46: > >> Hi All, > >> > >> I'm on a dev using Apache Royale with Jewel DataGrid tryng to show > about > >> 500 rows. > >> > >> But I have an issue when I set dataprovider : the application is > hanging > >> about 20 seconds... Then I saw that there is a VirtualDataGrid. > >> > >> Using it is very fast. But there is an issue with vertical scrollbar : > >> when using it from bottom to upper, it's working right, but from upper > >> to bottom the thumb goes away (on Chrome). The issue is visible on Tour > >> de Jewel : > >> > >> https://royale.apache.org/tourdejewel/#!virtual_lists_panel < > https://royale.apache.org/tourdejewel/#!virtual_lists_panel> > >> > >> (it's working is scrolling slow, but if I move down a little fast, then > >> the thumb go away from mouse and go immediatly to the end at bottom of > >> list) > >> > >> On Firefox : there is one scrollbar but when can't reach the end of > list > >> and on chrome there are 2 scrollbars, we can reach end of list but > there > >> is an issue on using scrollbar from top to bottom > >> > >> I saw a fix by Hugo, so I wanted to download last build on : > >> > >> > http://apacheroyaleci2.westus2.cloudapp.azure.com:8080/job/royale-asjs_jsonly/lastSuccessfulBuild/artifact/out/ > < > http://apacheroyaleci2.westus2.cloudapp.azure.com:8080/job/royale-asjs_jsonly/lastSuccessfulBuild/artifact/out/ > > > >> > >> Unfortunaly it's dead. Is there a way to download last build on other > >> link ? > >> > >> Regards > >> > >> nb : I'm using sdk 0.9.10 > > > > -- > > Frédéric Gilli > > mob.0668542622 > > http://www.cristallium.com <http://www.cristallium.com/> > > <http://www.cristallium.com/> > > > >