DEV Community

SaaS.Group
SaaS.Group

Posted on • Originally published at prerender.io

Isomorphic Rendering vs. Dynamic Rendering, and How to Use Each to Make Quality Websites


Anyone can make alterations to how their content is delivered to users and search engines. The secret to making these alterations lies in rendering methods.

Different rendering methods can alter how much of the rendering falls on to clients, the search engine’s bot requesting the page, or the user’s browser. Two of the most popular rendering methods are isomorphic rendering and dynamic rendering.

Isomorphic rendering makes use of Universal JavaScript, as it renders on both client-side or server-side. Dynamic rendering, on the other hand, is often considered to be a workaround for social media crawlers or search engines that are not running on JavaScript. This rendering method is recommended by search engines like Google or Bing.

Both these rendering methods have their specific advantages, so choosing between them can be a bit difficult. This guide will help you make decisions on how to render your website by discussing these rendering methods and how you can benefit from them.

What is Isomorphic Rendering

Isomorphic JavaScript, often called Universal JavaScript, renders on both the server-side and the client-side. Under this rendering method, pre-rendering is used to serve content to the search engine or the user. After that, interactivity required on JavaScript is handled on the client-side.

Isomorphic JavaScript means that the application uses a similar rendering engine on the server and the client. This rendering method makes it easier for developers to maintain markup templates, simplifying web development.

Isomorphic rendering implies the use of Node.js/Io.js and JavaScript, as they allow the re-use of libraries, and enable browse JavaScript code to run on in the Node.js/Io.js environment without the need for much modification. This interchangeability of Node.js/Io.js and JavaScript within the coding ecosystem can support several different isomorphic frameworks like Rendr, React.js, lazo.js and so on. Some prominent brands implementing and experimenting with Isomorphic JavaScript include Airbnb and Twitter.

What is Dynamic Rendering?

Dynamic rendering sends fully rendered content to search engines, all while serving human visitors with normal and client-side rendered content. This is pre-rendering, but it is only done for search engine bots. It creates and serves a static or server-side rendered HTML version of the page to search engines bots, like Bingbot, Googlebot, and others.

In this case, the page is rendered differently depending on what is called by the user agent — it switches between pre-rendered content and client-side rendered content for specific user agents. Dynamic rendering sends the normal client-side rendered content to the users and transforms the dynamic content into HTML when sending to search engines.

The primary advantage of dynamic rendering is that content will be crawled and indexed easily, without the need to execute JavaScript.

Benefits of Isomorphic Rendering

Since Isomorphic rendering works on both server-side and client-side, it can offer a multitude of benefits to the users. Some of these benefits include:

The Ability for Search Engines to Index Pages Properly
Frameworks like Backbone.js, Angular.js, Ember.js, etc., are most commonly used for writing protected applications. These applications often require a username and password to access.

Since single-page applications don’t have public dashboards, they serve protected resources and don’t require web indexing. For example, platforms like Evernote and Gmail ask each user to enter user credentials before they can see the actual application.

However, the vast majority of applications are not protected behind log-ins. For public pages and applications, SEO is vital as their business models rely heavily on organic traffic and search indexing. Google now has JavaScript rendering capabilities on its crawlers, which means Google will render and index the content of a single-page application similar to an ordinary browser. However, Google is still trying to understand those pages better and can make errors during rendering.

To reduce the chances of being overlooked by crawlers, developers still need to mirror non-JavaScript rendering to JavaScript-enabled rendering. A home page must be indexed by search engines for customers to easily find publicly accessible pages.

Where some applications thrive on fast performance, others place a priority on proper search engine indexing. According to research from Twitter, increasing load speed on the first page can improve the general performance of the website in search engine indexing.

The research confirms that best practice server-side rendering produces a lightning-fast first-page load. All the other website codes can be loaded when the user is in the midst of browsing the page.

When this practice is implemented, the user will not see the classic “loading” message on the first page. When they open it, they will only notice a fully-rendered webpage and have a better user experience, enhancing the usability of the overall application, which in turn ultimately leads to better traffic.

Better Code Maintainability
The more code on your website or web page, the more you and your team will need to support it. This is why you should avoid using a different template for the same page. Template engines like Handlebars, Mustache, and Dust, along with Node.js/Io.js, make it simple to use browser modules on the server.

To better maintain their code, developers can also re-use the same utility and libraries across the browser and server. This further reduces the need for any excess code.

Libraries like lodash, SuperAgent, Underscore.js, and Request are popular for a similar reason: using the same library on both browser and server allows code reuse and better, more efficient development, as well as reducing time spent on maintaining code.

