%%
date:: [[2022-08-12]]
parents:: [[Performance]]
%%
# [[Factors affecting application performance]]
### Hardware
#### Processor caching
Allowing the processor to cache data and use that for repeated activities increase application performance to a certain point. However, it also requires storage for the cache. [[Keval Patel]] claims that cache size is inversely related to performance.
![[Why Should You Learn Go#^fafa1f]]
#### Number of processor cores
Increasing the number of cores on a computer also increases the cost exponentially, so this may not always be feasible.
> Adding more core to the processor has its cost too. Also, that cannot scale to indefinitely. - [[Keval Patel]]
#### Number of processing (OS) threads being used
[[Multithreading]] allows more than one thread to be used at a time, increasing concurrency. However, this is still based on hardware, so it is not something developers usually have a say in.
#### [[Network bandwidth]]
Even when other factors are optimized, the available network bandwidth is a limiting factor. Sometimes the machine just doesn't have the internet connection to support the load.
![[JMeter vs Gatling Tool#^8af625]]
#### [[Distributed computing]]
Server virtualization and [[Containerization]] can improve application performance by allowing each component or container to be scaled as necessary.
Distributed computing, by necessity, goes hand-in-hand with [[Decoupling]] services that were previously tightly integrated.
### Software
#### [[The 1 Thread=1 Virtual User Paradigm is flawed]]
Improving software is the only viable avenue to increase application performance that has not yet been exhausted to the point of technical limitations.
#### [[Cache management]]
Caching responses, either on the client or server side, leads to a decrease in overall response times at the expense of storage.
#### [[Prebuilding]]
Prebuilding is similar to caching, but it is more proactive. Instead of waiting for a request to be made for a resource, prebuilding prepares it in anticipation of the request. [[GitHub’s Engineering Team Has Moved to Codespaces the GitHub Blog|GitHub used this]] to improve the performance of their [[Codespaces]].
#### [[Load minimum necessary components first]]
Prioritizing the processing or loading of the most essential elements of a page or application up front, and then continuing to load other elements in the background, can improve a user's perception of performance.
#### [[Principles of improving work performance]]
#### [[Pure code is faster than GUI-driven tools]]
#### [[Artificial bottleneck]]