> 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/>>