Additionally, programmers can develop custom modules, which can be shared between both server and browser. These custom modules will allow your Express.js and Node.js applications to expose certain templates to the browser, which can be used by the JavaScript code of your browser.

An additional benefit of Isomorphic JavaScript is that data models can be easily shared within the server and browser, maximizing consistency across servers and browsers. Just by tweaking a Backbone.js model, for example, a programmer can boost the performance of an application.

If you are looking to work some isomorphism into your web development, there are a wide variety of frameworks and libraries that allow developers to use isomorphism in JavaScript. Some of the more famous choices include React.js, Lazo.js and Rendr. Let’s compare these libraries:

  • Rendr
    This library was developed at Airbnb and addresses the slow loading speed of the first page. The library was designed to use the Backbone.js architecture on the server and it also works on Expres.js.

  • React.js
    Contrary to popular belief, React.js is not a model-view-controller (MVC) framework. Rather, it has the view layer of an MVC.

React.js can be used with several other front-end libraries, like Backbone.js. However, React.js is often used with the JSX language, a mix of both XML/HTML and JavaScript. The JSX code complies with the native JavaScript before it is executed on the browser. The primary benefit of using React.js is that it uses a virtual Document Object Model (DOM) for rendering, meaning only the delta changes will be rendered on the page—unchanged elements will be left intact. Many consider this feature to make React.js better than other libraries.

  • Lazo.js Lazo library is similar to Rendr, as it also uses Backbone.js. Additionally, it leverages jQuery and RequireJS front-end JavaScript libraries.

Better User Experience
When the important part(s) of the application is/are rendered with real data on the server-side, the Isomorphic React application will be able to show a more meaningful initial page. However, the client rendering application will not be able to show any meaningful information until it has fetched all the external data required. When the user is waiting, they will only see a loading indicator, which can affect their experience with the application.

Faster Overall Loading Time
Due to the processes of fetching data and rendering more markups on the server-side before responding, an isomorphic application will be a bit slower in displaying an initial page, compared to a client rendering application. However, the overall completion time and the final user interface will be much faster, because the data access on the server-side is comparatively much faster than client-side API requests.

Benefits of Dynamic Rendering

Dynamic Rendering works differently than Isomorphic Rendering. Using this rendering method comes with its own set of advantages that includes:

  • Dynamic Rendering requires less time and resources, as developers don’t need the pre-rendering content for bots and humans.
  • Dynamic Rendering produces content that can be crawled and indexed without needing to execute JavaScript.
  • Human visitors benefit from any interactive elements that require JavaScript.

Dynamic rendering solves the crawl budget issues related to page speed: Google can crawl more pages on the site.

Why Is Dynamic Rendering Important for Marketers?

Sites with large websites that have a lot of dynamic and JavaScript-driven content can be a bit harder to rank, because search engines will encounter difficulty in crawling and indexing them. Dynamic Rendering helps large websites that struggle with content marketing efforts due to the size and load of their content.

Dynamic Rendering allows developers to serve a static HTML or an SEO-friendly version of their site to a search engine’s bots. In essence, developers are translating their website into Google’s bot search language to reap the best search results and rankings. Visitors will also have a better browsing experience.

The SEO Benefits Of Dynamic Rendering

If Google is unable to find your content, then all the effort put into curating the best and most accurate content will just go to waste. Many companies face indexation issues on their websites and have no idea that it is a hindrance to their results and rankings

Even though you may be able to see your website crawl stats, and that search engines are downloading information, you may still be wondering what information is being downloaded and how much is actually accessible. With dynamic rendering, you can remove all these uncertainties: all your content is being indexed, so that it is all influencing your traffic and rankings.

With dynamic rendering, your site remains light and easy to crawl, keeping it in the good graces of Google and preventing your traffic from falling.

Why Consider An Isomorphic Implementation of React?

Implementation of isomorphic rendering is not a simple task. It requires technical knowledge and a lot of preparation. Therefore, if you are implementing Isomorphic Rendering into your website development, you should seek out assistance and do some basic research. Below is some information that you should know before implementing isomorphic rendering.

The Isomorphic Process

The isomorphic process allows you to render a web application on a browser using the following steps:

When a page is requested by the user, the server queries for the database and API and simply asks the app for the HTML. The app then renders all the given information it has and the server sends this collected information to the client or user.

