<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Manoj</title>
    <description>The latest articles on DEV Community by Manoj (@manojadams).</description>
    <link>https://dev.to/manojadams</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1130909%2F5e6b8cb5-3cbd-4888-b40e-9dd8c50be4d3.jpeg</url>
      <title>DEV Community: Manoj</title>
      <link>https://dev.to/manojadams</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/manojadams"/>
    <language>en</language>
    <item>
      <title>function vs expression vs arrow definitions - Performance comparison (Part 3)</title>
      <dc:creator>Manoj</dc:creator>
      <pubDate>Wed, 16 Aug 2023 20:32:11 +0000</pubDate>
      <link>https://dev.to/manojadams/function-vs-expression-vs-arrow-definitions-performance-comparison-part-3-44n4</link>
      <guid>https://dev.to/manojadams/function-vs-expression-vs-arrow-definitions-performance-comparison-part-3-44n4</guid>
      <description>&lt;p&gt;In this post we are going to compare performance of javascript functions created with function definitions vs function expressions vs arrow functions.&lt;/p&gt;

&lt;p&gt;To test this, we created three types of files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;withFunctionDefinition.js&lt;/em&gt; - contains simple function definitions&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;withFunctionExpression.js&lt;/em&gt; - contains function definitions using function expression syntax&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;withArrowDefinition.js&lt;/em&gt; - contains function definitions with arrow syntax&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  withFunctionDefinition
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lets create a file with name &lt;code&gt;withFunctionDefinition.js&lt;/code&gt; and add 1 million function definitions to the file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  withFunctionExpression
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lets create another file with name &lt;code&gt;withFunctionExpression.js&lt;/code&gt; and add 1 million function definitions using expressions to the file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  withArrowDefinition
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lets create yet another file with name &lt;code&gt;withArrowDefinition.js&lt;/code&gt; and add 1 million arrow functions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;File &lt;code&gt;withFunctionDefinition&lt;/code&gt; takes a constant time to get executed and has the best overall performance.&lt;/li&gt;
&lt;li&gt;The time complexity of files &lt;code&gt;withFunctionExpression&lt;/code&gt; and &lt;code&gt;withArrowDefinition&lt;/code&gt; grows linearly alongwith number of functions defined in the file (and both are similar)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/manojadams/js-objects-memory/blob/main/function-definition_vs_function-expression_vs_arrow-function/README.md"&gt;https://github.com/manojadams/js-objects-memory/blob/main/function-definition_vs_function-expression_vs_arrow-function/README.md&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>performance</category>
    </item>
    <item>
      <title>Effortless react forms with Material UI</title>
      <dc:creator>Manoj</dc:creator>
      <pubDate>Mon, 07 Aug 2023 20:02:28 +0000</pubDate>
      <link>https://dev.to/manojadams/effortless-react-forms-with-material-ui-1484</link>
      <guid>https://dev.to/manojadams/effortless-react-forms-with-material-ui-1484</guid>
      <description>&lt;p&gt;In this article, we would see how to create react forms effortlessly using Material UI and json.&lt;/p&gt;

&lt;p&gt;We are going to create a registration form using &lt;a href="https://github.com/manojadams/mui-forms"&gt;MuiForms&lt;/a&gt; react library.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install MuiForms
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install mui-forms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Define your schema
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
"fields": [{
        "name": "first_name",
        "meta": {
            "displayType": "text",
            "displayName": "First Name",
            "displayProps": {
                "md": 6,
                "sm": 6
            }
        }
    }, {
        "name": "last_name",
        "meta": {
            "displayType": "text",
            "displayName": "Last Name",
            "displayProps": {
                "md": 6,
                "sm": 6
            }
        }
    }, {
        "name": "email",
        "meta": {
            "displayType": "email",
            "displayName": "Emal"
        }
    }, {
        "name": "password",
        "meta": {
            "displayType": "password",
            "displayName": "Your password"
        }
    }]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a file with name schema.json (or any other name) and save it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add to your app
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from "react";
import MuiForms from "mui-forms";
import schema from "./schema.json";

