{"id":113097,"date":"2023-05-19T12:05:49","date_gmt":"2023-05-19T16:05:49","guid":{"rendered":"https:\/\/innowise.com\/?p=113097"},"modified":"2025-07-31T03:46:56","modified_gmt":"2025-07-31T07:46:56","slug":"migrating-to-angular-16","status":"publish","type":"post","link":"https:\/\/innowise.com\/it\/blog\/migrating-to-angular-16\/","title":{"rendered":"Migrazione ad Angular 16: aumento delle prestazioni e semplificazione dello sviluppo"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"113097\" class=\"elementor elementor-113097\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e6733c6 main-block elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e6733c6\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t\t<div class=\"elementor-background-overlay\"><\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-66 elementor-top-column elementor-element elementor-element-5af7f03c\" data-id=\"5af7f03c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-40f647f9 elementor-widget elementor-widget-html\" data-id=\"40f647f9\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"breadcrumbs flex\">\n    <div class=\"info\"> \n    <a href=\"https:\/\/innowise.com\/\">\n  Main\n  <\/a>\n    <\/div>\n    <div class=\"info\">\n         <a href=\"https:\/\/innowise.com\/about-us\/\">\n  About us\n  <\/a>\n    <\/div>\n     <div class=\"info\">\n          <a href=\"https:\/\/innowise.com\/blog\/\">\n  Blog\n  <\/a>\n    <\/div>\n<\/div>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\/\", \n  \"@type\": \"BreadcrumbList\", \n  \"itemListElement\": [{\n    \"@type\": \"ListItem\", \n    \"position\": 1, \n    \"name\": \"7 reasons Java is perfect for enterprise software development\",\n    \"item\": \"https:\/\/innowise.com\/blog\/java-for-enterprise-applications\/\"  \n  },{\n    \"@type\": \"ListItem\", \n    \"position\": 2, \n    \"name\": \"Blog\",\n    \"item\": \"https:\/\/innowise.com\/blog\/\"  \n  },{\n    \"@type\": \"ListItem\", \n    \"position\": 3, \n    \"name\": \"Name\",\n    \"item\": \"https:\/\/innowise.com\/\"  \n  }]\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-78d33ae9 elementor-widget elementor-widget-html\" data-id=\"78d33ae9\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"article-info flex\">\n    <div class=\"info\"> \n    5 min read\n    <\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f444666 elementor-widget elementor-widget-text-editor\" data-id=\"4f444666\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h1 class=\"title-tinder\"><span style=\"font-weight: 400; color: #ffffff;\">Migrating to Angular 16: boosting performance and streamlining development<\/span><\/h1>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2abf81ad elementor-widget elementor-widget-shortcode\" data-id=\"2abf81ad\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">[display_tags]<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-114bbf89 button-tinder elementor-hidden-tablet elementor-hidden-mobile\" data-id=\"114bbf89\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-163b650f article-description elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"163b650f\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-b381776 author-article\" data-id=\"b381776\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4fd559d0 elementor-widget elementor-widget-text-editor\" data-id=\"4fd559d0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">We are thrilled to announce the highly anticipated release of<span style=\"text-decoration: underline;\"> <a href=\"https:\/\/innowise.com\/technologies\/angular-development\/\" rel=\"noopener\">Angular<\/a> <\/span>16, the latest iteration of the renowned web application framework. The <\/span><span style=\"font-weight: 400;\">Angular 16 release date<\/span><span style=\"font-weight: 400;\"> was on May 3, 2023.<\/span><\/p><p><span style=\"font-weight: 400;\">With a wealth of powerful features and enhancements, Angular 16 brings a revolution to the world of reactive programming, change detection, and server-side rendering. In this article, we will explore the remarkable changes and improvements introduced in Angular 16, showcasing how migrating to this version can elevate your web development projects to unprecedented heights.<\/span><\/p><p><span style=\"font-weight: 400;\">Just half a year ago, a significant milestone was achieved in terms of simplicity and developer experience as the standalone APIs successfully exited the developer preview phase. Today, we are filled with excitement as we witness the continued momentum of Angular with its most substantial update yet. The latest release, marked as version 16, brings remarkable advancements in reactivity, server-side rendering, and tooling, solidifying its position as a leader in the web development arena.<\/span><\/p><p><span style=\"font-weight: 400;\">The driving force behind this release extends beyond the core team responsible for this technology. Valuable feedback from the thriving developer community heavily influenced the development process. Leveraging their insights and suggestions, the team <\/span><a href=\"https:\/\/blog.angular.io\/angular-v16-is-here-4d7a28ec680d\" target=\"_blank\" rel=\"nofollow noopener\"><span style=\"font-weight: 400;\">has implemented<\/span><\/a><span style=\"font-weight: 400;\"> numerous quality-of-life enhancements, which have garnered over 2,500 thumbs up on GitHub. This strong collaboration between developers and the project ensures that Version 16 caters to the needs and preferences of its users, fostering an environment of continuous improvement.<\/span><\/p><p><span style=\"font-weight: 400;\">Angular 16 represents a monumental leap forward for web developers around the globe. Its cutting-edge features and optimizations empower developers to create highly performant and scalable applications. Whether you are an experienced user of this technology or new to its framework, migrating to Version 16 will unlock a world of possibilities, enabling you to deliver exceptional web experiences and drive innovation in your projects.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7055b40 elementor-widget elementor-widget-image\" data-id=\"7055b40\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"613\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Angular-v16-a-leap-forward-Binding-route-data-to-input-properties-1024x784.png\" class=\"attachment-large size-large wp-image-113107\" alt=\"Angular 16 release date\" srcset=\"https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Angular-v16-a-leap-forward-Binding-route-data-to-input-properties-1024x784.png 1024w, https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Angular-v16-a-leap-forward-Binding-route-data-to-input-properties-300x230.png 300w, https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Angular-v16-a-leap-forward-Binding-route-data-to-input-properties-768x588.png 768w, https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Angular-v16-a-leap-forward-Binding-route-data-to-input-properties-1536x1177.png 1536w, https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Angular-v16-a-leap-forward-Binding-route-data-to-input-properties-16x12.png 16w, https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Angular-v16-a-leap-forward-Binding-route-data-to-input-properties.png 2000w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b5a40d7 author-article-title elementor-widget elementor-widget-text-editor\" data-id=\"b5a40d7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<span style=\"font-weight: 400;\">Angular v16: a leap forward<\/span>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4f1fde6 elementor-widget elementor-widget-text-editor\" data-id=\"4f1fde6\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Embracing a new pattern: signals for reactive programming<\/h3><p><span style=\"font-weight: 400;\">Angular 16 introduces a groundbreaking pattern based on signals, offering a fresh approach to reactive programming and change detection. This pattern minimizes the reliance on RxJS, a popular library for reactive programming. By leveraging signals, developers can streamline their codebase and enhance performance. Signals empower you to handle asynchronous operations with ease while maintaining clean and concise code.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b566dea elementor-widget elementor-widget-text-editor\" data-id=\"b566dea\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Optional Zone.js and simplified change detection<\/h3>\n<span style=\"font-weight: 400;\">With the advent of Angular 16, Zone.js is no longer a mandatory dependency. While Zone.js was previously used for change detection and change detector triggers, its complexity and maintenance overhead have prompted the Angular team to make it optional. By removing the mandatory requirement of Zone.js, the latest version reduces unnecessary overhead, resulting in improved performance and simplified project maintenance.\n<\/span>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9412440 elementor-widget elementor-widget-text-editor\" data-id=\"9412440\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Marking input properties as required<\/h3>\n<span style=\"font-weight: 400;\">In response to developer feedback, Angular 16 introduces the ability to mark input properties as required. This feature enhances the robustness of your application by explicitly specifying which input properties must be provided. With required input properties, you can enforce strict data contracts and ensure the correct usage of your components.\n<\/span>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0e4f151 elementor-widget elementor-widget-text-editor\" data-id=\"0e4f151\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Supercharged server-side rendering and hydration<\/h3><p><span style=\"font-weight: 400;\">Version 16 brings significant advancements to server-side rendering (SSR) and hydration, improving both performance and user experience. Hydration is now integrated out of the box, simplifying the setup process and eliminating the need for additional configuration. This improvement leads to faster and smoother SSR applications, ultimately enhancing search engine optimization (SEO), interaction time, and accessibility.<\/span><\/p><p><span style=\"font-weight: 400;\">Tests conducted on fully hydrated applications have demonstrated remarkable improvements of up to 45% in performance. The reduced time-to-interaction and enhanced responsiveness contribute to an unparalleled user experience, leading to increased engagement and customer satisfaction.<br \/><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-09b3d4d elementor-widget elementor-widget-text-editor\" data-id=\"09b3d4d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Binding route data to input properties<\/h3>\n<span style=\"font-weight: 400;\">Angular 16 introduces a convenient feature that allows you to bind route data directly to input properties. This enhancement simplifies the communication between components and facilitates the sharing of data across different parts of your application. By leveraging this capability, you can create dynamic and interconnected views that adapt seamlessly to changes in route data.\n<\/span>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12ba88d elementor-widget elementor-widget-text-editor\" data-id=\"12ba88d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Simplified stream cleanup with takeUntilDestroyed()<\/h3>\n<span style=\"font-weight: 400;\">To assist developers in managing and unsubscribing from streams, Angular 16 introduces the takeUntilDestroyed() pipe. This powerful utility automatically unsubscribes from streams when the component is destroyed. By utilizing this feature, you can mitigate memory leaks and ensure efficient resource management within your application.\n<\/span>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4ce7655 elementor-widget elementor-widget-text-editor\" data-id=\"4ce7655\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Improved standalone components<\/h3>\n<span style=\"font-weight: 400;\">Version 16 brings notable improvements to standalone components, empowering developers to build self-contained and reusable modules. With enhanced encapsulation and improved isolation, standalone components promote code modularity and facilitate the development of scalable and maintainable applications. This enhancement streamlines the process of creating reusable components, ultimately saving development time and effort.\n<\/span>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c1dd4cf elementor-widget elementor-widget-text-editor\" data-id=\"c1dd4cf\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Elevated unit testing with Jest and Web Test Runner<\/h3>\n<span style=\"font-weight: 400;\">Unit testing is a critical aspect of software development, and Angular 16 makes it even better with seamless integration of Jest and Web Test Runner. These powerful testing frameworks provide an intuitive and comprehensive environment for testing your applications. With enhanced testing capabilities, developers can ensure the reliability and stability of their codebase, ensuring that critical functionality remains intact throughout the development process. Jest and Web Test Runner offer a wide range of features, including advanced assertion libraries, code coverage analysis, and parallel test execution, enabling developers to write comprehensive test suites with ease. By adopting these cutting-edge testing frameworks, you can enhance the quality and robustness of your applications, giving you confidence in your codebase.\n<\/span>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-556855e elementor-widget elementor-widget-text-editor\" data-id=\"556855e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Autocomplete imports for effortless development<\/h3>\n<span style=\"font-weight: 400;\">Angular 16 introduces a convenient feature that simplifies the process of importing dependencies. With autocomplete imports, you can leverage intelligent code editors to automatically suggest and complete import statements for components, modules, services, and other dependencies. This enhancement significantly reduces the likelihood of import-related errors and accelerates development productivity. By leveraging autocomplete imports, you can focus on writing code rather than worrying about correct import syntax.\n<\/span>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dbe02b2 elementor-widget elementor-widget-text-editor\" data-id=\"dbe02b2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Streamlined HTML with self-closing tags<\/h3>\n<span style=\"font-weight: 400;\">Version 16 embraces the simplicity and conciseness of modern HTML standards by introducing self-closing tags. This feature enables you to write cleaner and more readable HTML code by eliminating the need for separate opening and closing tags. With self-closing tags, you can express HTML elements and components in a more concise and intuitive manner, enhancing the clarity and maintainability of your codebase.\n<\/span>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-614b0ef e-con-full e-flex e-con e-parent\" data-id=\"614b0ef\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-d303a7d e-grid e-con-full e-con e-child\" data-id=\"d303a7d\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-91326a4 elementor-hidden-mobile elementor-widget elementor-widget-image\" data-id=\"91326a4\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"841\" height=\"1054\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2022\/10\/img-1.png\" class=\"attachment-full size-full wp-image-155287\" alt=\"\" srcset=\"https:\/\/innowise.com\/wp-content\/uploads\/2022\/10\/img-1.png 841w, https:\/\/innowise.com\/wp-content\/uploads\/2022\/10\/img-1-239x300.png 239w, https:\/\/innowise.com\/wp-content\/uploads\/2022\/10\/img-1-817x1024.png 817w, https:\/\/innowise.com\/wp-content\/uploads\/2022\/10\/img-1-768x963.png 768w, https:\/\/innowise.com\/wp-content\/uploads\/2022\/10\/img-1-10x12.png 10w\" sizes=\"(max-width: 841px) 100vw, 841px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b9ddc7 elementor-hidden-desktop elementor-hidden-tablet elementor-widget elementor-widget-image\" data-id=\"7b9ddc7\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"434\" height=\"485\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2022\/10\/img-2.png\" class=\"attachment-full size-full wp-image-155288\" alt=\"\" srcset=\"https:\/\/innowise.com\/wp-content\/uploads\/2022\/10\/img-2.png 434w, https:\/\/innowise.com\/wp-content\/uploads\/2022\/10\/img-2-268x300.png 268w, https:\/\/innowise.com\/wp-content\/uploads\/2022\/10\/img-2-11x12.png 11w\" sizes=\"(max-width: 434px) 100vw, 434px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5476cd7 e-con-full e-flex e-con e-child\" data-id=\"5476cd7\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2c685a0 elementor-widget__width-initial elementor-widget-tablet__width-inherit elementor-widget elementor-widget-heading\" data-id=\"2c685a0\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\">Software performance not meeting expectations?<\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cc472d6 elementor-widget__width-initial elementor-widget-tablet__width-inherit elementor-widget elementor-widget-heading\" data-id=\"cc472d6\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\">We know how to migrate to Angular 16 for maximum efficiency.<\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8851aad elementor-align-center elementor-widget elementor-widget-button\" data-id=\"8851aad\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/innowise.com\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Contact us<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7cd3b45 author-article-title elementor-widget elementor-widget-text-editor\" data-id=\"7cd3b45\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><span style=\"font-weight: 400;\">Migrating to Angular 16: unleash the power of modern web development<\/span><\/h2>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c9db103 elementor-widget elementor-widget-text-editor\" data-id=\"c9db103\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Unlock a wealth of advanced features and enhancements by migrating your projects to Angular 16. Experience the capability to develop high-performance, scalable, and easily maintainable web applications.<\/span><\/p><p><span style=\"font-weight: 400;\">At Innowise, we lead the way in Angular development, harnessing the power of Angular 16 to create innovative and impactful web applications. Our team of skilled developers is fully equipped to assist you in seamlessly transitioning your projects to Angular 16, ensuring you unlock the framework&#8217;s full potential.<\/span><\/p><p><span style=\"font-weight: 400;\">Embark on an elevated web development journey with Angular 16 by reaching out to us today. Let us guide you in building cutting-edge applications that surpass the competition and provide unparalleled user experiences.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fe89ba7 elementor-widget elementor-widget-image\" data-id=\"fe89ba7\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"613\" src=\"https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Migrating-to-Angular-16-boosting-performance-and-streamlining-development-1024x784.png\" class=\"attachment-large size-large wp-image-113108\" alt=\"\" srcset=\"https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Migrating-to-Angular-16-boosting-performance-and-streamlining-development-1024x784.png 1024w, https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Migrating-to-Angular-16-boosting-performance-and-streamlining-development-300x230.png 300w, https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Migrating-to-Angular-16-boosting-performance-and-streamlining-development-768x588.png 768w, https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Migrating-to-Angular-16-boosting-performance-and-streamlining-development-1536x1177.png 1536w, https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Migrating-to-Angular-16-boosting-performance-and-streamlining-development-16x12.png 16w, https:\/\/innowise.com\/wp-content\/uploads\/2023\/05\/Migrating-to-Angular-16-boosting-performance-and-streamlining-development.png 2000w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1e50615 author-article-title elementor-widget elementor-widget-text-editor\" data-id=\"1e50615\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2><span style=\"font-weight: 400;\">How to migrate to Angular 16?<\/span><\/h2>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-edc5702 elementor-widget elementor-widget-text-editor\" data-id=\"edc5702\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">For a smooth and successful upgrade of your project to Angular 16, look no further than our expert team. Our developers possess extensive expertise in the migration process and will offer you invaluable guidance and support, guaranteeing a successful upgrade. We are fully committed to assisting you every step of the way, ensuring a smooth and efficient transition to Angular 16. Feel free to contact us &#8211; we are here to help.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d13850e e-con-full e-flex e-con e-parent\" data-id=\"d13850e\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ff1e974 elementor-widget elementor-widget-heading\" data-id=\"ff1e974\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">FAQ<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d9a191e faq elementor-widget elementor-widget-accordion\" data-id=\"d9a191e\" data-element_type=\"widget\" data-widget_type=\"accordion.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-accordion\">\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2281\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-2281\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"fas fa-plus\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">What are the key benefits of migrating to Angular 16?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2281\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-2281\"><p><span style=\"font-weight: 400;\">Migrating to Angular 16 brings several key benefits, including streamlined performance, improved security features, and advanced capabilities for building robust and scalable web applications. The latest version also introduces updates to optimize development workflows, providing developers with a more efficient and seamless experience.<\/span><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2282\" class=\"elementor-tab-title\" data-tab=\"2\" role=\"button\" aria-controls=\"elementor-tab-content-2282\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"fas fa-plus\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">What challenges might a developer face during the migration process to Angular 16?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2282\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"region\" aria-labelledby=\"elementor-tab-title-2282\"><p><span style=\"font-weight: 400;\">During the migration process to Angular 16, developers may encounter challenges such as potential compatibility issues with existing code, the need to update deprecated features, and ensuring third-party libraries are compatible. Additionally, adapting to new architectural changes and optimizing performance might pose hurdles. At Innowise, we stick to proper planning and documentation, so we effectively address occurring challenges, ensuring a smooth transition to the latest Angular version.<\/span><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2283\" class=\"elementor-tab-title\" data-tab=\"3\" role=\"button\" aria-controls=\"elementor-tab-content-2283\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"fas fa-plus\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"fas fa-minus\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">How does Angular 16 improve upon previous versions in terms of performance and scalability?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2283\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"3\" role=\"region\" aria-labelledby=\"elementor-tab-title-2283\"><p><span style=\"font-weight: 400;\">Angular 16 introduces significant enhancements in performance and scalability compared to previous versions. The latest features include optimized rendering processes, improved tree-shaking capabilities, and better support for lazy loading, all contributing to faster load times and more efficient resource utilization. These improvements empower developers to build highly scalable and responsive web applications.<\/span><\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t<script type=\"application\/ld+json\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What are the key benefits of migrating to Angular 16?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p><span style=\\\"font-weight: 400;\\\">Migrating to Angular 16 brings several key benefits, including streamlined performance, improved security features, and advanced capabilities for building robust and scalable web applications. The latest version also introduces updates to optimize development workflows, providing developers with a more efficient and seamless experience.<\\\/span><\\\/p>\"}},{\"@type\":\"Question\",\"name\":\"What challenges might a developer face during the migration process to Angular 16?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p><span style=\\\"font-weight: 400;\\\">During the migration process to Angular 16, developers may encounter challenges such as potential compatibility issues with existing code, the need to update deprecated features, and ensuring third-party libraries are compatible. Additionally, adapting to new architectural changes and optimizing performance might pose hurdles. At Innowise, we stick to proper planning and documentation, so we effectively address occurring challenges, ensuring a smooth transition to the latest Angular version.<\\\/span><\\\/p>\"}},{\"@type\":\"Question\",\"name\":\"How does Angular 16 improve upon previous versions in terms of performance and scalability?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p><span style=\\\"font-weight: 400;\\\">Angular 16 introduces significant enhancements in performance and scalability compared to previous versions. The latest features include optimized rendering processes, improved tree-shaking capabilities, and better support for lazy loading, all contributing to faster load times and more efficient resource utilization. These improvements empower developers to build highly scalable and responsive web applications.<\\\/span><\\\/p>\"}}]}<\/script>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4eff73b4 elementor-widget elementor-widget-html\" data-id=\"4eff73b4\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"thank-rating\">\n    Thank you for rating!\n<\/div>\n<div class=\"thank-comment\">\n    Thank you for comment!\n<\/div>\n<script src=\"\/wp-content\/themes\/hello-elementor\/assets\/js\/blog\/rating-star.js\"><\/script>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4bb11db4 elementor-widget elementor-widget-html\" data-id=\"4bb11db4\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script src=\"\/wp-content\/themes\/hello-elementor\/assets\/js\/blog\/rating-star.js\"><\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-aa9b2bd e-flex e-con-boxed e-con e-parent\" data-id=\"aa9b2bd\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3735389 elementor-widget elementor-widget-shortcode\" data-id=\"3735389\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">[post_share]<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-453616d table-content-container\" data-id=\"453616d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t<div class=\"elementor-element elementor-element-796f36a author-wrapper e-flex e-con-boxed e-con e-parent\" data-id=\"796f36a\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0b4a6a6 elementor-widget elementor-widget-html\" data-id=\"0b4a6a6\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"author-wrap\">\r\n      <div class=\"author-info\">\r\n        <img loading=\"lazy\" decoding=\"async\"\r\n        class=\"author-info__img\"\r\n          src=\"\/wp-content\/uploads\/2022\/02\/dima-naz.jpg\"\r\n          width=\"50\"\r\n          height=\"50\"\r\n          alt=\"author\"\r\n        \/>\r\n        <div class=\"author-info__personal-data\">\r\n          <a class=\"author-info__personal-data__name\" href=\"https:\/\/innowise.com\/authors\/dmitry-nazarevich\/\">\r\n            Dmitry Nazarevich\r\n          <\/a>\r\n          <span class=\"author-info__role\">CTO<\/span>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"author-gray-line\"><\/div>\r\n      <div class=\"author-date-publish\">\r\n        <span>Date:<\/span> <span>May 19, 2023<\/span>\r\n      <\/div>\r\n    <\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-section elementor-inner-section elementor-element elementor-element-fb0b911 elementor-section-full_width table-of-contents__sticky-container stickyWrapper72 elementor-section-height-default elementor-section-height-default\" data-id=\"fb0b911\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-6f97093 author-block\" data-id=\"6f97093\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7a6793d ddcv elementor-widget elementor-widget-html\" data-id=\"7a6793d\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n\r\n.article-description > .e-con-inner {\r\n     align-items: baseline !important;\r\n}\r\n\r\n.stickyWrapper72{\r\n    position: sticky;\r\n    top: 72px;\r\n    bottom: auto;   \r\n}  \r\n\r\n.toc-title {\r\n    margin: 0 !important;\r\n}\r\n\r\n<\/style>\r\n\r\n<script>\r\ndocument.addEventListener(\"DOMContentLoaded\", ()=>{\r\n        \r\nconst headerElement = document.querySelector(\".new-menu\");\r\n\r\nconst stickyElement = document.querySelector(\".stickyWrapper72\");\r\n\r\nconst headerElementH = headerElement.clientHeight;\r\n\r\n\r\nstickyElement.style.top =  headerElementH + 60 + \"px\";\r\n        \r\n});\r\n<\/script>\r\n\r\n<!--NOTE Change data-id in wrapper styles for hide this block on the mobile device screen-->\r\n<div class=\"toc-wrapper\">\r\n  <h3 class=\"toc-title\">Table of contents<\/h3>\r\n  <div class=\"toc toc-2\"><\/div>\r\n<\/div>\r\n\r\n<script>\r\n  \/\/NOTE Add the value from h2 as the key and the text you want to display as the key value in LINKS variable:\r\n  \/\/   const LINKS = {\r\n  \/\/       \"The demand for retail digital transformation\": \"The demand\"\r\n  \/\/   }\r\n\r\n  const LINKS = {\r\n    \"Unleashing the power of .NET 8\": \"gggggg\",\r\n    \"Revamping legacy systems: unlocking business potential through software modernization\":\r\n      \"hello\",\r\n  };\r\n\r\n  const OFFSET = 70;\r\n   const PADDING_BOTTOM_FOR_SCROLL = 100;\r\n  let headerList = [];\r\n  let allLinks = [];\r\n  \r\n  let ticking = false;\r\n     \r\n\r\n  const createList = () => {\r\n      \r\n      console.log('create');\r\n      \r\n      \r\n    const tocTarget = document.querySelector(\".toc.toc-2\");\r\n    const toc = document.createElement(\"ul\");\r\n    \r\n    \r\n    \r\n     headerList = [...document.querySelectorAll(\"h2\")];\r\n\r\n\r\n    \r\n    headerList = headerList.slice(0, -3);\r\n    \r\n    const filteredNodes = [document.querySelector(\".related_content_blog_container h2\")]\r\n    \r\n    headerList = headerList.filter((node)=> !filteredNodes.includes(node))\r\n    \r\n    \r\n   headerList.forEach((header,index) => {\r\n      const headerId = header.getAttribute(\"id\");\r\n      const headerText =\r\n        header.dataset.title && header.dataset.title !== \"\"\r\n          ? header.dataset.title\r\n          : header.textContent;\r\n          \r\n\r\n      const headerTocText = header.dataset.title;\r\n\r\n      const idFromText =\r\n        !headerId || headerId === \"\"\r\n          ? headerText\r\n              .toLowerCase()\r\n              .replace(\/[^\\w ]+\/g, \"\")\r\n              .replace(\/ +\/g, \"-\")\r\n          : headerId;\r\n          \r\n         \r\n\r\n      const newListItem = document.createElement(\"li\");\r\n      const newLink = document.createElement(\"a\");\r\n      newLink.setAttribute(\"href\", \"#\" + idFromText);\r\n      newLink.textContent = LINKS[headerText] || headerText;\r\n\r\n      newLink.addEventListener(\"click\", (e) => {\r\n          \r\n        e.preventDefault();\r\n        const y =\r\n          header.getBoundingClientRect().top +\r\n          window.pageYOffset -\r\n          PADDING_BOTTOM_FOR_SCROLL -\r\n          OFFSET;\r\n          ticking = true; \r\n        window.scrollTo({ top: y, behavior: \"smooth\" });\r\n        \r\n        setTimeout(()=>{\r\n            ticking = false;\r\n        },500);\r\n        \r\n      });\r\n      \r\n\r\n      newListItem.appendChild(newLink);\r\n    toc.appendChild(newListItem);\r\n    \r\n    \r\n    });\r\n    tocTarget.appendChild(toc);\r\n    allLinks = Array.from(document.querySelector(\".toc.toc-2\").querySelectorAll(\"ul li\"));\r\n  };\r\n\r\n  const setContainerHeight = () => {\r\n    const windowHeight = window.innerHeight;\r\n    const tocContainer = document.querySelector(\".ddcv\");\r\n\r\n    tocContainer.style.maxHeight = \"calc(100vh - 230px)\";\r\n    tocContainer.style.minHeight = \"200px\";\r\n  };\r\n\r\n\r\n  const checkScroll = () => {\r\n      const windowHeight = window.innerHeight;\r\n      const scrollTop = window.scrollY || document.documentElement.scrollTop;\r\n\r\n      let selectedHeaderIndex = -1;\r\n\r\n      headerList.forEach((header, index) => {\r\n        \r\n  const posTop = header.getBoundingClientRect().top;\r\n       \r\n\r\n const isInViewport = posTop + elem.clientHeight <= window.innerHeight ;\r\n \r\n\r\n \r\n if(isInViewport){\r\n      selectedHeaderIndex = index;\r\n }\r\n        \r\n\r\n\r\n        \r\n      });\r\n      \r\n\r\n\r\n        allLinks.forEach((link, i) => {\r\n            if(i === selectedHeaderIndex){\r\n              link.classList.remove(\"pre-active\");  \r\n              link.classList.add(\"active\");\r\n            }\r\n            if(i < selectedHeaderIndex){\r\n              link.classList.add(\"pre-active\"); \r\n               link.classList.remove(\"active\");\r\n            }\r\n             if(i > selectedHeaderIndex){\r\n            link.classList.remove(\"pre-active\");\r\n            link.classList.remove(\"active\");\r\n            }\r\n            \r\n            \r\n            \r\n        });\r\n        \r\n\r\n\r\n  };\r\n\r\n  const loadAllImages = () => {\r\n    const images = document.getElementsByTagName(\"img\");\r\n\r\n    for (let i = 0; i < images.length; i++) {\r\n      const img = images[i];\r\n      const src = img.getAttribute(\"data-src\") || img.src;\r\n      img.src = src;\r\n    }\r\n  };\r\n\r\n  loadAllImages();\r\n  \r\n  \r\n  \r\n\r\n\r\n  document.addEventListener(\"DOMContentLoaded\", () => {\r\n      \r\n      \r\n     setTimeout(()=>{\r\n           createList();\r\n    setContainerHeight();\r\n  \r\n    \r\n    document.addEventListener(\"scroll\", (event) => {\r\n  if (!ticking) {\r\n    checkScroll();\r\n  }\r\n});\r\n    \r\n    \r\n},300) \r\n\r\n    \r\n  });\r\n\r\n\r\n  \r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-dfc93ef rate-article elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"dfc93ef\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-b4a9343 rate-article-first-block\" data-id=\"b4a9343\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-6db50f8 rate-container\" data-id=\"6db50f8\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9a22e7c rate-text elementor-widget elementor-widget-text-editor\" data-id=\"9a22e7c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Rate this article:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-ee109ce rate-article-star-block\" data-id=\"ee109ce\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4f1f3ad elementor--star-style-star_unicode elementor-star-rating--align-left elementor-star-rating-tablet--align-left elementor-widget elementor-widget-star-rating\" data-id=\"4f1f3ad\" data-element_type=\"widget\" data-widget_type=\"star-rating.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<div class=\"elementor-star-rating__wrapper\">\n\t\t\t\t\t\t<div class=\"elementor-star-rating\" title=\"4\/5\" itemtype=\"http:\/\/schema.org\/Rating\" itemscope=\"\" itemprop=\"reviewRating\"><i class=\"elementor-star-full\">&#9733;<\/i><i class=\"elementor-star-full\">&#9733;<\/i><i class=\"elementor-star-full\">&#9733;<\/i><i class=\"elementor-star-full\">&#9733;<\/i><i class=\"elementor-star-empty\">&#9733;<\/i> <span itemprop=\"ratingValue\" class=\"elementor-screen-only\">4\/5<\/span><\/div>\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-25 elementor-top-column elementor-element elementor-element-eabf73f\" data-id=\"eabf73f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e6c178a reviews elementor-widget elementor-widget-text-editor\" data-id=\"e6c178a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>4.8\/5 (45 reviews)<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c55ecdf rate-comment elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c55ecdf\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-f922cee comment-article-first-block\" data-id=\"f922cee\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-66 elementor-top-column elementor-element elementor-element-2adc2a1\" data-id=\"2adc2a1\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t<div class=\"elementor-element elementor-element-2371dd9 e-flex e-con-boxed e-con e-parent\" data-id=\"2371dd9\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-01159a5 elementor-widget elementor-widget-shortcode\" data-id=\"01159a5\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f100240-o1\" lang=\"en-US\" dir=\"ltr\" data-wpcf7-id=\"100240\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/it\/wp-json\/wp\/v2\/posts\/113097#wpcf7-f100240-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Contact form\" enctype=\"multipart\/form-data\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"100240\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_US\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f100240-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<style>\n#form-templates .contact__info {\n  background-color: #f4f4f4;\n  padding: 70px 44px 70px 50px;\n  position: relative;\n  max-width: 540px;\n  width: 100%;\nborder: 1px solid #AEB1B7;\n}\n\n#form-templates .contact__info-background {\n  z-index: -1;\n  position: absolute;\n  top: 20px;\n  left: 20px;\n  width: 100%;\n  height: 100%;\n  border: 1px dashed #ef4557;\n}\n\n\n#form-templates .new-container{\ndisplay: flex;\njustify-content: space-between;\nflex-wrap: wrap;\n}\n\n\n#form-templates{\npadding: 100px 15px 100px 15px;        \n}\n\n#form-templates .contact__info-heading {\n  font-family: 'Sora' !important;\n  font-style: normal !important;\n  font-weight: 400 !important;\n  font-size: 36px !important;\n  line-height: 46px !important;\n  color: #2E2E2E !important;\n   margin-bottom: 60px !important;\n\n}\n\n\n#form-templates .message label{\ncolor: #585858 !important;   \n}\n\n.elementor-widget-container.form-template h2,.elementor-widget-container.form-template h1{\n font-size: 60px !important;\n  line-height: 70px !important;\n  font-family: \"Sora\", Sans-serif;\n  font-weight: 400;\n  margin: 0;  \n  margin-bottom: 20px;\n}\n\n\n\n\n.elementor-widget-container.form-template p{\n  font-family: \"Karla\", Sans-serif;\n  font-size: 22px;\n  font-weight: 400;\n  line-height: 28px;\n  color: var( --e-global-color-primary );\n  max-width: 700px;\n  margin: 0; \n  margin-bottom: 40px;\n} \n  \n\n\n.new-container #spinner{\nwidth: 50%;\nmax-width: 700px;\n}\n\n\n#form-templates .new-container #spinner div.contact-us__wrapper:nth-child(6){\ngap:30px; \n    \n}\n\n\n#form-templates .contact__info-heading {\n  margin-bottom: 67px;\n  font-size: 36px;\n  font-family: karla;\n  color:  #2E2E2E;\n\n  line-height: 49px;\n}\n\n#form-templates .contact__info-steps {\n  display: flex;\n  flex-direction: column;\n  max-width: 425x;\n  row-gap: 20px;\n  border-left: 1px solid #2e2e2e;\n}\n\n#form-templates .contact__info-block {\n  position: relative;\n  padding-left: 45px;\n}\n\n#form-templates .contact__info-block:last-child {\n  box-shadow: -1px 0 0 1px #f4f4f4;\n}\n\n#form-templates .contact__info-step {\n  position: absolute;\n  border: 1px solid #2e2e2e;\n  width: 40px;\n  height: 40px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 20px;\n  left: -20px;\n  top: -8px;\n  background-color: #F4F4F4;\n  color:  #2E2E2E;\n\nfont-family: Karla;\nfont-weight: 700;\nfont-size: 18px;\nline-height: 28px;\n\n}\n\n.elementor-widget-global .contact__info-step {\n        color:  #2E2E2E;\n}\n\n#form-templates .contact__info-text {\n  margin: 0;\n  font-size: 16px;\n  line-height: 26px;\n  color: #2E2E2E;\n  font-family: karla;\n\n  width: 100%;\n}\n\n\n#form-templates .contact-us__send{\nflex-shrink: 0;\nmargin-top:0;\n}\n\n\n\n@media screen and (max-width: 1279px) {\n    .new-container #spinner{\n        width: 100%;\n        max-width:100%;\n        margin-bottom:40px;\n    }\n    \n\n    .new-container .contact__info {\n        max-width: 700px !important;\n    }\n    \n}\n\n\n@media screen and (max-width: 1279px) {\n#form-templates{\npadding: 60px 15px 70px 15px;     \n}\n}\n\n\n\n@media screen and (max-width: 767px) {\n\n#form-templates .new-container #spinner div.contact-us__wrapper:nth-child(6){\ngap:20px; \n \n}\n\n\n  #form-templates .contact__info {\n    padding: 20px 20px 40px 40px;\n    margin: 0 auto;\n  }\n\n\n#form-templates{\npadding: 40px 15px 50px 15px;  \n    \n}\n\n  \n   .new-container #spinner{\n       \n    margin-bottom:30px;   \n   }\n   \n   \n   .elementor-widget-container.form-template h2,.elementor-widget-container.form-template h1{\n   font-size: 32px !important;\n    line-height: 42px !important;    \n   }\n   \n   \n   .elementor-widget-container.form-template p{\n       \n    font-size: 16px;\n    line-height: 20px;  \n    margin-bottom: 30px;\n \n       \n   }\n   \n   #form-templates .contact__info-heading{\n   font-size: 24px !important;\n    line-height: 49px !important;    \n       \n   }\n   \n\n.mailToContact{\nmargin-top: 10px !important;        \n}\n   \n\n  #form-templates .contact__info-heading {\n    font-size: 24px;\n    margin-bottom: 37px;\n  }\n\n  #form-templates .contact__info-background {\n    top: 10px;\n    left: 10px;\n  }\n\n  #form-templates .contact__info-text {\n    font-size: 12px;\n    line-height: 20px;\n  }\n  \n  \n  #form-templates .contact__info-heading {\n   margin-bottom: 35px !important;\n\n}\n\n}\n\n@media (max-width: 767px) {\n    .mailToContact {\n        max-width: 100%;\n    }\n}\n<\/style>\n\n<script>\nwindow.addEventListener('hashchange',function(e){if(window.history.pushState){window.history.pushState('','\/',window.location.pathname)}else{window.location.hash=''}})\n<\/script>\n\n\n<div id=\"form-templates\">\n<div class=\"elementor-widget-container form-template\">\n<a name=\"contact-form\"><\/a>\n<h2>Contact us<\/h2>\n<p><a id=\"calendlylink\" style=\"color: #c63031; border-bottom: 1px solid #c63031; padding: 0;\">Book a call<\/a> or fill out the form below and we\u2019ll get back to you once we\u2019ve processed your request.<\/p>\n<\/div>\n\n<div class=\"new-container\">\n\n\n<div class=\"contact-us__main\" id=\"spinner\" data-no-defer=\"1\">\n\n<div class=\"contact-us__wrapper\">\n\n<div class=\"name\">\n<label>Name<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"field_name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required contact-us__name\" id=\"contact-name\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Name*\" value=\"\" type=\"text\" name=\"field_name\" \/><\/span>\n<\/div>\n\n<div class=\"company\">\n<label>Company<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"company\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required contact-us__company\" id=\"contact-company\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Company*\" value=\"\" type=\"text\" name=\"company\" \/><\/span>\n<\/div>\n\n<\/div>\n\n<div class=\"contact-us__wrapper\">\n\n<div class=\"email\">\n<label>Email<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email contact-us__email\" id=\"contact-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Corporate email*\" value=\"\" type=\"email\" name=\"email\" \/><\/span>\n<\/div>\n\n<div class=\"phone\">\n<label>Phone<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"tel\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel contact-us__phone\" id=\"contact-phone\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Phone*\" value=\"\" type=\"tel\" name=\"tel\" \/><\/span>\n<\/div>\n\n<\/div>\n<div class=\"contact-us__wrapper subj\">\n<span class=\"wpcf7-form-control-wrap\" data-name=\"your-recipient\"><select class=\"wpcf7-form-control wpcf7-select\" id=\"form-field-subj_js\" aria-invalid=\"false\" name=\"your-recipient\"><option value=\"\">Subject*<\/option><option value=\"IT staff augmentation\">IT staff augmentation<\/option><option value=\"Turnkey product development\">Turnkey product development<\/option><option value=\"Support and enhancement\">Support and enhancement<\/option><option value=\"Careers\">Careers<\/option><option value=\"Other\">Other<\/option><\/select><\/span>\n\n<span class=\"wpcf7-form-control-wrap\" data-name=\"form-field-budget_js\"><select class=\"wpcf7-form-control wpcf7-select\" id=\"form-field-budget_js\" aria-invalid=\"false\" name=\"form-field-budget_js\"><option value=\"\">Project budget<\/option><option value=\"Under $15K\">Under $15K<\/option><option value=\"$15K-$30K\">$15K-$30K<\/option><option value=\"$30K-$100K\">$30K-$100K<\/option><option value=\"$100K-$250K\">$100K-$250K<\/option><option value=\"$250K-$500K\">$250K-$500K<\/option><option value=\"More than $500K\">More than $500K<\/option><\/select><\/span>\n\n<\/div>\n\n\n<div class=\"message\">\n<label>Message<\/label>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"message\"><textarea cols=\"40\" rows=\"1\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required contact-us__message\" id=\"contact-message\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Describe your needs in detail*\" name=\"message\"><\/textarea><\/span>\n<\/div>\n\n<div class=\"atvoice-wrap\">\n\n<div class=\"voice-wrap\">\n<span id=\"voice-mut\" class=\"voicetext\">Send us a voice message<\/span>\n         <div class=\"qc_voice_audio_wrapper\">\n            <div class=\"qc_voice_audio_container\">\n                <div class=\"qc_voice_audio_upload_main\" id=\"qc_audio_main\">\n                    <a class=\"qc_audio_record_button\" id=\"qc_audio_record\" href=\"#\" aria-label=\"Record an audio message\">\n                        <span class=\"dashicons dashicons-microphone\"><\/span> \u00a0<\/a> \n                <\/div>\n\n                <div class=\"qc_voice_audio_recorder\" id=\"qc_audio_recorder\" style=\"display:none\">\n\n                <\/div>\n                <div class=\"qc_voice_audio_display\" id=\"qc_audio_display\"  style=\"display:none\">\n                    <audio id=\"qc-audio\" controls src=\"\"><\/audio>\n                    <span title=\"Remove and back to main upload screen.\" class=\"qc_audio_remove_button dashicons dashicons-trash\"><\/span>\n                <\/div>\n            <\/div>\n            <input type=\"hidden\" value=\"\" name=\"qcwpvoicemessage\" id=\"qc_audio_url\" \/>\n        <\/div>\n        \n<\/div>\n\n\n<div class=\"attach-wrap\">\n<span class=\"voicetext\">Attach documents<\/span>\n\n<div class='attachment'>\n\n<div class=\"downloaded\">\n<span><\/span>\n<div class=\"deleteFile\"><\/div>\n<\/div>\n\n<div class=\"attachmentButton\" onclick=\"(function cl(e){if(e.target.nodeName == 'DIV'){e.target.parentNode.children[1].children[0].click(); }})(arguments[0]);\">\n\n<div class=\"innerText\">Upload file<\/div>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"att-files\"><input size=\"40\" class=\"wpcf7-form-control wpcf7-file\" accept=\".jpg,.png,.jpeg,.pdf\" aria-invalid=\"false\" type=\"file\" name=\"att-files\" \/><\/span>\n\n<div class=\"tip\" onclick=\"event.stopPropagation()\">\n<p>You can attach 1 file up to 2MB. Valid file formats: pdf, jpg, jpeg, png.<\/p>\n<\/div>\n\n<\/div>\n\n<\/div>\n\n<\/div>\n\n\n\n<\/div>\n\n<div class=\"contact-us__wrapper\"> \n<p class=\"pp\">By clicking Send, you consent to Innowise processing your personal data per our<a href=\"\/privacy-notice\/\"> Privacy Policy <\/a>to provide you with relevant information. By submitting your phone number, you agree that we may contact you via voice calls, SMS, and messaging apps. Calling, message, and data rates may apply.<\/p>\n\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"scoring_point\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmCampaign\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmContent\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmMedium\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmSource\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"utmTerm\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"location\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"city\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"ip\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"Summ\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"gclid\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"rating\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"urlCompany\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"urlWithParams\" \/>\n<input class=\"wpcf7-form-control wpcf7-hidden\" value=\"\" type=\"hidden\" name=\"audioMessageLink\" \/>\n<input class=\"wpcf7-form-control wpcf7-submit has-spinner contact-us__send\" id=\"contact-send-button\" type=\"submit\" value=\"Send\" \/>\n<\/div>\n\n<div class='mailToContact'>You can also send us your request <\/br>to <a href=\"mailto:contact@innowise.com\">contact@innowise.com<\/a><\/div>\n\n<\/div>\n\n<div class=\"elementor-widget-container\" style=\"z-index:1;\">\n<div class=\"contact__info\">\n  <div class=\"contact__info-background\"><\/div>\n  <div class=\"contact__info-heading\">What happens next?<\/div>\n  <div class=\"contact__info-steps\">\n\n    <div class=\"contact__info-block\">\n      <div class=\"contact__info-step\">1<\/div>\n      <p class=\"contact__info-text\">Once we\u2019ve received and processed your request, we\u2019ll get back to you to detail your\n        project needs and sign an NDA to ensure confidentiality.<\/p>\n    <\/div>\n\n    <div class=\"contact__info-block\">\n      <div class=\"contact__info-step\">2<\/div>\n      <p class=\"contact__info-text\">After examining your wants, needs, and expectations, our team will devise a project\n        proposal with the scope of work, team size, time, and cost estimates.<\/p>\n    <\/div>\n\n    <div class=\"contact__info-block\">\n      <div class=\"contact__info-step\">3<\/div>\n      <p class=\"contact__info-text\">We\u2019ll arrange a meeting with you to discuss the offer and nail down the details.<\/p>\n    <\/div>\n\n    <div class=\"contact__info-block\">\n      <div class=\"contact__info-step\">4<\/div>\n      <p class=\"contact__info-text\">Finally, we\u2019ll sign a contract and start working on your project right away.<\/p>\n    <\/div>\n  <\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\n<\/div>\n\n<\/div><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"related_content_blog_container\">[related_content_list]<\/div><script>\n            jQuery( document ).ready(function($) {\n            var parentSection = $('[data-elementor-type=\"wp-page\"]');\n            if($('[data-elementor-type=\"wp-post\"]').length){\n                var parentSection = $('[data-elementor-type=\"wp-post\"]');\n            }\n            \n                parentSection.children().last().before($('.related_content_blog_container'));\n            });\n            <\/script><div class=\"other_services_container\">[need_other_services_v2]<\/div><script>\n                    jQuery( document ).ready(function($) {\n                        var parentSection = $('[data-elementor-type=\"wp-page\"]');\n                        if($('[data-elementor-type=\"wp-post\"]').length){\n                            var parentSection = $('[data-elementor-type=\"wp-post\"]');\n                        }\n                        \n                        console.log(parentSection);\n                        parentSection.children().last().before($('.other_services_container'));\n                        var sections = parentSection.find('.net-15.dt-16');\n                        for(var i = 0; i<sections.length; i++){\n                            if($(sections[i]).hasClass( 'net-15' ) && $(sections[i]).hasClass( 'dt-16' ) && $(sections[i]).hasClass( 'elementor-hidden-desktop' )==false){\n                                $(sections[i]).before($('.other_services_container'));   \n                            }\n                        }\n                        \n                    });\n                <\/script>","protected":false},"excerpt":{"rendered":"<p>Main About us Blog 5 min read Migrating to Angular 16: boosting performance and streamlining development [display_tags] We are thrilled to announce the highly anticipated release of Angular 16, the latest iteration of the renowned web application framework. The Angular 16 release date was on May 3, 2023. With a wealth of powerful features and [&hellip;]<\/p>\n","protected":false},"author":22,"featured_media":113113,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[128,1021],"class_list":["post-113097","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-dmitry_author","tag-front-end-development","tag-news"],"acf":[],"_links":{"self":[{"href":"https:\/\/innowise.com\/it\/wp-json\/wp\/v2\/posts\/113097","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/innowise.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/innowise.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/innowise.com\/it\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/innowise.com\/it\/wp-json\/wp\/v2\/comments?post=113097"}],"version-history":[{"count":0,"href":"https:\/\/innowise.com\/it\/wp-json\/wp\/v2\/posts\/113097\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/innowise.com\/it\/wp-json\/wp\/v2\/media\/113113"}],"wp:attachment":[{"href":"https:\/\/innowise.com\/it\/wp-json\/wp\/v2\/media?parent=113097"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/innowise.com\/it\/wp-json\/wp\/v2\/categories?post=113097"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/innowise.com\/it\/wp-json\/wp\/v2\/tags?post=113097"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}