Skip to main content

Improve website performance - Javascript Memoization

Memoization



What is Memoization?

Memoization is a technique used in programming to write optimizied code. This is very useful in use cases when the system is performing very CPU intensive tasks repeatedly.

What are the use Cases for Memoization?

Memoization can be useful when the system is performing same task again and again like

  1. API output caching - This is not recommended though as it requires a cache invalidation mechanism which is tricky to implement.

  2. Calling a recursive function e.g. Fibonacci series.


One thing to note here is, memoization works well in case of pure function only.


What is a Pure function ?

A function which produces the same output for the same given input every time.

Lets understand this with the Fibonacci series example.


Below program is written without memoization where result of previously executed function is not cached. So each time the program calls the Fibonacci function, it calculates results every time.




Now, below is the improved memoized version of above example. System will take more time for the first time. Rest of the calls get completed almost instantaneously. 


Now, let's rewrite the same program with the caching result of an already executed function into one local variable. Now, every time the Fibonacci function gets called it first checks if there is any caching result available or not. If  that function with the given input already had executed in the past it will simply return an already cached result.


Another use case for memoization could be a function which produces square of given input number. To mimic CPU intensive task we are providing big number to calculate square and we are using addition instead of multiplication to increase complexity


In below example, we are not caching any value. So, when this program get executed, it will take same time each time.




Now, we can rewrite above code using cached result this will improve performance first time onwards that is first time it will take time what it is needed to calculate but first time onwards it will return cached value. 


Repository link for above program can be found here

Comments

Popular posts from this blog

Accessing Enum in template–Angular with Typescript

By reading title of  this post, It  seems some what misleading. In Angular 2 (or higher version for that matter). We cannot directly access  Enum or any other type for that matter into template. so, for an example  consider following example now if we try to access Enum WeekDays in HTML template as follows It would be resulted in runtime error shown below To resolve this error we should be assigning enum to component property as shown below. Reason behind this is , Component is the execution context for an Angular application. We can reference only those properties in template which are defined in component or have scope in component.

Array Extensions Library- Unit Test

Array Extensions Library- Unit Test This post is second in series of creating Array Extension Library  In this post we will learn how we can add unit test cases to our library. We will use Jasmine framework to Unit test our library. For that, use below command. >> npm install jasmine As we have developed our library in typescript, it will convenient to add typing for Jasmine as well. To install typing for Jasmine. Use below command. >> npm uninstall @types/jasmine   After running these commands, our package.config will look like Now, we will add new file named extension.spec.ts under test  directory. In this file we will import extension library first. We will now define one class named Heros,   Which we use to create Array  and test all our extension methods against it. Now we will describe our test suite using describe function provided by Jasmine. And initialize arrays with our primitive and custom type(Heros)   in beforeEach function provided by jasmine. Now, we will

Visual Studio code - Setting up Tomcat server

  This is the second post in series of Setting up Visual Studio code for Java Spring Boot development. First post of this series can be found here . In this article we will see how we can configure VS Code to run Apache Tomcat server via extension. So lets begin. Open your VS Code and click on Extensions menu item. Now search for "Tomcat For Java". Select extension From Wei Shen and click install. Once this extension is installed. we can see new tab panel enabled in Explorer window. When we expand it, its empty. Now we need to configure Tomcat. For that, we need to download Apache Tomcat from official site. To download Tomcat click here to redirect to official site. There are multiple version available to download. For this demo we will download Tomcat Version 9.  Once Tomcat is downloaded to our machine. We now navigate back to VS code. We can now configure Tomcat by click on "+" sign on "Tomcat Servers" panel. When we click on Add Tomcat Server "