When the application renders on the client-side, the client requests JavaScript from the server and the bootstrap of the application. The client application recognizes the pre-rendering HTML and it binds it all together. When the user is viewing the initial content, all the above processes are taking place, and the application finishes loading several seconds after the initial content has been displayed on the screen.

Advantages of Isomorphic Process

The advantages of the isomorphic process can be classified into two aspects.

Functional Aspect

  • The code is shared between the front and back-end of the application.
  • There’s a faster loading time and automatic support for legacy browsers.

Technical Aspect

  • The developer will need to learn fewer languages.
  • The library will be able to integrate with itself.
  • The server renders the HTML when the initial page is loading.
  • The data is stored in a congruent data format.
  • Developers will have to write and maintain less code.

Disadvantages of Isomorphic Process

There are some disadvantages associated with the isomorphic process:

  • Troubleshooting is challenging because of the complex architecture of the application.
  • Sensitive data is more prone to exposure on the server.
  • The entire application’s architecture becomes more complex.

How Is Sensitive Data Exposed?

When the developer authorizes the client-facing module in the isomorphic process, there is a certain dependency of the module under which the file containing sensitive data is required. The application is bundled with that specific file and is sent to the client. The client will have all bundled confidential and private data, so an attacker can simply search out the bundle file, crack it open, and access sensitive data.

Isomorphic Application Priorities

The isomorphic process has several priorities for the development and production environment of the application. These include:

  • Development
    – An additional round trip is needed to fetch data.
    – Tooling is required to allow the developer to see the internal state of the application.
    – Applications update quickly after the source code changes.
    – The code needs to be clear, organized and highly traceable.

  • Production
    – The code should not expose sensitive data and should be compact.
    – The additional round trips can slow the application on mobile and increase the chances of users closing the application before it has even properly loaded.
    – Tooling is required to expose bugs and track the activity of the user.
    – Applications are often not concerned with updates to the source.

Important Libraries Used in the Isomorphic Process

Developers can use several libraries in isomorphic react web development. Some of the most notable ones are:

  • Express
    This library is used for fetching data and creating an initial state. It uses React to send the application on the server. It also renders Webpack instances in the development-to-server application bundles. This library loads templates and server static files.

  • React
    This library renders the application on the server, handles the serving content (based on routes) and renders and powers the application on the client-side.

  • Webpack
    This library compiles applications into ESS JavaScript and serves it. It also injects the updated modules directly into the client. Webpack compiles the modules into one static ESS JavaScript, which is used for production.

  • Babel
    Babel is used by the Webpack library. It compiles all the ES2015 and JSX into a Client-friendly ES5.

Code Sharing, Data Injection, and Server Rendering

With isomorphic rendering, developers have full control over their websites. Here are a few ways to maximize this control:

  • Code Sharing
    Code sharing is the primary benefit of isomorphic react web development. This architecture can use some of the same code for both server and client-side, allowing the server to load client libraries and make server rendering possible.

  • Data Injection
    Data injection is a process under which data is prepared by the server. This data is then converted into JSON and injected into the index.js. The result is longer initial loading of the page, with the client application displaying the data immediately. No round trips are involved.

  • Server Rendering
    Server rendering is the process under which data is fully prepared by the server. HTML for the application is rendered in the server, which results in a longer initial loading, but it can be a bit faster than data injection. The client application can see a rendered view, even though the data is not fully fetched.

  • ReactDOMServer
    ReactDOMServer is an object that enables the developer to render a component to a static markup. It generates static HTML markup, which is based on the parent component and initial state. With ReactDOMServer, developers can leverage virtual DOM, which is often used on the client-side to promote or elevate performance. Since ReactDOMServer is designed on the server, there is no dependency on the browser.

Conclusion

No matter which rendering method you use, make sure the content you are serving is accessible and works for the search engine bot requesting it. You should focus on making sure that even the less advanced search engines, devices, and even browsers can access your content.

Your choice of rendering must be in line with the needs of your website and business. Before arriving at a choice, assess your needs and your goals. In some cases, server-side rendering (SSR) methods work best. In other situations, client-side rendering methods can be the best fit for your site.

Isomorphic rendering is the solution that combines the best of both server-side and client-side rendering. It offers maximized results, as long as it is carefully designed and balanced. Since your website can have different areas of server rendering and client rendering combined, consulting with an expert is very helpful.

Implementing isomorphic rendering into your website development can be the step you need to get your website in front of more people and getting an experienced developer to help will ensure it is done perfectly. Prerender can help you make the switch. Register with them today and revolutionize your website.

This article originally appeared on https://prerender.io/isomorphic-rendering/

Top comments (0)