I look forward to see your bead in action. Harbs <harbs.li...@gmail.com> escreveu no dia quarta, 26/04/2023 à(s) 10:39:
> > That means, that I could use a normal DataGrid and "emulated" the > infinite > > behaviour ? > > Yes. > > > > On Apr 26, 2023, at 12:32 PM, Hugo Ferreira <hferreira...@gmail.com> > wrote: > > > > 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 <mailto: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> <mailto: > 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/> <http://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> <mailto: > 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> < > >> 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/ > > > >> < > >> > 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/ <http://www.cristallium.com/>> > >>> <http://www.cristallium.com/ <http://www.cristallium.com/>> > >