function MyForm() {
  return (
   &amp;lt;MuiForms 
      schema={schema} 
      onSubmit={(formData) =&amp;gt; {
        // handle form submission
      }}
    /&amp;gt;
  )
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Registration form is ready
&lt;/h2&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/registration-form-mui-forms-mvnycy"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Reference:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://mui-forms.vercel.app/examples/registration-form"&gt;Registration form link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/manojadams/mui-forms"&gt;Github source&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>form</category>
      <category>reactform</category>
      <category>jsonschema</category>
    </item>
    <item>
      <title>Class vs Function Objects- Memory comparison (Part 2)</title>
      <dc:creator>Manoj</dc:creator>
      <pubDate>Thu, 03 Aug 2023 20:40:24 +0000</pubDate>
      <link>https://dev.to/manojadams/class-vs-function-objects-another-memory-comparison-part-2-5bl8</link>
      <guid>https://dev.to/manojadams/class-vs-function-objects-another-memory-comparison-part-2-5bl8</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;It is a common practise for JavaScript developers to use &lt;em&gt;&lt;strong&gt;function definition&lt;/strong&gt;&lt;/em&gt; to create &lt;strong&gt;&lt;em&gt;Objects&lt;/em&gt;&lt;/strong&gt; rather than &lt;em&gt;&lt;strong&gt;class definition&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;br&gt;
Here we are going to compare the memory size of objects created using a single definition type (i.e either class definition or function definition).&lt;/p&gt;
&lt;h3&gt;
  
  
  Expectation
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;And it may seem that the objects created through both the ways &lt;strong&gt;should be similar in size&lt;/strong&gt;, but are they really similar or one way is more memory efficient than the other?&lt;br&gt;
Lets find out.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;p&gt;To start with, we created 1 million JavaScript Objects using &lt;strong&gt;&lt;em&gt;class definition&lt;/em&gt;&lt;/strong&gt; and 1 million JavaScript Objects using &lt;strong&gt;&lt;em&gt;function definition&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We compared both and the result is &lt;strong&gt;surprising&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Objects created with class
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Memory snapshot (using chrome dev tools)&lt;/strong&gt; - 1 million objects&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jmOzKv34--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0nzqa2yfpknudxm511mn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jmOzKv34--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0nzqa2yfpknudxm511mn.png" alt="Image description" width="800" height="243"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create a basic class with name MyClass&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;MyClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;method1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lorem ipsum demo1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;method2&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;very different lorem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Objects created with function
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Memory snapshot (using chrome dev tools)&lt;/strong&gt; - 1 million objects&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r6UEwbRy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iw5h1dk06xgi0lzalagd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r6UEwbRy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iw5h1dk06xgi0lzalagd.png" alt="Image description" width="800" height="227"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create a basic function with name MyFunction&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;MyFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lorem ipsum demo1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;very verdifferent lorem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Objects created with class&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 * 10^&lt;sup&gt;6&lt;/sup&gt; Bytes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Objects created with function&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;24 * 10^&lt;sup&gt;6&lt;/sup&gt; Bytes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Objects created with function have a far greater size.&lt;/p&gt;

&lt;p&gt;Now, lets see what if we create objects with nested function structure&lt;/p&gt;

&lt;h3&gt;
  
  
  Objects with nested functions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Memory snapshot&lt;/strong&gt; - 1 million object instances&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Zc9uycc5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8httx6pajxjkmjul98cl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zc9uycc5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8httx6pajxjkmjul98cl.png" alt="Image description" width="800" height="237"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Create a basic function with name MyFunction&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;MyFunction_withInnerFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;method1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lorem ipsum demo1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;method2&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;very verdifferent lorem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Overall results
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;em&gt;shallow size&lt;/em&gt;** of objects created with function is &lt;strong&gt;high&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;retained size&lt;/em&gt;** of objects created with function is &lt;strong&gt;very high&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Objects created with class&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 * 10^&lt;sup&gt;6&lt;/sup&gt; Bytes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Objects created with function&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;24 * 10^&lt;sup&gt;6&lt;/sup&gt; Bytes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Objects created with nested function&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;16 * 10^&lt;sup&gt;6&lt;/sup&gt; Bytes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  **Terminology
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Shallow size - size of memory held by object itself&lt;/li&gt;
&lt;li&gt;Retained size - size of memory held by object and memory of its references (not memory held by referenced objects but the references itself).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reference:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/manojadams/js-objects-memory/tree/main/class-vs-function"&gt;https://github.com/manojadams/js-objects-memory/tree/main/class-vs-function&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.chrome.com/docs/devtools/memory-problems/memory-101/"&gt;https://developer.chrome.com/docs/devtools/memory-problems/memory-101/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>memory</category>
      <category>performance</category>
    </item>
    <item>
      <title>Class objects vs function objects — a memory comparison (Part 1)</title>
      <dc:creator>Manoj</dc:creator>
      <pubDate>Tue, 01 Aug 2023 14:32:45 +0000</pubDate>
      <link>https://dev.to/manojadams/class-objects-vs-function-objects-a-memory-comparison-javascript-36g2</link>
      <guid>https://dev.to/manojadams/class-objects-vs-function-objects-a-memory-comparison-javascript-36g2</guid>
      <description>&lt;p&gt;Is there any memory difference between objects created with class vs objects created with with function? Let's find out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In Javascript, a &lt;em&gt;&lt;strong&gt;class&lt;/strong&gt;&lt;/em&gt; is a special javascript function and can be defined either using the &lt;em&gt;&lt;strong&gt;class keyword&lt;/strong&gt;&lt;/em&gt; or &lt;em&gt;&lt;strong&gt;class expression&lt;/strong&gt;&lt;/em&gt;. This is similar to how a &lt;em&gt;&lt;strong&gt;function&lt;/strong&gt;&lt;/em&gt; is also defined (&lt;em&gt;&lt;strong&gt;function keyword&lt;/strong&gt;&lt;/em&gt; or &lt;em&gt;&lt;strong&gt;function expression&lt;/strong&gt;&lt;/em&gt;).&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// 1. Using class definition&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyClass&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;doSomthing&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;do something&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// 2. Using class expression&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MyClass&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="err"&gt;{
  &lt;/span&gt;&lt;span class="nc"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;do something&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;For our test, we would be using &lt;em&gt;&lt;strong&gt;10 functions&lt;/strong&gt;&lt;/em&gt; (2 is enough, but 10 is better) and would be mixing it with class definitions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Object types under test:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Objects created with &lt;em&gt;&lt;strong&gt;single class&lt;/strong&gt;&lt;/em&gt;.

&lt;ul&gt;
&lt;li&gt;One &lt;strong&gt;&lt;em&gt;single class&lt;/em&gt;&lt;/strong&gt; will contain all &lt;em&gt;&lt;strong&gt;10 functions&lt;/strong&gt;&lt;/em&gt; inside.
```javascript
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;class MyClass {&lt;br&gt;
  MyFunction1() {...} // here MyFunction is a class method.&lt;br&gt;
  MyFunction2() {...}&lt;br&gt;
  ...&lt;br&gt;
  MyFunction10() {...}&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;// Object created using single class&lt;br&gt;
const myClassObject = new MyClass();&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;Objects&lt;/span&gt; &lt;span class="nx"&gt;created&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;_different&lt;/span&gt; &lt;span class="nx"&gt;functions_&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
  &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;Each&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;_object_&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="nx"&gt;will&lt;/span&gt; &lt;span class="nx"&gt;be&lt;/span&gt; &lt;span class="nx"&gt;created&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;corresponding&lt;/span&gt; &lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; 
&lt;span class="s2"&gt;```javascript


MyFunction1() {...}
MyFunction2() {...}
...
MyFunction10() {...}

// Objects created using functions
const myFunctionObject1 = new MyFunction1();
const myFunctionObject2 = new MyFunction2();
...
const myFunctionObject10 = new MyFunction10();


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Objects created with &lt;em&gt;&lt;strong&gt;multiple classes&lt;/strong&gt;&lt;/em&gt;.

&lt;ul&gt;
&lt;li&gt;Each class will contain one single function (ie. class will just be a wrapper around our function).&lt;/li&gt;
&lt;li&gt;Practically classes are less likely to be used this way, but we would doing it anyways to get our test statistic.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;&lt;strong&gt;10 classes&lt;/strong&gt;&lt;/em&gt; will have &lt;strong&gt;&lt;em&gt;10 functions&lt;/em&gt;&lt;/strong&gt; inside.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;p&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyClass1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nc"&gt;MyFunction1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{...}&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyClass2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nc"&gt;MyFunction2&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{...}&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;...&lt;/span&gt;&lt;br&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyClass10&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nc"&gt;MyFunction10&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{...}&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="c1"&gt;// Objects created with wrapper classes&lt;/span&gt;&lt;br&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myClassObject1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MyClass1&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;br&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myClassObject2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MyClass2&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;...&lt;/span&gt;&lt;br&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myClassObject10&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MyClass10&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Expectation&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;As a JavaScript developer, below was our general expectation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Each object of "Object with single class" contains all 10 functions inside. So size of each object should be greater than size of object with functions (or object with multiple classes).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Object with functions should be similar in size with object with functions (although object with multiple classes contains a wrapper class, we are ignoring it).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Object with single class &amp;gt; Object with functions&lt;/td&gt;
&lt;td&gt;size of object with single class is greater&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Object with functions ~ Object with multiple classes&lt;/td&gt;
&lt;td&gt;sizes are similar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Object with single class &amp;gt; Object with multiple classes&lt;/td&gt;
&lt;td&gt;size of object type is greater&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Test
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Objects created with single class
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Created 1 million object instances with the &lt;code&gt;single javascript class&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Memory snapshot (Using chrome devtool)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwpd1fmkj66yxs7wspbw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwpd1fmkj66yxs7wspbw.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Objects created with &lt;code&gt;functions&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Created 10 function methods.&lt;/li&gt;
&lt;li&gt;Created 1 million object instances.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Memory snapshot
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79robohxamz7foginzhp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79robohxamz7foginzhp.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Objects created with &lt;code&gt;multiple classes&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Created 10 wrapper classes for each function. &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Memory snapshot
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3o88v7zj1p0t0v6eljt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo3o88v7zj1p0t0v6eljt.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;The memory consumed by objects created using single class or multiple wrapper classes or multiple functions comes out as similar.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Object with single class ~ Object with function&lt;/td&gt;
&lt;td&gt;similar size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Object with function ~ Object with multiple class&lt;/td&gt;
&lt;td&gt;similar size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Object with single class ~ Object with multiple classes&lt;/td&gt;
&lt;td&gt;similar size&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;You can check out the above test in the below link:&lt;br&gt;
&lt;a href="https://github.com/manojadams/js-objects-memory" rel="noopener noreferrer"&gt;https://github.com/manojadams/js-objects-memory&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>performance</category>
      <category>memory</category>
    </item>
  </channel>
</rss>
