Confirmed users
975
edits
(→App start up: Move StrictMode suppressions into done) |
(Add defense for expensive APIs) |
||
Line 1: | Line 1: | ||
Performance can be thought in terms of "Offense" – the changes that you make to actively improve performance – and "Defense" – the systems you have in place to prevent performance regression's (this offense/defense idea from [https://medium.com/@ricomariani/dos-and-don-ts-for-performance-teams-7f52c41b5355?source=rss-e6e91dab0708------2 this blog post]). | Performance can be thought in terms of "Offense" – the changes that you make to actively improve performance – and "Defense" – the systems you have in place to prevent performance regression's (this offense/defense idea from [https://medium.com/@ricomariani/dos-and-don-ts-for-performance-teams-7f52c41b5355?source=rss-e6e91dab0708------2 this blog post]). | ||
== Defense: discouraging use of expensive APIs == | |||
In some cases, we want to discourage folks from using expensive APIs such as <code>runBlocking</code>. As a first draft solution, we propose a multi-step check: | |||
# Compile-time check throughout the codebase: write a code ownered test asserting the number of references to the API. | |||
## ''Question: given the lint rule, should we just count the number of `@Suppress` for this?'' | |||
## ''Question: would it help if this was an annotation processor on our lint rule and we look for <code>@Suppress</code>?'' | |||
# Run-time check on critical paths: wrap the API and increment a counter each time it is called. For each critical path (e.g. start up, page load), write a code ownered test asserting the number of calls to the API. | |||
## ''Question: is this too "perfect is the enemy of the good?"'' | |||
# Add lint rule to discourage use of the API. This overlaps with the compile-time check, however: | |||
## We can't just use the compile-time check because in the best case it'll only run before the git push – it won't appear in the IDE – and the feedback loop will be too long for devs | |||
## We can't just use the lint rule because it can be suppressed and we won't notice | |||
== App start up == | == App start up == |