%% 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]]