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

Reply via email to