{ "id": "112795", "key": "ALOY-620", "fields": { "issuetype": { "id": "7", "description": "gh.issue.story.desc", "name": "Story", "subtask": false }, "project": { "id": "11113", "key": "ALOY", "name": "Alloy", "projectCategory": { "id": "10400", "description": "Tools for developing applications", "name": "Tooling" } }, "fixVersions": [], "resolution": null, "resolutiondate": null, "created": "2013-04-13T12:43:40.000+0000", "priority": { "name": "High", "id": "2" }, "labels": [ "notable" ], "versions": [ { "id": "15402", "description": "Alloy 1.2.0, concurrent with SDK 3.1.0", "name": "Alloy 1.2.0", "archived": false, "released": true, "releaseDate": "2013-08-15" }, { "id": "15271", "description": "Alloy 1.1.0, concurrent with SDK 3.1.0", "name": "Alloy 1.1.0", "archived": false, "released": true, "releaseDate": "2013-04-16" }, { "id": "14634", "description": "Alloy 1.0.0", "name": "Alloy 1.0.0", "archived": false, "released": true, "releaseDate": "2013-02-19" } ], "issuelinks": [ { "id": "44394", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "inwardIssue": { "id": "142113", "key": "ALOY-1216", "fields": { "summary": "Speed compilation by enabling selective compiles of specified files", "status": { "description": "A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.", "name": "Resolved", "id": "5", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Medium", "id": "3" }, "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } } ], "assignee": { "name": "fmiao", "key": "fmiao", "displayName": "Feon Sua Xin Miao", "active": true, "timeZone": "America/Vancouver" }, "updated": "2015-06-08T17:39:30.000+0000", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "components": [ { "id": "13604", "name": "Tooling", "description": "Items related to Alloy tooling and workflow" }, { "id": "12326", "name": "XML", "description": "View XML and parsing" } ], "description": "Here are list of ways or issues that if solved can speed up compile time for quick iterations:\r\n\r\n1. Currently all controllers are rebuilt irrespective of whether the view/style/controller has been modified since the last compile. \r\n\r\n2. The alloy libraries are also copied to the Resources directory every time unnecessarily (e.g. alloy/underscore.js, alloy/sync/properties.js, etc). I think we should only compile and/or copy when necessary. \r\n\r\n3. While I understand the value of uglify js, I'm not sure if it is necessary for quick test iterations. \r\n\r\n4. It would be nice to have a compiler flag so that the platform constants, (e.g. OS_IOS) are not uglified out. (This would help support x-platform pushes for TiShadow during development) ", "attachment": [], "flagged": false, "summary": "Reduce compile time", "creator": { "name": "dbankier", "key": "dbankier", "displayName": "David Bankier", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [ { "id": "104045", "key": "ALOY-351", "fields": { "summary": "Only include sync adapters when necessary", "status": { "description": "A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.", "name": "Resolved", "id": "5", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Low", "id": "4" }, "issuetype": { "id": "5", "description": "The sub-task of the issue", "name": "Sub-task", "subtask": true } } }, { "id": "117533", "key": "ALOY-757", "fields": { "summary": "Only recompile controllers when necessary", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "5", "description": "The sub-task of the issue", "name": "Sub-task", "subtask": true } } }, { "id": "117534", "key": "ALOY-758", "fields": { "summary": "Create pre-compiled versions of Alloy core runtime libraries per-platform", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "5", "description": "The sub-task of the issue", "name": "Sub-task", "subtask": true } } }, { "id": "121715", "key": "ALOY-865", "fields": { "summary": "Cache global style", "status": { "description": "A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.", "name": "Resolved", "id": "5", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "5", "description": "The sub-task of the issue", "name": "Sub-task", "subtask": true } } }, { "id": "121821", "key": "ALOY-866", "fields": { "summary": "Only recompile app.js when necessary", "status": { "description": "A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.", "name": "Resolved", "id": "5", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "5", "description": "The sub-task of the issue", "name": "Sub-task", "subtask": true } } } ], "reporter": { "name": "dbankier", "key": "dbankier", "displayName": "David Bankier", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "comment": { "comments": [ { "id": "247436", "author": { "name": "johncblandii", "key": "johncblandii", "displayName": "John C. Bland II", "active": true, "timeZone": "America/Chicago" }, "body": "I couldn't find the vote button but +1. Time to test is one of my biggest hindrances with Ti.\r\n\r\nFor #3, uglify should happen for release only then debug does without it.", "updateAuthor": { "name": "johncblandii", "key": "johncblandii", "displayName": "John C. Bland II", "active": true, "timeZone": "America/Chicago" }, "created": "2013-04-13T18:34:57.000+0000", "updated": "2013-04-13T18:34:57.000+0000" }, { "id": "247444", "author": { "name": "tlukasavage", "key": "tlukasavage", "displayName": "Tony Lukasavage", "active": true, "timeZone": "America/Los_Angeles" }, "body": "My thoughts so far:\r\n\r\n1. definitely\r\n\r\n2. definitely\r\n\r\n3. uglify-js does a lot more than just minify and obfuscate, as most people use it. We do a number of compile time optimizations by manipulating the AST with it. In addition, some of the functionality of Alloy relies on changes that might relevant to uglify-js. It's not as simple as turning it off. \r\n\r\n4. The platform constants you mentioned (OS_IOS for example) don't exist as variables. They are used purely by uglify-js as mentioned in #3. To leave them in is to invite undefined variable errors.", "updateAuthor": { "name": "tlukasavage", "key": "tlukasavage", "displayName": "Tony Lukasavage", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-04-13T20:04:06.000+0000", "updated": "2013-04-13T20:04:55.000+0000" }, { "id": "247450", "author": { "name": "dbankier", "key": "dbankier", "displayName": "David Bankier", "active": true, "timeZone": "America/Los_Angeles" }, "body": "(1) and (2) - great\r\n(3) - curious on what else it does and whether it is needed (and can be avoided) during development and testing. Will look at your source code.\r\n(4) I realise you pass the constants to uglify, but wouldn't injecting the constant values in the source (i.e. each file) achieve it?", "updateAuthor": { "name": "dbankier", "key": "dbankier", "displayName": "David Bankier", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-04-13T21:30:10.000+0000", "updated": "2013-04-13T21:30:10.000+0000" }, { "id": "255118", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "+1\r\n\r\nI know Tony is modularizing (is that a word) the Alloy compiler, so I guess that opens the way for either manual or by-deploytype disabling of even more features 'unneeded' during development or using with TiShadow in particular:\r\n\r\n1) Disabling cleaning Resources (So that the next one is possible)\r\n2) Disabling checking for and recopying 'BASE RUNTIME FILES' (Alloy + Lib files - don't change that often)\r\n3) Disabling 'builtins' AST module and just copy all builtins\r\n4) Disabling 'optimizer' and 'compress' AST modulse and just inject OS_IOS variables in all files\r\n5) Disabling sourceMapper (of no use to TiShadow)\r\n\r\nThe goal would be to have less optimized code in less time.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2013-05-31T06:32:22.000+0000", "updated": "2013-05-31T06:45:43.000+0000" }, { "id": "255123", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "On my local Alloy I just added the option to disable sourceMapper. Benchmark went from 3.3 tot 2.9...\r\n\r\nPull-request: https://github.com/appcelerator/alloy/pull/139", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2013-05-31T07:02:25.000+0000", "updated": "2013-05-31T07:32:53.000+0000" }, { "id": "255131", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "Another PR that allows you to not selectively but just copy all builtins:\r\nhttps://github.com/appcelerator/alloy/pull/141\r\n\r\nPS: Don't really get why the AST modules are called twice, in both {{sourceMapper.js}} and the compiler's {{index.js}}?", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2013-05-31T08:36:44.000+0000", "updated": "2013-05-31T08:36:44.000+0000" }, { "id": "255132", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "And final PR for today for not cleaning up:\r\nhttps://github.com/appcelerator/alloy/pull/142", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2013-05-31T08:45:59.000+0000", "updated": "2013-05-31T08:45:59.000+0000" }, { "id": "262973", "author": { "name": "tlukasavage", "key": "tlukasavage", "displayName": "Tony Lukasavage", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Converting this to an ongoing story with subtasks detailing each possible improvement", "updateAuthor": { "name": "tlukasavage", "key": "tlukasavage", "displayName": "Tony Lukasavage", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-07-24T14:57:31.000+0000", "updated": "2013-07-24T14:57:31.000+0000" } ], "maxResults": 9, "total": 9, "startAt": 0 } } }