{ "id": "168052", "key": "TIMOB-24761", "fields": { "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [], "resolution": { "id": "10000", "description": "", "name": "Done" }, "resolutiondate": "2017-09-26T01:47:30.000+0000", "created": "2017-06-01T20:16:53.000+0000", "priority": { "name": "High", "id": "2" }, "labels": [], "versions": [], "issuelinks": [], "assignee": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "updated": "2018-08-06T17:34:45.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "12642", "name": "Windows", "description": "Windows authoring support" } ], "description": "h5. Issue Description\r\n\r\nWe've been trying to load a ListView in Windows with 500 users (https://randomuser.me/api/?results=500&nat=us) and performance gets quite low when loading 200+ elements in a single ListView (with a custom ItemTemplate). \r\n\r\nHere's a little bit of benchmarking we manually did by testing a blank application with only a Window with a ListView on it - App first requests for 500 users and when obtained, it renders them within the ListView and it's really the actual UI rendering which seems to be taking a lot of time, as the server response happens almost immediately after the request.\r\n\r\n**Please note ALL of these tests have been performed in an actual Windows device (Surface 3).\r\n\r\n100 users - 07.71s, minor blink issue when scrolling down/up (user image to the right disappears and reappears as the rows gain focus)\r\n200 users - 13.35s, major blink issue in the list items when scrolling down/up (they completely disappear and are rendered with a delay)\r\n300 users - 19.91s, same blinking issue as above\r\n400 users - 25.51s, same blinking issue as above\r\n500 users - 32.32s, same blinking issue as above\r\n\r\nWe'd also like to mention we replicated this (a single Windowed app with only a ListView on it and an HTTP requests that asks for a certain amount of users that will be rendered in the ListView...) and performance looks overwhelmingly better in the native side.\r\n\r\nh5. Steps to reproduce. \r\n# Download the attached app. https://drive.google.com/file/d/0BwTWo-c2a0b9LUhpc1Jha0JubWc/view?usp=sharing\r\n# Run\r\n# Scroll\r\n# App is getting slower\r\n", "attachment": [ { "id": "62956", "filename": "ti.xaml.listview-windows-1.0.0.zip", "author": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2017-08-01T04:28:16.000+0000", "size": 651274, "mimeType": "application/zip" } ], "flagged": false, "summary": "Windows: List view performance affected", "creator": { "name": "rramirez", "key": "rramirez", "displayName": " Ricardo Ramirez", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "rramirez", "key": "rramirez", "displayName": " Ricardo Ramirez", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "closedSprints": [ { "id": 951, "state": "closed", "name": "2017 Sprint 20 SDK", "startDate": "2017-09-24T17:50:18.277Z", "endDate": "2017-10-08T17:50:00.000Z", "completeDate": "2017-10-09T20:38:07.840Z", "originBoardId": 114 }, { "id": 939, "state": "closed", "name": "2017 Sprint 17 SDK", "startDate": "2017-08-13T23:08:29.095Z", "endDate": "2017-08-27T23:08:00.000Z", "completeDate": "2017-08-27T21:10:54.125Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "421148", "author": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "body": "I was able to reproduce this on Windows 10 Mobile device. So as far as I see the major difference in Titanium app that affects performance is that Titanium is using its own layout system and data binding with custom UI template system, that's basically different from Windows default layout & binding system XAML. We might want to find a way to leverage Windows XAML data & UI binding to get more efficient rendering.", "updateAuthor": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2017-06-07T01:45:35.000+0000", "updated": "2017-06-07T01:45:35.000+0000" }, { "id": "421605", "author": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "body": "So what I've found for this issues is that Titanium ListView is not quite optimized because of API difference between Titanium and native Windows API (XAML). In this case I'm planning to borrow some features from Hyperloop to make ListView work better. I would like to integrate native data binding & UI templating mechanics in XAML into Titanium with Hyperloop, because Titanium ListView API is not quite optimized for Xaml ListView. We don't want to re-invent UI templating mechanics but want to borrow powerful features from XAML wherever we can. I'm planing to implement Windows-specific new feature for ListView for this.", "updateAuthor": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2017-06-09T10:00:10.000+0000", "updated": "2017-06-09T10:00:10.000+0000" }, { "id": "423968", "author": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Status Update: Been investigating on this performance issue but ended up finding out there is fundamental difficulties while integrating Windows table view binding interface with Titanium's one because of functionality differences. I am trying to see if we could integrate part of Hyperloop functions with ListView, but probably it could drop some functionalities (like custom layout with template) because of API differences between Titanium and XAML. (for instance obviously Microsoft's [DataTemplating API|https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.datatemplate] works much better with XAML rather than Titanium Alloy bindings).\r\n\r\nI guess we have few options there,\r\n\r\n- Develop faster version of ListView (and probably TableView) with fewer functionalities specialized for better performance, which will be probably Windows-only Titanium API. OR\r\n- Integrate Hyperloop with ListView (such as enabling native XAML data templating with ListView) OR\r\n- Do everything on [native ListView|https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.listview] with Hyperloop\r\n\r\n [~rramirez] [~emerriman] Any thoughts?", "updateAuthor": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2017-07-12T00:12:47.000+0000", "updated": "2017-07-12T00:12:47.000+0000" }, { "id": "424002", "author": { "name": "rramirez", "key": "rramirez", "displayName": " Ricardo Ramirez", "active": true, "timeZone": "America/Los_Angeles" }, "body": "I will go for Develop faster version of ListView (and probably TableView) with fewer functionalities specialized for better performance, which will be probably Windows-only Titanium API. ", "updateAuthor": { "name": "rramirez", "key": "rramirez", "displayName": " Ricardo Ramirez", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2017-07-12T16:15:34.000+0000", "updated": "2017-07-12T16:15:34.000+0000" }, { "id": "424046", "author": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "body": "sounds good, probably I would start from creating custom module so you can test it faster and easier.", "updateAuthor": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2017-07-13T00:15:41.000+0000", "updated": "2017-07-13T00:15:41.000+0000" }, { "id": "425160", "author": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "updateAuthor": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2017-08-01T04:31:42.000+0000", "updated": "2017-08-01T04:31:42.000+0000" }, { "id": "428442", "author": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Marked done for this ticket for now, we are tackling this with new module [ti.xaml.listview|https://github.com/appcelerator-modules/ti.xaml.listview] and wait for customer test. Feel free to file a new ticket if this module has a issue.", "updateAuthor": { "name": "kiguchi", "key": "kota", "displayName": "Kota Iguchi", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2017-09-26T01:47:30.000+0000", "updated": "2017-09-26T01:47:30.000+0000" }, { "id": "439832", "author": { "name": "emerriman", "key": "emerriman", "displayName": "Eric Merriman ", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Closed as completed. If this is in error, please reopen.", "updateAuthor": { "name": "emerriman", "key": "emerriman", "displayName": "Eric Merriman ", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-08-06T17:34:45.000+0000", "updated": "2018-08-06T17:34:45.000+0000" } ], "maxResults": 17, "total": 17, "startAt": 0 } } }