{ "id": "103365", "key": "TIMOB-11987", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "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": "6", "description": "", "name": "Hold" }, "resolutiondate": "2013-02-12T23:12:57.000+0000", "created": "2012-10-14T16:03:30.000+0000", "priority": { "name": "Medium", "id": "3" }, "labels": [ "api", "data", "ios", "reuse", "rowdata", "tableview", "triage" ], "versions": [], "issuelinks": [ { "id": "24275", "type": { "id": "10011", "name": "Includes", "inward": "is included by", "outward": "includes" }, "inwardIssue": { "id": "105161", "key": "TIMOB-11809", "fields": { "summary": "Create ListView module", "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" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "6", "description": "gh.issue.epic.desc", "name": "Epic", "subtask": false } } } }, { "id": "22068", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "98489", "key": "TIMOB-11510", "fields": { "summary": "iOS: TableView very slow", "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" } }, "priority": { "name": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } } ], "assignee": { "name": "shossain", "key": "shossain", "displayName": "Shak Hossain", "active": false, "timeZone": "America/Los_Angeles" }, "updated": "2017-03-21T21:16:48.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": "10206", "name": "iOS", "description": "iOS Platform" } ], "attachment": [], "flagged": false, "summary": "iOS: TableView row management makes it drastically slow", "creator": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "subtasks": [], "reporter": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "environment": "titanium 3.1.0 master\r\nios 5.1 /6.0\r\ndevice", "comment": { "comments": [ { "id": "223943", "author": { "name": "mbelkin", "key": "mbelkin", "displayName": "Michael Belkin", "active": true, "timeZone": "America/Los_Angeles" }, "body": "@martin, I think you've done an incredible job troubleshooting and outlining this problem for appcelerator. They should at least grant you the courtesy of implementing this ASAP to thank you for doing a large par of their job for them! Tableview performance is really becoming a critical issue on Ti for iOS and Android and it seems that appcelerator isn't really paying attention.", "updateAuthor": { "name": "mbelkin", "key": "mbelkin", "displayName": "Michael Belkin", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2012-10-17T06:53:27.000+0000", "updated": "2012-10-17T06:53:27.000+0000" }, { "id": "223944", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "@Michal Belkin: Actually it is not as easy as it might seem. I think Appcelerator knows about the depth of the problem. But changing it now means a lot of work, and possible regressions. I do think that it is a matter that should be looked at right away as tableview is one of the most commonly used widget in apps.\nAlso know that Appcelerator is working on getting it a little quicker (This is not the right solution and shouldnt be the definitive solution though).A [pull request|https://github.com/appcelerator/titanium_mobile/pull/3260] has just been pulled to fix a regression appeared in 2.1.3\n\nI should also mention that things are going so much better on android! I havent had the time to go deep into the android code (keep in mind that that the tableview code is pretty complex) but will try and see the difference.", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2012-10-17T07:02:27.000+0000", "updated": "2012-10-17T07:02:27.000+0000" }, { "id": "227793", "author": { "name": "dsefton", "key": "dsefton", "displayName": "Daniel Sefton", "active": true, "timeZone": "America/Los_Angeles" }, "updateAuthor": { "name": "dsefton", "key": "dsefton", "displayName": "Daniel Sefton", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2012-11-17T00:39:31.000+0000", "updated": "2012-11-17T00:39:31.000+0000" }, { "id": "229473", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "@Daniel: Sorry it took me so long to come back on this one. The pull request definitively fixed the problem. I get great performances now \nThe only problem now is with loading as explained in the description. But this has nothing to do with the pull request itself.\n\nSo my answer yes but i still dont think we should close this one. There is still something to do with the setData problem.\n\nThanks", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2012-12-01T15:28:21.000+0000", "updated": "2012-12-01T15:28:21.000+0000" }, { "id": "234018", "author": { "name": "moshebox@gmail.com", "key": "moshebox@gmail.com", "displayName": "Moshe Marciano", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "I can confirm this problem, I can also confirm we have been talking to Appcelerator about this for at least 1.5 years and very little was done to mitigate this. This performance issue is *alone* what singles out Ti apps from native Objective C apps, no other control/function/method which we used with Ti was that inferior to Objective C performance as TableViews..\r\n\r\n@martin - your solution is good, exactly what I had mind...", "updateAuthor": { "name": "moshebox@gmail.com", "key": "moshebox@gmail.com", "displayName": "Moshe Marciano", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2013-01-11T15:27:11.000+0000", "updated": "2013-01-11T15:27:11.000+0000" }, { "id": "234056", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "@Moshe: I have been thinking/playing a lot lately around the tableview. The solution i present above has its problem. For example you dont really know when you can start playing with the proxy objects. I mean you expect proxy objects (your javascript interface to the view objects) to be created right on in the setData. COnsequently my approach isnt really necessary.\r\nWhat we need is for views NOT to be created in the setData but to be created/added in the \"cellForRowAtIndexPath\" method of the iOS tableview. That way loading gets crazily faster (well not crazily fast though). \r\nThat's actually what the android implementation does", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2013-01-12T00:56:51.000+0000", "updated": "2013-01-12T00:56:51.000+0000" }, { "id": "234095", "author": { "name": "moshebox@gmail.com", "key": "moshebox@gmail.com", "displayName": "Moshe Marciano", "active": true, "timeZone": "Asia/Jerusalem" }, "body": "@Martin: what we need is for Ti stick to the same method of work as native obj c apps do. first you define a row class, then you create 5-10 rows, then create views per row for the complex row structure specific to an app.\r\n\r\nnext, iOS will call us to provide data only(!) for each row drawn while reusing the same 5-10 rows created, this will provide for theoretical unlimited rows length with excellent performance.\r\n\r\nyour solution provides a possible way for Ti to describe the views per row and then let iOS ask for data from the JS code, thats why I think it is one way to move forward to a native tableView implementation.", "updateAuthor": { "name": "moshebox@gmail.com", "key": "moshebox@gmail.com", "displayName": "Moshe Marciano", "active": true, "timeZone": "Asia/Jerusalem" }, "created": "2013-01-12T01:25:08.000+0000", "updated": "2013-01-12T01:25:08.000+0000" }, { "id": "234096", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "@Moshe: Yes this is what i am talking about, view creation upon use. Which is the case on android. But you need to understand that there is another level of data in Ti, which is the proxy. Think of it as the model item in native dev", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2013-01-12T01:42:32.000+0000", "updated": "2013-01-12T01:42:32.000+0000" }, { "id": "235537", "author": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "body": "These issues will be addressed in the ListView module (TIMOB-11809). Work on this module has already started and the goal is to have it ready by 3.1.0 release. Rewriting tableView to support this architecture is going to be impossible for historical reasons. Moving this ticket out of the Sprint. Will be resolved with the ListView module.", "updateAuthor": { "name": "vduggal", "key": "vduggal", "displayName": "Vishal Duggal", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2013-01-23T19:04:02.000+0000", "updated": "2013-01-23T19:04:02.000+0000" }, { "id": "236413", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "Creating a new module is not \"THE\" way. It might be a VERY GOOD module but the tableview still needs fixing. And it s doable", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2013-01-29T11:45:37.000+0000", "updated": "2013-01-29T11:45:37.000+0000" }, { "id": "238276", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "@Martin. We don't have the bandwidth to solve this as part of Q1, and it's unclear that a solution for TableView will give us the ultimate performance we need. If you would like to submit a PR for the solution you propose, we are more than happy to assist.", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-02-12T23:12:57.000+0000", "updated": "2013-02-12T23:12:57.000+0000" }, { "id": "238336", "author": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "body": "@Ingo: Could you contact me by mail about this?(cant find your mail) here is my mail martin.guillon@akylas.fr", "updateAuthor": { "name": "farfromrefuge", "key": "farfromrefuge", "displayName": "Martin Guillon", "active": false, "timeZone": "Europe/Berlin" }, "created": "2013-02-13T15:48:38.000+0000", "updated": "2013-02-13T15:48:38.000+0000" }, { "id": "414429", "author": { "name": "lmorris", "key": "lmorris", "displayName": "Lee Morris", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Closing ticket due to the time that has passed since it was filed.", "updateAuthor": { "name": "lmorris", "key": "lmorris", "displayName": "Lee Morris", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2017-03-21T21:16:48.000+0000", "updated": "2017-03-21T21:16:48.000+0000" } ], "maxResults": 14, "total": 14, "startAt": 0 } } }