\n\n<a href=\"\/services\/nodejs-development\">Development with Node.js<\/a> lives up to its opinion as the new standard for enterprise applications. Some even claim that it\u2019s so powerful that it has the potential to replace Java for good\u2014dethroning it as the most trusted language, a spot that Java has held since 1995.\n\nSeemingly every month now, another enterprise-level company reveals that it\u2019s been successfully using the platform in its operations. As of today, the list includes giants such as Walmart, NASA, Intel, and Twitter. Many others decided to rewrite their existing code to Node.js to boost their teams\u2019 productivity and increase the performance of their applications. According to the <a href=\"http:\/\/labs.openviewpartners.com\/category\/marketing\/\" target=\"_blank\" rel=\"noopener\">Node.js User Survey<\/a>, 43% of Node.js programmers claim to have used it for enterprise apps.\n\nWhat makes it so <em>special<\/em> that almost all Fortune 500 companies use it? Well, the answer to those questions is just as complex as the enterprise apps built with Node. So I\u2019ll try to give you a short version (which will still be kinda long).\n\nEverything clear so far?\n\n<hr \/>\n\n<em>Our devs are so communicative and diligent you\u2019ll feel like they\u2019re your in-house team. Work with JavaScript experts who will push hard to understand your business and meet deadlines. <a href=\"\/contact\" target=\"_blank\" rel=\"noopener\">Talk to our team and confidently build your next big thing.<\/a><\/em>\n\n<hr \/>\n\n<strong style=\"font-family: Unna, serif; font-size: 2rem;\">A Brief Intro to Node.js Development\u00a0<\/strong>\n\nNode.js is a JS runtime environment which allows the infrastructure to build and run an application. It\u2019s a light, scalable, and cross-platform way to execute code. It uses an event-driven I\/O model which makes it extremely efficient and makes scalable network application possible.\n\nWith more than a <a href=\"https:\/\/medium.com\/@nodejs\/more-than-a-billion-downloads-of-node-js-952a8a98eb42\" target=\"_blank\" rel=\"noopener\">billion downloads<\/a>, Node.js thrives in building real-time applications, Internet of Things, and microservices. It\u2019s gaining traction faster than any other technology and ranks in the <a href=\"https:\/\/blog.tunga.io\/the-top-17-most-in-demand-software-skills-for-2018-f37df6c0915b\" target=\"_blank\" rel=\"noopener\">top most-in-demand developer skills<\/a>.\n\nThe most important advantages of Node include:\n<ul>\n \t<li>it makes building real-time apps (eg. chat or gaming) lightning fast,<\/li>\n \t<li>It makes coding in JavaScript for both the client and server side possible,<\/li>\n \t<li>it increases the efficiency of the development process as it fills the gap between frontend and backend developers (more on this later),<\/li>\n \t<li>the ever-growing NPM (Node Package Manager) gives developers multiple tools and modules to use, thus further boosting their productivity,<\/li>\n \t<li>code executes faster than in any other language,<\/li>\n \t<li>Node is perfect for microservices which are a popular solution among enterprise apps.<\/li>\n<\/ul>\n<h2><strong>So Why Should Enterprises Go With Node.js?<\/strong><\/h2>\nAny programming language will give you <em>some<\/em> reasons to choose them over others. The thing about Node.js is that it was developed for applications at scale. Modern tooling and its embrace of the more forward-looking way of developing complex applications make Node.js stand apart from other programming technologies.\n<h2><strong>Performance and Scalability<\/strong><\/h2>\nNode.js is built upon <a href=\"https:\/\/nodesource.com\/blog\/why-the-new-v8-is-so-damn-fast\/\" target=\"_blank\" rel=\"noopener\">Google Chrome\u2019s V8 runtime<\/a>\u2014written in C++, built for multiple operating systems and super fast. Both V8 and Node are frequently updated, with performance optimizations, security patches, and support for modern JavaScript features. The use of JavaScript also means that transforming JSON data\u2014the most common data interchange format on the Web\u2014is fast by default.\n\nThe single-threaded, event-driven architecture of Node.js allows it to handle multiple simultaneous connections efficiently. Most of the popular web platforms create an additional thread for each new request, using up RAM for the whole time it takes to process it. Node, on the other hand, operates on a single thread, making use of the event loop and callbacks for I\/O operations, delegating tasks such as database operations as soon as possible. This allows it to handle <a href=\"https:\/\/blog.jayway.com\/2015\/04\/13\/600k-concurrent-websocket-connections-on-aws-using-node-js\/\" target=\"_blank\" rel=\"noopener\">hundreds of thousands<\/a> or even <a href=\"http:\/\/blog.caustik.com\/2012\/08\/19\/node-js-w1m-concurrent-connections\/\" target=\"_blank\" rel=\"noopener\">a million<\/a> concurrent connections.\n\nWhat\u2019s more, Node.js embraces scalability from the get-go, with powerful features such as the Cluster module enabling load balancing over multiple CPU cores. Robust tools, such as the <a href=\"http:\/\/pm2.keymetrics.io\/\" target=\"_blank\" rel=\"noopener\">PM2 process manager<\/a>, make it even easier to monitor, optimize and deploy Node applications.\n<h2><strong>Combining Node.js with a Microservices Pattern<\/strong><\/h2>\nEvery project starts out small. Or with the MVP release, if you prefer. But as time flies, it starts being more than a remedy for one problem. It continues to grow, gaining new features and users with high expectations (but not enough love to be overly forgiving).\n\nWithout even noticing, you may end up with a huge project that your huge development team struggles to cope with. Soon, you will probably need to add new features while still providing a top-notch performance to your users. But as it gets more and more complex, introducing new changes becomes a nightmare.\n\nThis is a common problem among enterprise applications.\n\nTake this for example: you run a marketing app that serves three theoretically separate and equal area, like email marketing, CMS, and reporting. Obviously, one feature will be used much more often than other two, with some people even going as far as only using the CMS part of the app while ignoring the rest. As your user base grows, more computing power will have to be added to the servers in order for your app to work properly and not crash. The best way to solve that would be to scale just the CMS part. After all, the other two deal with the traffic loads just fine, right? Such an approach, however, is impossible with monolithic apps and eventually you\u2019re forced to scale the whole system. Everybody already knows that social media has gone from entertainment to a must-have marketing item for every brand. By 2020, consumers are used to communicating with everyone online and are unlikely to give up Internet communication with brands in social networks and instant messengers, so what are the <a href=\"https:\/\/entrepreneurthearts.com\/social-media-trends-2021-whats-working-and-what-isnt-this-year\/\">social media trends<\/a> that we are getting now.\n\nMoreover, with all the complexity, the app often becomes difficult to handle, the deployment becomes a real pain, and the whole team gets too big to coordinate their work in an efficient manner.\n\nThe answer to this problem is <strong>the microservices pattern<\/strong>.\n\nAccording to <a href=\"https:\/\/mxstbr.blog\/2017\/01\/your-first-node-microservice\/\" target=\"_blank\" rel=\"noopener\">Max Stoiber<\/a>, an open-source developer:\n<blockquote class=\"blockquote--simple\">A microservice is a single self-contained unit which, together with many others, makes up a large application. By splitting your app into small units every part of it is independently deployable and scalable, can be written by different teams and in different programming languages and can be tested individually.<\/blockquote>\nThat also means you can run separate teams in Poland, India, and the US, and they can work independently on different parts of the same app. Smaller teams are much easier to work with, plus, you don\u2019t have to deploy the whole codebase every time you want to introduce some change in one part of your app.\n\nThere\u2019s a number of well-known enterprise-level companies who have already embraced the power of Node.js and microservices, a perfect combination for better performance, less code, and efficient deployment. <a href=\"https:\/\/thenewstack.io\/enterprises-embracing-microservices-node-js\/\" target=\"_blank\" rel=\"noopener\">PayPal, Netflix, and GoDaddy<\/a> are just a handful of them.\n\n<img style=\"width: 1060px;\" src=\"https:\/\/www.monterail.com\/hs-fs\/hubfs\/core%20app.png?t=1539249948154&width=1060&name=core%20app.png\" sizes=\"(max-width: 1060px) 100vw, 1060px\" srcset=\"https:\/\/www.monterail.com\/hs-fs\/hubfs\/core%20app.png?t=1539249948154&width=530&name=core%20app.png 530w, https:\/\/www.monterail.com\/hs-fs\/hubfs\/core%20app.png?t=1539249948154&width=1060&name=core%20app.png 1060w, https:\/\/www.monterail.com\/hs-fs\/hubfs\/core%20app.png?t=1539249948154&width=1590&name=core%20app.png 1590w, https:\/\/www.monterail.com\/hs-fs\/hubfs\/core%20app.png?t=1539249948154&width=2120&name=core%20app.png 2120w, https:\/\/www.monterail.com\/hs-fs\/hubfs\/core%20app.png?t=1539249948154&width=2650&name=core%20app.png 2650w, https:\/\/www.monterail.com\/hs-fs\/hubfs\/core%20app.png?t=1539249948154&width=3180&name=core%20app.png 3180w\" alt=\"Node.js development by Monterail \u2014 Microservices Pattern\" width=\"1060\" \/>\n\n<em>Source: <a href=\"https:\/\/www.forgeahead.io\/blogs\/why-microservices-is-the-talk-of-the-town\/\" target=\"_blank\" rel=\"noopener\">forgeahead.io<\/a><\/em>\n<h2><strong>Building Cross-Functional Teams<\/strong><\/h2>\nContrary to a skill-set silos teams, in a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Cross-functional_team\" target=\"_blank\" rel=\"noopener\">cross-functional team<\/a> every member is responsible for the entire lifecycle of the app: writing code, testing, hosting, deployment, and maintenance. Teams like that are made up of experts in all the relevant areas: front- and backend developers, infrastructure engineers, and quality assurance experts.\n\nThis approach, popularized by Agile advocates, is quite common in startup circles, as most startups have limited workforces at their disposal. But with the microservices mindset in place, it\u2019s also within the reach of enterprises and should be encouraged for better agility, innovation, and smoother collaboration.\n\nThere\u2019s no place in there for \u201cThis ain\u2019t my job\u201d sentiments\u2014everyone\u2019s working towards the same goal, providing their own perspective on the problem.\n\nAs Node.js is JavaScript, it fills the gap between frontend and backend skills for developers, which means they can act as full-stack devs without having to learn additional languages. In reality, some parts of the app may require greater focus on the client\u2019s side, while others will require server-side focus. Full-stack developers who know JavaScript can use it for both. Your coworkers\u2019 days off are also less of a problem as some other dev can simply step in to pick up the slack when needed.<span style=\"font-size: 1.125rem;\">\u00a0<\/span>\n\n<img style=\"width: 880px;\" src=\"https:\/\/www.monterail.com\/hs-fs\/hubfs\/functional%20team.jpg?t=1539249948154&width=880&name=functional%20team.jpg\" sizes=\"(max-width: 880px) 100vw, 880px\" srcset=\"https:\/\/www.monterail.com\/hs-fs\/hubfs\/functional%20team.jpg?t=1539249948154&width=440&name=functional%20team.jpg 440w, https:\/\/www.monterail.com\/hs-fs\/hubfs\/functional%20team.jpg?t=1539249948154&width=880&name=functional%20team.jpg 880w, https:\/\/www.monterail.com\/hs-fs\/hubfs\/functional%20team.jpg?t=1539249948154&width=1320&name=functional%20team.jpg 1320w, https:\/\/www.monterail.com\/hs-fs\/hubfs\/functional%20team.jpg?t=1539249948154&width=1760&name=functional%20team.jpg 1760w, https:\/\/www.monterail.com\/hs-fs\/hubfs\/functional%20team.jpg?t=1539249948154&width=2200&name=functional%20team.jpg 2200w, https:\/\/www.monterail.com\/hs-fs\/hubfs\/functional%20team.jpg?t=1539249948154&width=2640&name=functional%20team.jpg 2640w\" alt=\"Node.js development in cross-functional teams at Monterail\" width=\"880\" \/>\n\n<em>Souce: <a href=\"https:\/\/dev.to\/galyna_chekan\/cross-functional-teams-and-what-value-they-bring-2pmc\">dev.to<\/a><\/em>\n<h2><strong>npm Enterprise<\/strong><\/h2>\nThe Node Package Manager, known as an <a href=\"https:\/\/www.npmjs.com\/\" target=\"_blank\" rel=\"noopener\">npm<\/a>, allows programmers to install, update, and use smaller open-source software packages (modules), which means they don\u2019t have to write common features from scratch and can avoid new layers of complexity that often come with that particular territory.\n\nGiven that privacy and security are often of the biggest concern for enterprises, npm released the <a href=\"https:\/\/www.npm-enterprise.com\/\" target=\"_blank\" rel=\"noopener\">Enterprise version<\/a> of its package manager.\n\nAs big organizations may be wary of storing their data in the cloud (especially government organizations, as well as those working in fields such as fintech or medtech), npm Enterprise allows you to run npm's infrastructure behind your company's firewall. It gives businesses access to a private registry with advanced security features to help them control access to code, identify vulnerabilities, and automatically replace unsafe code.\n\nAccording to the <a href=\"https:\/\/blog.npmjs.org\/post\/164220074975\/edge-node-architecture-with-npm-enterprise\">npm blog<\/a>:\n<blockquote class=\"blockquote--simple\">Many enterprises have strict requirements that prevent them from using cloud-hosted products for critical parts of their infrastructure. This approach makes sense from a regulatory compliance perspective, but it makes life inconvenient for developers within those companies who wish to take advantage of open-source code from the npm Registry, or who wish to use npm to share and reuse their own code with their colleagues.<\/blockquote>\n<h2><strong>Long Term Support<\/strong><\/h2>\nIn our modern world, things are constantly shifting and new technologies rise and fall, sometimes without even entering long term support (LTS). And it\u2019s difficult to develop and maintain an app written in an outdated language.\n\nAccording to the <a href=\"https:\/\/github.com\/nodejs\/Release\" target=\"_blank\" rel=\"noopener\">2018 Node.js User Survey Report<\/a>, 61% of programmers consider long term support for Node.js an important feature. That knowledge allows developers to assess what the future holds for our application and to plan further development according to the timeline. Programmers can easily plan to adopt new versions based on their regular development cycles.\n\nEvery major release of Node.js will be actively maintained for 18 months from the date it enters LTS, after which it will transition to maintenance mode lasting another 12 months. During this time there will be no new features merged to the version, but all bug fixes or security updates will be taken care of by the team.\n\nIt is a big step forward for complex enterprise applications.\n<div><img style=\"width: 1060px; margin: 0px auto; display: block;\" src=\"https:\/\/lh6.googleusercontent.com\/WpJOmCGIbyoNQaPvgG86lzeCLH4RqWT9QLGNFCpJGweNeXTaJrIEuRIwyM28tCrhBE1w5LWuPJc1hB9Mj236uOR2MSpDlrrpN8D3_zGZWtEyaikBPrEMYLXtG4Nye9g_EGjuKDsp\" alt=\"Node.js development - New releases cycle 2019 \" width=\"1060\" \/><\/div>\n<em>Source: <a href=\"https:\/\/github.com\/nodejs\/Release\">github.com<\/a><\/em>\n<h2><strong>Cross-Platform Development<\/strong><\/h2>\nPlatforms like <a href=\"https:\/\/electronjs.org\/\" target=\"_blank\" rel=\"noopener\">Electron<\/a> or <a href=\"https:\/\/nwjs.io\/\" target=\"_blank\" rel=\"noopener\">NW.js<\/a> let you build cross-platform desktop apps with Node.js. That means you can use some of the code from your Web app in its desktop versions for macOS, Windows and Linux. Moving forward, the same team working on your Web app can deliver a desktop app without having expert knowledge of C#, Objective-C, or any other language required for building native apps.\n\nMoreover, Node developers have access to the same great tooling as front-end developers\u2014such as Google Chrome Developer Tools\u2014enabling them to debug and profile backend and desktop apps as efficiently as client-side apps. The majority of Node developer tools are also cross-platform, which means that developers don\u2019t need a Mac to write, debug and build a macOS app, or a Windows machine for Windows apps.\n\nHighly innovative enterprises already know that Node.js is currently the best way to improve performance, coding efficiency, and overall happiness in their teams.\n\nAlthough Ruby on Rails is our mother tongue, a huge part of our <a href=\"\/about\/our-workflow\" target=\"_blank\" rel=\"noopener\">Web development <\/a>revolves around JavaScript frameworks\u2014<a href=\"\/services\/vue-development\" target=\"_blank\" rel=\"noopener\">Vue.js<\/a>, AngularJS, React for front-, and Node.js for backend. Our developers see this as an opportunity to become full stack experts and have been very impressed with all the possibilities that Node.js brings to the table. And I see no reason why you shouldn\u2019t be, too.\n\nWant more? Check those compelling case studies from enterprises you\u2019ve <em>probably<\/em> heard of:\n<ul>\n \t<li><a href=\"https:\/\/www.youtube.com\/watch?time_continue=303&v=QcNqfvMeWow\">Netflix: The Paved PaaS To NodeJS microservices<\/a><\/li>\n \t<li><a href=\"https:\/\/foundation.nodejs.org\/wp-content\/uploads\/sites\/50\/2017\/09\/Node_CaseStudy_Nasa_FNL.pdf\">NASA: Node.js helps keep astronauts safe and data accessible<\/a><\/li>\n \t<li><a href=\"https:\/\/www.youtube.com\/watch?v=SBR6WcSIqBE&feature=youtu.be\">Intel: Node.js and Intel<\/a><\/li>\n \t<li><a href=\"https:\/\/www.ebayinc.com\/stories\/blogs\/tech\/how-we-built-ebays-first-node-js-application\/\">eBay: How We Built eBay's First Node.js Application<\/a><\/li>\n \t<li><a href=\"https:\/\/medium.com\/the-node-js-collection\/groupons-global-deal-with-node-js-95c54f51ab5b\">Groupon: Groupon\u2019s Global Deal with Node.js<\/a><\/li>\n<\/ul>\n<div id=\"disqus_thread\"><iframe id=\"dsq-app549\" style=\"width: 1px !important; min-width: 100% !important; border: medium none !important; overflow: hidden !important; height: 511px !important;\" tabindex=\"0\" title=\"Disqus\" src=\"https:\/\/disqus.com\/embed\/comments\/?base=default&f=codetunes&t_u=https%3A%2F%2Fwww.monterail.com%2Fblog%2Fnodejs-development-enterprises%3Futm_campaign%3DNode.js%26utm_source%3Dreddit%26utm_medium%3Dsocial&t_d=6%20Main%20Reasons%20Why%20Node.js%20Has%20Become%20a%20Standard%20Technology%20for%20Enterprise-Level%20Organizations&t_t=6%20Main%20Reasons%20Why%20Node.js%20Has%20Become%20a%20Standard%20Technology%20for%20Enterprise-Level%20Organizations&s_o=default#version=c4a1446366afa9519d7d80ce685ad87e\" name=\"dsq-app549\" width=\"100%\" frameborder=\"0\" scrolling=\"no\"><\/iframe><iframe id=\"indicator-north\" style=\"width: 667px !important; border: medium none !important; overflow: hidden !important; top: 0px !important; min-width: 667px !important; max-width: 667px !important; position: fixed !important; z-index: 2147483646 !important; height: 18px !important; min-height: 18px !important; max-height: 18px !important; display: none !important;\" tabindex=\"0\" title=\"Disqus\" name=\"indicator-north\" frameborder=\"0\" scrolling=\"no\"><\/iframe><iframe id=\"indicator-south\" style=\"width: 667px !important; border: medium none !important; overflow: hidden !important; bottom: 0px !important; min-width: 667px !important; max-width: 667px !important; position: fixed !important; z-index: 2147483646 !important; height: 18px !important; min-height: 18px !important; max-height: 18px !important; display: none !important;\" tabindex=\"0\" title=\"Disqus\" name=\"indicator-south\" frameborder=\"0\" scrolling=\"no\"><\/iframe><\/div>\n<noscript>Please enable JavaScript to view the<a href=\"https:\/\/disqus.com\/?ref_noscript\">comments powered by Disqus.<\/a><\/noscript>","post_title":"6 Main Reasons Why Node.js Has Become a Standard Technology for Enterprise-Level Organizations By Karolina Gawron","post_excerpt":"Discover why Node.js has become the standard choice for enterprise organizations. Explore performance benefits, scalability advantages, and real-world enterprise use cases.","post_status":"publish","comment_status":"open","ping_status":"open","post_password":"","post_name":"6-main-reasons-why-node-js-has-become-a-standard-technology-for-enterprise-level-organizations-by-karolina-gawron","to_ping":"","pinged":"http:\/\/blog.caustik.com\/2012\/08\/19\/node-js-w1m-concurrent-connections\/\nhttps:\/\/blog.jayway.com\/2015\/04\/13\/600k-concurrent-websocket-connections-on-aws-using-node-js\/","post_modified":"2022-04-28 05:17:07","post_modified_gmt":"2022-04-28 04:17:07","post_content_filtered":"","post_parent":0,"guid":"https:\/\/narodev.com\/?p=270","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":274,"post_author":"1","post_date":"2018-10-16 08:04:28","post_date_gmt":"2018-10-16 08:04:28","post_content":"<img class=\"article__featured-image article__featured-image--block breakout aligncenter\" src=\"https:\/\/techcrunch.com\/wp-content\/uploads\/2017\/05\/gettyimages-603214826.jpg?w=730&crop=1\" sizes=\"(max-width: 730px) 100vw, (max-width: 1600px) 75vw, 1390px\" srcset=\"https:\/\/techcrunch.com\/wp-content\/uploads\/2017\/05\/gettyimages-603214826.jpg?w=400&crop=1 400w, https:\/\/techcrunch.com\/wp-content\/uploads\/2017\/05\/gettyimages-603214826.jpg?w=730&crop=1 730w, https:\/\/techcrunch.com\/wp-content\/uploads\/2017\/05\/gettyimages-603214826.jpg?w=990&crop=1 990w, https:\/\/techcrunch.com\/wp-content\/uploads\/2017\/05\/gettyimages-603214826.jpg?w=1390&crop=1 1390w\" alt=\"TechCrunch Disrupt SF 2016 &#8211; Day 1\" width=\"817\" height=\"571\" \/>\r\n<p id=\"speakable-summary\"><a href=\"https:\/\/www.twilio.com\/\">Twilio<\/a>, the ubiquitous communications platform, today announced its plan to acquire the API-centric email platform <a href=\"https:\/\/sendgrid.com\/\">SendGrid<\/a> for about $2 billion in an all-stock transaction. That\u2019s Twilio\u2019s largest acquisition to date, but also one that makes a lot of sense given that both companies aim to make building communications platforms easier for developers.<\/p>\r\n\u201cThe two companies share the same vision, the same model, and the same values,\u201d said <a class=\"crunchbase-link\" href=\"https:\/\/crunchbase.com\/organization\/twilio\" target=\"_blank\" rel=\"noopener\" data-type=\"organization\" data-entity=\"twilio\">Twilio <\/a> co-founder and CEO <a class=\"crunchbase-link\" href=\"https:\/\/crunchbase.com\/person\/jeff-lawson\" target=\"_blank\" rel=\"noopener\" data-type=\"person\" data-entity=\"jeff-lawson\">Jeff Lawson <\/a> in today\u2019s announcement. \u201cWe believe this is a once-in-a-lifetime opportunity to bring together the two leading developer-focused communications platforms to create the unquestioned platform of choice for all companies looking to transform their customer engagement.\u201d\r\n\r\n<a class=\"crunchbase-link\" href=\"https:\/\/crunchbase.com\/organization\/sendgrid\" target=\"_blank\" rel=\"noopener\" data-type=\"organization\" data-entity=\"sendgrid\">SendGrid <\/a> will become a wholly owned subsidiary of Twilio and its common stock will be converted into Twilio stock. The companies expect the acquisition to close in the first half of 2019, after it has been cleared by the authorities.\r\n\r\nTwilio\u2019s current focus is on omnichannel communication, and email is obviously a major part of that. And while it offers <a href=\"https:\/\/www.twilio.com\/products\">plenty of services<\/a> around voice, video and chat, email hasn\u2019t been on its radar in the same way. This acquisition now allows it to quickly build up expertise in this area and expand its services there.\r\n\r\nSendGrid went public in 2017. At the time, it priced its stock at $16. Today, before the announcement, the company was trading at just under $31, though that price obviously spiked after the announcement went public. That\u2019s still down from a high of more than $36.5 last month, but that\u2019s in line with the overall movement of the market in recent weeks.\r\n\r\nToday\u2019s announcement comes shortly before Twilio\u2019s annual developer conference, so I expect we\u2019ll hear a lot more about its plans for SendGrid later this week.\r\n\r\nWe asked Twilio for more details about its plans for SendGrid after the acquisition closes. We\u2019ll update this post once we hear more.","post_title":"Twilio acquires email API platform SendGrid for $2 billion in stock","post_excerpt":"Industry news: Twilio acquires SendGrid for billion. Analyze the impact of this major acquisition on email marketing services and API development.","post_status":"publish","comment_status":"open","ping_status":"open","post_password":"","post_name":"twilio-acquires-email-api-platform-sendgrid-for-2-billion-in-stock","to_ping":"","pinged":"","post_modified":"2018-10-16 08:11:16","post_modified_gmt":"2018-10-16 08:11:16","post_content_filtered":"","post_parent":0,"guid":"https:\/\/narodev.com\/?p=274","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":275,"post_author":"1","post_date":"2018-10-16 08:08:00","post_date_gmt":"2018-10-16 08:08:00","post_content":"<div class=\"shortcode video large\">\r\n\r\n<span class=\"img \"><img class=\"aligncenter\" src=\"https:\/\/zdnet4.cbsistatic.com\/hub\/i\/r\/2018\/10\/12\/0564e13f-8cae-4488-a1c3-6920648d07b8\/thumbnail\/570x322\/5c402d96ceebe2634b45ca3c8748226a\/5bc0639560b2dc1013724c9c-1280x7201oct122018113010poster.jpg\" alt=\"\" width=\"570\" height=\"322\" \/><\/span>\r\n\r\n<\/div>\r\nAccording to statistics from <a href=\"https:\/\/w3techs.com\/technologies\/details\/pl-php\/5\/all\" target=\"_blank\" rel=\"noopener noreferrer\">W3Techs<\/a>, roughly 78.9 percent of all Internet sites today run on PHP.\r\n\r\nBut on December 31, 2018, security support for PHP 5.6.x will officially cease, marking the end of all support for any version of the ancient PHP 5.x branch.\r\n\r\nThis means that starting with next year, around 62 percent of all Internet sites still running a PHP 5.x version will stop receiving security updates for their server and website's underlying technology, exposing hundreds of millions of websites, if not more, to serious security risks.\r\n\r\nIf a hacker finds a vulnerability in PHP after the New Year, lots of sites and users would be at risk.\r\n\r\n\"This is a huge problem for the PHP ecosystem,\" Scott Arciszewski, Chief Development Officer at <a href=\"https:\/\/paragonie.com\" target=\"_blank\" rel=\"noopener noreferrer\">Paragon Initiative Enterprise<\/a>, told ZDNet in an interview. \"While many feel that they can 'get away with' running PHP 5 in 2019, the simplest way to describe this choice is: Negligent.\"\r\n<div id=\"inpage-video-top-5bc5871fbd71e\" class=\"ad-inpage-video-top\" style=\"display: none;\" data-ad=\"inpage-video-top\">\r\n\r\n<script>\r\n window.console && console.log && console.log(\"ADS: queuing inpage-video-top-5bc5871fbd71e for display\");\r\n var cbsiGptDivIds = cbsiGptDivIds || [];\r\n cbsiGptDivIds.push(\"inpage-video-top-5bc5871fbd71e\");\r\n <\/script>\r\n<div id=\"google_ads_iframe_\/8264\/aw-zdnet\/security_8__container__\" style=\"border: 0pt none;\"><iframe id=\"google_ads_iframe_\/8264\/aw-zdnet\/security_8\" style=\"border: 0px none; vertical-align: bottom;\" title=\"3rd party ad content\" name=\"google_ads_iframe_\/8264\/aw-zdnet\/security_8\" width=\"641\" height=\"321\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/div>\r\n<\/div>\r\n\"To be totally fair: It's likely that any major, mass-exploitable flaw in PHP 5.6 would also affect the newer versions of PHP,\" Arciszewski added.\r\n\r\n\"PHP 7.2 will get a patch from the PHP team, for free, in a timely manner; PHP 5.6 will only get one if you're paying for ongoing support from your OS vendor.\r\n\r\n<section class=\"sharethrough-top\" data-component=\"medusaContentRecommendation\" data-medusa-content-recommendation-options=\"{"promo":"promo_ZD_recommendation_sharethrough_top_in_article_desktop","spot":"dfp-in-article"}\">\r\n<div id=\"sharethrough-top-5bc5871fbd71e\" class=\"ad-sharethrough-top\" data-ad=\"sharethrough-top\">\r\n\r\n<script>\r\n window.console && console.log && console.log(\"ADS: queuing sharethrough-top-5bc5871fbd71e for display\");\r\n var cbsiGptDivIds = cbsiGptDivIds || [];\r\n cbsiGptDivIds.push(\"sharethrough-top-5bc5871fbd71e\");\r\n <\/script>\r\n<div id=\"google_ads_iframe_\/8264\/aw-zdnet\/security_5__container__\" style=\"border: 0pt none;\"><iframe id=\"google_ads_iframe_\/8264\/aw-zdnet\/security_5\" style=\"border: 0px none; vertical-align: bottom;\" title=\"3rd party ad content\" name=\"google_ads_iframe_\/8264\/aw-zdnet\/security_5\" width=\"11\" height=\"11\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/div>\r\n<\/div>\r\n<\/section>\"If anyone finds themselves running PHP 5 after the end of the year, ask yourself: Do you feel lucky? Because I sure wouldn't.\"\r\n<figure class=\"image image-original shortcode-image\"><span class=\"img aspect-set \" style=\"padding-bottom: 47%;\"><img class=\"\" src=\"https:\/\/zdnet4.cbsistatic.com\/hub\/i\/2018\/10\/14\/7b07994d-008a-4f9b-82f4-01af045f1646\/7f62145966cfb80731a8e9676cd59c13\/php-eols.png\" alt=\"php-eols.png\" \/><\/span><\/figure>\r\nThe PHP community has known of this deadline for quite a while. After PHP 5.6 became the <a href=\"https:\/\/wptavern.com\/php-5-6-is-now-the-most-widely-used-php-version\" target=\"_blank\" rel=\"noopener noreferrer\">most widely used PHP version<\/a> back in the spring of 2017, PHP maintainers realized it would be a disaster if they stopped security updates right when PHP 5.6 became the most popular PHP version --so they extended the <a href=\"http:\/\/php.net\/supported-versions.php\" target=\"_blank\" rel=\"noopener noreferrer\">EOL date to the end of 2018<\/a>.\r\n\r\nSince then, there have been several developers and security researchers who warned about the \"<a href=\"https:\/\/www.linkedin.com\/pulse\/ticking-php-time-bomb-martin-wheatley\/\" target=\"_blank\" rel=\"noopener noreferrer\">ticking PHP time bomb<\/a>,\" although not as many as infosec community would have wished.\r\n\r\nThere has not been a concerted effort to get people to move to the newer PHP 7.x, but some website content management systems (CMS) projects, one by one, have started modifying minimum requirements, and warning users to use more modern hosting environments.\r\n\r\nOf the big three --WordPress, Joomla, and Drupal-- only Drupal has <a href=\"https:\/\/groups.drupal.org\/node\/518200\" target=\"_blank\" rel=\"noopener noreferrer\">made the official step<\/a> to adjust its minimum requirements to PHP 7, but that move will come in March 2019. Ironically, the 7.0.x branch has reached EOL on December 3, 2017, which doesn't actually solve anything, but it's still a step forward.\r\n\r\n<a href=\"https:\/\/docs.joomla.org\/Technical_requirements\" target=\"_blank\" rel=\"noopener noreferrer\">Joomla's minimum requirement<\/a> remains PHP 5.3, while <a href=\"https:\/\/wordpress.org\/about\/requirements\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress' minimum requirement <\/a>remains PHP 5.2.\r\n\r\n\"The biggest source of inertia in the PHP ecosystem regarding versions is undoubtedly WordPress, which still refuses to drop support for PHP 5.2 because there are more than zero systems in the universe that still run WordPress on an ancient, unsupported version of PHP,\" Arciszewski said, describing the WordPress team's infamous strongheadedness of keeping its minimum requirement at a PHP version that went EOL in 2011.\r\n\r\nWordPress --which is used for more than a quarter of all sites on the Internet-- would, without a doubt, shift a lot of people's views on the necessity of using modern PHP versions if the project would move its minimum PHP requirement to the newer PHP 7.x branch.\r\n\r\n\"What PHP versions should be supported [by WordPress], however, has been a major debate for some time,\" said Sean Murphy, Director of Threat Intelligence at <a href=\"https:\/\/www.defiant.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Defiant<\/a>, the company behind the WordFence security plugin for WordPress, in an email exchange with ZDNet.\r\n\r\n\"There is an ongoing initiative by the WordPress team to notify users when they are using a legacy version of PHP and give them the information and tools they need to request a newer version from their hosting provider,\" he added. \"Here are <a href=\"https:\/\/make.wordpress.org\/core\/2018\/07\/02\/php-meeting-recap-june-25th\/\" target=\"_blank\" rel=\"noopener noreferrer\">notes<\/a> from this team's recent meeting.\"\r\n\r\nMurphy believes that one of the biggest challenges of rolling out PHP version upgrades to a large number of sites is the flood of support requests that come as a result, a reason why many CMS projects and web hosting providers are reticent and unwilling to do so.\r\n\r\nBut Murphy also points out that \"good hosting providers\" will always deploy new users on new versions of PHP by default, instead of letting customers choose, and will update existing clients to new versions of PHP only when requested.\r\n\r\nBut unless customers are aware that their version of PHP has reached end-of-life, very few will ask to be moved to a newer version.\r\n<div class=\"relatedContent alignRight\"><\/div>","post_title":"Around 62 percent of all Internet sites will run an unsupported PHP version in 10 weeks.","post_excerpt":"Critical security alert: 62% of websites will run unsupported PHP versions. Learn about PHP lifecycle, security risks, and upgrade strategies for safer web applications.","post_status":"publish","comment_status":"open","ping_status":"open","post_password":"","post_name":"around-62-percent-of-all-internet-sites-will-run-an-unsupported-php-version-in-10-weeks","to_ping":"","pinged":"","post_modified":"2018-10-16 08:11:25","post_modified_gmt":"2018-10-16 08:11:25","post_content_filtered":"","post_parent":0,"guid":"https:\/\/narodev.com\/?p=275","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":282,"post_author":"1","post_date":"2018-10-16 08:17:10","post_date_gmt":"2018-10-16 08:17:10","post_content":"<iframe src=\"https:\/\/www.youtube.com\/embed\/KM9coMpy5sQ?rel=0&showinfo=0\" width=\"700px\" height=\"400px\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><span style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" data-mce-type=\"bookmark\" class=\"mce_SELRES_start\">\ufeff<\/span><span style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" data-mce-type=\"bookmark\" class=\"mce_SELRES_start\">\ufeff<\/span><span style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" data-mce-type=\"bookmark\" class=\"mce_SELRES_start\">\ufeff<\/span><span style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" data-mce-type=\"bookmark\" class=\"mce_SELRES_start\">\ufeff<\/span><span style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" data-mce-type=\"bookmark\" class=\"mce_SELRES_start\">\ufeff<\/span><span style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" data-mce-type=\"bookmark\" class=\"mce_SELRES_start\">\ufeff<\/span><span style=\"display: inline-block; width: 0px; overflow: hidden; line-height: 0;\" data-mce-type=\"bookmark\" class=\"mce_SELRES_start\">\ufeff<\/span><\/iframe>","post_title":"How the Javascript engine works | The basics [VIDEO]","post_excerpt":"Complete guide to JavaScript engine internals and performance optimization. Understand V8 engine mechanics, compilation process, and execution optimization.","post_status":"publish","comment_status":"open","ping_status":"open","post_password":"","post_name":"how-the-javascript-engine-works-the-basics-video","to_ping":"","pinged":"","post_modified":"2018-10-16 08:17:10","post_modified_gmt":"2018-10-16 08:17:10","post_content_filtered":"","post_parent":0,"guid":"https:\/\/narodev.com\/?p=282","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":294,"post_author":"1","post_date":"2018-10-31 09:44:46","post_date_gmt":"2018-10-31 09:44:46","post_content":"<div class=\"col-main-wrapper\">\r\n<div class=\"col-main\">\r\n<div id=\"main\" class=\"section\">\r\n<div id=\"Blog1\" class=\"widget Blog\" data-version=\"1\">\r\n<div class=\"post\" data-id=\"3154400653599979123\">\r\n<div class=\"post-body\">\r\n<div class=\"post-content post-original\">\r\n<div dir=\"ltr\">\r\n\r\nToday,Google annouced via their blog for webmaster : we\u2019re excited to introduce reCAPTCHA v3, our newest API that helps you detect abusive traffic on your website without user interaction. Instead of showing a CAPTCHA challenge, <a href=\"https:\/\/developers.google.com\/recaptcha\/docs\/v3\">reCAPTCHA v3<\/a> returns a score so you can choose the most appropriate action for your website.\r\n<h2>A Frictionless User Experience<\/h2>\r\nOver the last decade, reCAPTCHA has continuously evolved its technology. In reCAPTCHA v1, every user was asked to pass a challenge by reading distorted text and typing into a box. To improve both user experience and security, we introduced reCAPTCHA v2 and began to use many other signals to determine whether a request came from a human or bot. This enabled reCAPTCHA challenges to move from a dominant to a secondary role in detecting abuse, letting about half of users pass with a single click. Now with reCAPTCHA v3, we are fundamentally changing how sites can test for human vs. bot activities by returning a score to tell you how suspicious an interaction is and eliminating the need to interrupt users with challenges at all. reCAPTCHA v3 runs adaptive risk analysis in the background to alert you of suspicious traffic while letting your human users enjoy a frictionless experience on your site.\r\n<h2>More Accurate Bot Detection with \"Actions\"<\/h2>\r\nIn reCAPTCHA v3, we are introducing a new concept called \u201cAction\u201d\u2014a tag that you can use to define the key steps of your user journey and enable reCAPTCHA to run its risk analysis in context. Since reCAPTCHA v3 doesn't interrupt users, we recommend adding reCAPTCHA v3 to multiple pages. In this way, the reCAPTCHA adaptive risk analysis engine can identify the pattern of attackers more accurately by looking at the activities across different pages on your website. In the reCAPTCHA admin console, you can get a full overview of reCAPTCHA score distribution and a breakdown for the stats of the top 10 actions on your site, to help you identify which exact pages are being targeted by bots and how suspicious the traffic was on those pages.\r\n<div class=\"separator\"><\/div>\r\n<div class=\"separator\"><a href=\"https:\/\/4.bp.blogspot.com\/-AVHsY8c33eU\/W9dbFDxPmdI\/AAAAAAAADBk\/0CvR2XZGuywnpuc6E653CndAsIKukezswCEwYBhgL\/s1600\/reCAPTCHA-admin-console-1.png\" target=\"_blank\" rel=\"noopener\"><img class=\"aligncenter\" src=\"https:\/\/4.bp.blogspot.com\/-AVHsY8c33eU\/W9dbFDxPmdI\/AAAAAAAADBk\/0CvR2XZGuywnpuc6E653CndAsIKukezswCEwYBhgL\/s640\/reCAPTCHA-admin-console-1.png\" width=\"640\" height=\"371\" border=\"0\" data-original-height=\"578\" data-original-width=\"991\" \/><\/a><\/div>\r\n<div class=\"separator\"><a href=\"https:\/\/4.bp.blogspot.com\/-rMQrRRvUGE8\/W9dbFK6d5qI\/AAAAAAAADBo\/jKUm3hjFRl8lPstdux0DI24WW_35TbjCACEwYBhgL\/s1600\/reCAPTCHA-admin-console-2.png\" target=\"_blank\" rel=\"noopener\"><img class=\"aligncenter\" src=\"https:\/\/4.bp.blogspot.com\/-rMQrRRvUGE8\/W9dbFK6d5qI\/AAAAAAAADBo\/jKUm3hjFRl8lPstdux0DI24WW_35TbjCACEwYBhgL\/s640\/reCAPTCHA-admin-console-2.png\" width=\"640\" height=\"379\" border=\"0\" data-original-height=\"954\" data-original-width=\"1600\" \/><\/a><\/div>\r\n<h2>Fighting Bots Your Way<\/h2>\r\nAnother big benefit that you\u2019ll get from reCAPTCHA v3 is the flexibility to prevent spam and abuse in the way that best fits your website. Previously, the reCAPTCHA system mostly decided when and what CAPTCHAs to serve to users, leaving you with limited influence over your website\u2019s user experience. Now, reCAPTCHA v3 will provide you with a score that tells you how suspicious an interaction is. There are three potential ways you can use the score. First, you can set a threshold that determines when a user is let through or when further verification needs to be done, for example, using two-factor authentication and phone verification. Second, you can combine the score with your own signals that reCAPTCHA can\u2019t access\u2014such as user profiles or transaction histories. Third, you can use the reCAPTCHA score as one of the signals to train your machine learning model to fight abuse. By providing you with these new ways to customize the actions that occur for different types of traffic, this new version lets you protect your site against bots and improve your user experience based on your website\u2019s specific needs. In short, reCAPTCHA v3 helps to protect your sites without user friction and gives you more power to decide what to do in risky situations. As always, we are working every day to stay ahead of attackers and keep the Internet easy and safe to use (except for bots). Ready to get started with reCAPTCHA v3? Visit our <a href=\"https:\/\/developers.google.com\/recaptcha\/docs\/v3\">developer site<\/a> for more details. <span class=\"byline-author\">Posted by Wei Liu, Google Product Manager.<\/span>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>","post_title":"Introducing reCAPTCHA v3: the new way to stop bots","post_excerpt":"Introduction to reCAPTCHA v3 - Google's new invisible bot protection system. Learn implementation, scoring system, and advanced security features for websites.","post_status":"publish","comment_status":"open","ping_status":"open","post_password":"","post_name":"introducing-recaptcha-v3-the-new-way-to-stop-bots","to_ping":"","pinged":"","post_modified":"2018-11-12 10:11:43","post_modified_gmt":"2018-11-12 10:11:43","post_content_filtered":"","post_parent":0,"guid":"https:\/\/narodev.com\/?p=294","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":298,"post_author":"1","post_date":"2018-11-06 00:16:09","post_date_gmt":"2018-11-06 00:16:09","post_content":"<iframe src=\"https:\/\/www.youtube.com\/embed\/fuZ6ypueK8M\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe>","post_title":"Steve Jobs explains - Why companies fail?","post_excerpt":"Steve Jobs explains the key reasons why companies fail. Insights from Apple co-founder on business strategy, innovation, and organizational challenges.","post_status":"publish","comment_status":"open","ping_status":"open","post_password":"","post_name":"steve-jobs-explains-why-companies-fail","to_ping":"","pinged":"","post_modified":"2018-11-06 00:16:09","post_modified_gmt":"2018-11-06 00:16:09","post_content_filtered":"","post_parent":0,"guid":"https:\/\/narodev.com\/?p=298","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":301,"post_author":"1","post_date":"2018-11-12 10:08:49","post_date_gmt":"2018-11-12 10:08:49","post_content":"<div class=\"aspectRatioPlaceholder-fill\"><\/div>\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*96sC1sItm7_2aX-w1LDxyQ.jpeg\" data-width=\"1200\" data-height=\"720\" data-action=\"zoom\" data-action-value=\"1*96sC1sItm7_2aX-w1LDxyQ.jpeg\" data-scroll=\"native\"><\/div>\n<figure id=\"18b2\" class=\"graf graf--figure graf-after--h3\">\n<div class=\"aspectRatioPlaceholder is-locked\">\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*96sC1sItm7_2aX-w1LDxyQ.jpeg\" data-width=\"1200\" data-height=\"720\" data-action=\"zoom\" data-action-value=\"1*96sC1sItm7_2aX-w1LDxyQ.jpeg\" data-scroll=\"native\"><img class=\"progressiveMedia-image js-progressiveMedia-image\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*96sC1sItm7_2aX-w1LDxyQ.jpeg\" data-src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*96sC1sItm7_2aX-w1LDxyQ.jpeg\" \/><\/div>\n<\/div><\/figure>\n<p id=\"4e9a\" class=\"graf graf--p graf-after--figure\">The world around us is rapidly shifting towards a truly digital economy. And, Blockchain technology is a great thing nowadays gaining the attention of the maximum people around the world, there are some other technologies that can hep you reaching more people like for example TikTok check here how <a href=\"https:\/\/futurebusinessboost.com\/how-can-we-get-free-tiktok-likes\/\">get TikTok likes<\/a>.<\/p>\n<p id=\"151a\" class=\"graf graf--p graf-after--p\">In fact, it is the next big technological disruption after the Internet. Due to this fact, Blockchain development is going to have a major impact on both economic and digital spheres.<\/p>\n<p id=\"5566\" class=\"graf graf--p graf-after--p\">Blockchain development is already affecting many industries, and it is likely that social media networks will first feel the ramifications of the disruption of block chains. Almost all the <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/medium.com\/swlh\/20-web-development-companies-to-hire-best-website-developers-b778545efa3c\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/medium.com\/swlh\/20-web-development-companies-to-hire-best-website-developers-b778545efa3c\"><strong class=\"markup--strong markup--p-strong\">companies<\/strong><\/a>(startups as well as existing) used to build their brands on platforms such as Twitter and Facebook are about to realize that all that investment of time may have been in vain.<\/p>\n<p id=\"82e5\" class=\"graf graf--p graf-after--p\">Digital marketing will no longer be confined to services like <a href=\"https:\/\/serpninja.io\/cannabis-cbd-seo\/\">SERPninja.io<\/a>. As blockchain development technology changes the platforms that consumers and businesses use and how they connect, social media marketing will go through a seizure-like never before.<\/p>\n<p id=\"534a\" class=\"graf graf--p graf-after--p\">Digital marketing is not just <a href=\"https:\/\/freshlinks.io\/outreach-packs\/\">Freshlinks offering outreach links<\/a> anymore. In this blog, we will discuss the following five major blockchain development trends that you should follow closely if you want to prepare for the future of social media marketing enabled with blockchain development.<\/p>\n<p id=\"5973\" class=\"graf graf--p graf-after--p\"><strong class=\"markup--strong markup--p-strong\">1) More earning<\/strong><\/p>\n<p id=\"3dbb\" class=\"graf graf--p graf-after--p\">The combination of social networks and cryptocurrencies enabled with blockchain development is another tempting example of the future of social platforms. When decentralized platforms become common, users of social networks will have the option of choosing the platforms on which to establish a network.<\/p>\n<p id=\"739e\" class=\"graf graf--p graf-after--p\">The ability to earn small amounts of cryptocurrencies for their activities will attract users to platforms where contributions to platform growth are rewarded. Think about how much time you spend currently on social networking sites like Twitter and Facebook and imagine if each publication you won earned you a small amount of Bitcoin. A future of social networks enabled for encryption is really intriguing.<\/p>\n<p id=\"eea1\" class=\"graf graf--p graf-after--p\"><strong class=\"markup--strong markup--p-strong\">2) No more spams<\/strong><\/p>\n\n<figure id=\"23be\" class=\"graf graf--figure graf-after--p\">\n<div class=\"aspectRatioPlaceholder is-locked\">\n<div class=\"aspectRatioPlaceholder-fill\"><\/div>\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*W_-hkXCNcJWQxQ1gQ4eecA.png\" data-width=\"1584\" data-height=\"908\" data-action=\"zoom\" data-action-value=\"1*W_-hkXCNcJWQxQ1gQ4eecA.png\" data-scroll=\"native\"><\/div>\n<\/div><\/figure>\n<figure id=\"23be\" class=\"graf graf--figure graf-after--p\">\n<div class=\"aspectRatioPlaceholder is-locked\">\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*W_-hkXCNcJWQxQ1gQ4eecA.png\" data-width=\"1584\" data-height=\"908\" data-action=\"zoom\" data-action-value=\"1*W_-hkXCNcJWQxQ1gQ4eecA.png\" data-scroll=\"native\"><img class=\"progressiveMedia-image js-progressiveMedia-image\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*W_-hkXCNcJWQxQ1gQ4eecA.png\" data-src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*W_-hkXCNcJWQxQ1gQ4eecA.png\" \/><\/div>\n<\/div><\/figure>\n<p id=\"3168\" class=\"graf graf--p graf-after--figure\">Smart contracts and blockchain development technology will also influence the dissemination of false content. The current social media networks are flooded with everything from false news to spam bots. In the social media networks of the future, the distribution of content will be based on verified information and the propagation of traceable data. The ability to block content and its collaborators is a tempting option for brand creators.<\/p>\n<p id=\"8bc8\" class=\"graf graf--p graf-after--p\"><strong class=\"markup--strong markup--p-strong\">3) No fraudulent impressions<\/strong><\/p>\n<p id=\"5d09\" class=\"graf graf--p graf-after--p\">There will be a growing interest in identities verified online. With massive bot issues on social media platforms such as Facebook and Twitter, business owners are increasingly looking for reaching reliable platforms for their customers where they can increase their marketing ROI.<\/p>\n<p id=\"b20a\" class=\"graf graf--p graf-after--p\">The ability to connect with consumers whose identities have been verified through blockchain development technology and smart contracts is attractive for business owners who do not want to continue marketing in the black hole of social networks and fraudulent impressions of PPC(pay per click) ads.<\/p>\n<p id=\"f373\" class=\"graf graf--p graf-after--p\"><strong class=\"markup--strong markup--p-strong\">4) More funds<\/strong><\/p>\n<p id=\"49fb\" class=\"graf graf--p graf-after--p\">Both, the blockchain development technology and cryptocurrency collectibles are also influencing the future of social networks. There is a lot of interest in the cryptocobrable sector, and some of the first engines, such as CryptoKitties which has raised millions of dollars in investment funds.<\/p>\n<p id=\"c998\" class=\"graf graf--p graf-after--p\">While some may initially consider cryptocobooks as nothing more than mobile games, the truth is that some of these crypto-bank companies are planning to eventually take their games to platforms such as Android or iOS. When whole submarkets are built on top of a cryptocoiler game (virtual goods, crypto-commerce, etc.), the appeal of these innovations becomes clear.<\/p>\n<p id=\"c230\" class=\"graf graf--p graf-after--p\"><strong class=\"markup--strong markup--p-strong\">5) Less marketing efforts\/High ROI<\/strong><\/p>\n\n<figure id=\"f85e\" class=\"graf graf--figure graf-after--p\">\n<div class=\"aspectRatioPlaceholder is-locked\">\n<div class=\"aspectRatioPlaceholder-fill\"><\/div>\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*Qq73eRGqA6xpIRcFJSEqPw.jpeg\" data-width=\"1856\" data-height=\"1272\" data-action=\"zoom\" data-action-value=\"1*Qq73eRGqA6xpIRcFJSEqPw.jpeg\" data-scroll=\"native\"><\/div>\n<\/div><\/figure>\n<div class=\"postArticle-content js-postField js-notesSource js-trackedPost\" data-post-id=\"b45d1c1eacd4\" data-source=\"post_page\" data-collection-id=\"3a8144eabfe3\" data-tracking-context=\"postPage\" data-scroll=\"native\">\n<section class=\"section section--body section--first section--last\">\n<div class=\"section-content\">\n<div class=\"section-inner sectionLayout--insetColumn\">\n<figure id=\"f85e\" class=\"graf graf--figure graf-after--p\">\n<div class=\"aspectRatioPlaceholder is-locked\">\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*Qq73eRGqA6xpIRcFJSEqPw.jpeg\" data-width=\"1856\" data-height=\"1272\" data-action=\"zoom\" data-action-value=\"1*Qq73eRGqA6xpIRcFJSEqPw.jpeg\" data-scroll=\"native\"><img class=\"progressiveMedia-image js-progressiveMedia-image\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*Qq73eRGqA6xpIRcFJSEqPw.jpeg\" data-src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*Qq73eRGqA6xpIRcFJSEqPw.jpeg\" \/><\/div>\n<\/div><\/figure>\n<p id=\"0388\" class=\"graf graf--p graf-after--figure\">In the same way that verified identities will influence the future of blockchain-enabled social networks, so will the verified markets of like-minded individuals and companies. Markets are already growing to meet specific needs and this will continue as blockchain development technology becomes the mainstream and business owners realize their potential.<\/p>\n<p id=\"aff7\" class=\"graf graf--p graf-after--p\">The ability to market to a verified group of people and companies that you know are already interested in what you are selling can reduce your marketing efforts while increasing your return on investment time.<\/p>\n<p id=\"d851\" class=\"graf graf--p graf-after--p\"><strong class=\"markup--strong markup--p-strong\">Conclusion:<\/strong><\/p>\n<p id=\"1078\" class=\"graf graf--p graf-after--p\">Blockchain-enabled social media marketing will have a dramatic influence on currently popular platforms like Facebook, Pinterest, Snapchat, Instagram, and Twitter. A large number of social media marketers should already be exploring the blockchain landscape to become early adopters of new social networking opportunities.<\/p>\n<p id=\"0194\" class=\"graf graf--p graf-after--p\">In fact, the sooner you understand the potential of blockchain-enabled social media marketing, the sooner you can adapt your current business strategies to accommodate this new reality.<\/p>\n<p id=\"d341\" class=\"graf graf--p graf-after--p graf--trailing\">Hence, it is quite clear that Blockchain development has brought revolutionary effects on social media marketing. If you are interested in Blockchain development and want to develop amazing apps like <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/www.valuecoders.com\/hire-developers\/hire-ethereum-developer?utm_source=blockchain_development_medium&utm_medium=mantra\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/www.valuecoders.com\/hire-developers\/hire-ethereum-developer?utm_source=blockchain_development_medium&utm_medium=mantra\">Ethereum wallet app<\/a>, ICOs, Crowdsale, supply chain apps, then<a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/www.valuecoders.com\/?utm_source=blockchain_development_medium&utm_medium=mantra\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/www.valuecoders.com\/?utm_source=blockchain_development_medium&utm_medium=mantra\"><strong class=\"markup--strong markup--p-strong\"> ValueCoders<\/strong><\/a>, a leading <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/www.valuecoders.com\/hire-developers\/hire-blockchain-developers?utm_source=blockchain_development_medium&utm_medium=mantra\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/www.valuecoders.com\/hire-developers\/hire-blockchain-developers?utm_source=blockchain_development_medium&utm_medium=mantra\"><strong class=\"markup--strong markup--p-strong\">Blockchain development Company<\/strong><\/a> can help you for this. <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/www.valuecoders.com\/hire-developers?utm_source=blockchain_development_medium&utm_medium=mantra\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/www.valuecoders.com\/hire-developers?utm_source=blockchain_development_medium&utm_medium=mantra\"><strong class=\"markup--strong markup--p-strong\">Hire developers <\/strong><\/a>from us and get secure, safe and advanced <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/www.valuecoders.com\/mobile-application-development?utm_source=magento_development_medium&utm_medium=mobile_mantra\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/www.valuecoders.com\/mobile-application-development?utm_source=magento_development_medium&utm_medium=mobile_mantra\"><strong class=\"markup--strong markup--p-strong\">mobile app development services <\/strong><\/a>at affordable prices.<\/p>\n\n<\/div>\n<\/div>\n<\/section><\/div>","post_title":"How Blockchain Development Is Changing The Future Of Social Media Marketing?","post_excerpt":"Explore how blockchain technology is revolutionizing social media marketing. Discover new opportunities for transparency, user engagement, and decentralized content distribution.","post_status":"publish","comment_status":"open","ping_status":"open","post_password":"","post_name":"how-blockchain-development-is-changing-the-future-of-social-media-marketing","to_ping":"","pinged":"","post_modified":"2022-04-30 14:08:17","post_modified_gmt":"2022-04-30 13:08:17","post_content_filtered":"","post_parent":0,"guid":"https:\/\/narodev.com\/?p=301","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":305,"post_author":"1","post_date":"2018-11-14 12:15:18","post_date_gmt":"2018-11-14 12:15:18","post_content":"<h2 id=\"93bb\" class=\"graf graf--h4 graf-after--h3 graf--subtitle\">Learn How Asynchronous JavaScript Works<\/h2>\r\n<p id=\"7617\" class=\"graf graf--p graf-after--figure\">JavaScript is a single-threaded programming language which means only one thing can happen at a time. That is, the JavaScript engine can only process one statement at a time in a single thread.<\/p>\r\n<p id=\"12b8\" class=\"graf graf--p graf-after--p\">While the single-threaded languages simplify writing code because you don\u2019t have to worry about the concurrency issues, this also means you can\u2019t perform long operations such as network access without blocking the main thread.<\/p>\r\n<p id=\"92c1\" class=\"graf graf--p graf-after--p\">Imagine requesting some data from an API. Depending upon the situation the server might take some time to process the request while blocking the main thread making the web page unresponsive.<\/p>\r\n<p id=\"e95a\" class=\"graf graf--p graf-after--p\">That\u2019s where asynchronous JavaScript comes into play. Using asynchronous JavaScript (such as callbacks, promises, and async\/await), you can perform long network requests without blocking the main thread.<\/p>\r\n<p id=\"3218\" class=\"graf graf--p graf-after--p\">It\u2019s not necessary that you know how JavaScript works under the hood, but it\u2019s helpful to know how it works\u00a0:)<\/p>\r\n<p id=\"7755\" class=\"graf graf--p graf-after--p\">So without further ado, Let\u2019s get started\u00a0:)<\/p>\r\n<p id=\"9284\" class=\"graf graf--p graf-after--p\"><strong class=\"markup--strong markup--p-strong\">Tip<\/strong>: Using <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/github.com\/teambit\/bit\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/github.com\/teambit\/bit\"><strong class=\"markup--strong markup--p-strong\">Bit<\/strong><\/a> you can turn any JS code into an API you can share, use and sync across projects and apps to build faster and reuse more code. Give it a try.<\/p>\r\n\r\n<div id=\"e007\" class=\"graf graf--mixtapeEmbed graf-after--p graf--trailing\">\r\n<div class=\"section-inner sectionLayout--insetColumn\">\r\n<h3 id=\"4135\" class=\"graf graf--h3 graf--leading\">How Does Synchronous JavaScript Work?<\/h3>\r\n<p id=\"64c5\" class=\"graf graf--p graf-after--h3\">Before we dive into asynchronous JavaScript, let\u2019s first understand how the synchronous JavaScript code executes inside the JavaScript engine. For example:<\/p>\r\n\r\n<pre id=\"f444\" class=\"graf graf--pre graf-after--p\">const second = () => {\r\n console.log('Hello there!');\r\n}<\/pre>\r\n<pre id=\"1dba\" class=\"graf graf--pre graf-after--pre\">const first = () => {\r\n console.log('Hi there!');\r\n second();\r\n console.log('The End');\r\n}<\/pre>\r\n<pre id=\"21b2\" class=\"graf graf--pre graf-after--pre\">first();<\/pre>\r\n<p id=\"b818\" class=\"graf graf--p graf-after--pre\">To understand how the above code executes inside the JavaScript engine, we have to understand the concept of the execution context and the call stack (also known as execution stack).<\/p>\r\n\r\n<h4 id=\"06e0\" class=\"graf graf--h4 graf-after--p\">Execution Context<\/h4>\r\n<p id=\"bd48\" class=\"graf graf--p graf-after--h4\">An Execution Context is an abstract concept of an environment where the JavaScript code is evaluated and executed. Whenever any code is run in JavaScript, it\u2019s run inside an execution context.<\/p>\r\n<p id=\"a6a3\" class=\"graf graf--p graf-after--p\">The function code executes inside the function execution context, and the global code executes inside the global execution context. Each function has its own execution context.<\/p>\r\n\r\n<h4 id=\"1c68\" class=\"graf graf--h4 graf-after--p\">Call Stack<\/h4>\r\n<p id=\"05c2\" class=\"graf graf--p graf-after--h4\">The call stack as its name implies is a stack with a LIFO (Last in, First out) structure, which is used to store all the execution context created during the code execution.<\/p>\r\n<p id=\"100d\" class=\"graf graf--p graf-after--p\">JavaScript has a single call stack because it\u2019s a single-threaded programming language. The call stack has a LIFO structure which means that the items can be added or removed from the top of the stack only.<\/p>\r\n<p id=\"1399\" class=\"graf graf--p graf-after--p\">Let\u2019s get back to the above code snippet and try to understand how the code executes inside the JavaScript engine.<\/p>\r\n\r\n<pre id=\"89c4\" class=\"graf graf--pre graf-after--p\">const second = () => {\r\n console.log('Hello there!');\r\n}<\/pre>\r\n<pre id=\"95f1\" class=\"graf graf--pre graf-after--pre\">const first = () => {\r\n console.log('Hi there!');\r\n second();\r\n console.log('The End');\r\n}<\/pre>\r\n<pre id=\"950d\" class=\"graf graf--pre graf-after--pre\">first();<\/pre>\r\n<\/div>\r\n<div class=\"section-inner sectionLayout--outsetColumn\">\r\n<figure id=\"8b61\" class=\"graf graf--figure graf--layoutOutsetCenter graf-after--pre\" data-scroll=\"native\">\r\n<div class=\"aspectRatioPlaceholder is-locked\">\r\n<div class=\"aspectRatioPlaceholder-fill\"><\/div>\r\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*DkG1a8f7rdl0GxM0ly4P7w.png\" data-width=\"1257\" data-height=\"1617\" data-action=\"zoom\" data-action-value=\"1*DkG1a8f7rdl0GxM0ly4P7w.png\" data-scroll=\"native\"><\/div>\r\n<\/div><\/figure>\r\n<\/div>\r\n<div class=\"section-inner sectionLayout--outsetColumn\">\r\n<figure id=\"8b61\" class=\"graf graf--figure graf--layoutOutsetCenter graf-after--pre\" data-scroll=\"native\">\r\n<div class=\"aspectRatioPlaceholder is-locked\">\r\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*DkG1a8f7rdl0GxM0ly4P7w.png\" data-width=\"1257\" data-height=\"1617\" data-action=\"zoom\" data-action-value=\"1*DkG1a8f7rdl0GxM0ly4P7w.png\" data-scroll=\"native\"><img class=\"progressiveMedia-image js-progressiveMedia-image\" src=\"https:\/\/cdn-images-1.medium.com\/max\/2000\/1*DkG1a8f7rdl0GxM0ly4P7w.png\" data-src=\"https:\/\/cdn-images-1.medium.com\/max\/2000\/1*DkG1a8f7rdl0GxM0ly4P7w.png\" \/><\/div>\r\n<\/div>\r\n<figcaption class=\"imageCaption\">Call Stack for the above\u00a0code<\/figcaption><\/figure>\r\n<\/div>\r\n<div class=\"section-inner sectionLayout--insetColumn\">\r\n<h4 id=\"121a\" class=\"graf graf--h4 graf-after--figure\">So What\u2019s Happening Here?<\/h4>\r\n<p id=\"0d26\" class=\"graf graf--p graf-after--h4\">When this code is executed, a global execution context is created (represented by <code class=\"markup--code markup--p-code\">main()<\/code>) and pushed to the top of the call stack. When a call to <code class=\"markup--code markup--p-code\">first()<\/code> is encountered, it\u2019s pushed to the top of the stack.<\/p>\r\n<p id=\"1360\" class=\"graf graf--p graf-after--p\">Next, <code class=\"markup--code markup--p-code\">console.log('Hi there!')<\/code> is pushed to the top of the stack, when it finishes, it\u2019s popped off from the stack. After it, we call <code class=\"markup--code markup--p-code\">second()<\/code>, so the <code class=\"markup--code markup--p-code\">second()<\/code> function is pushed to the top of the stack.<\/p>\r\n<p id=\"15fb\" class=\"graf graf--p graf-after--p\"><code class=\"markup--code markup--p-code\">console.log('Hello there!')<\/code> is pushed to the top of the stack and popped off the stack when it finishes. The <code class=\"markup--code markup--p-code\">second()<\/code> function finishes, so it\u2019s popped off the stack.<\/p>\r\n<p id=\"5d0a\" class=\"graf graf--p graf-after--p\"><code class=\"markup--code markup--p-code\">console.log(\u2018The End\u2019)<\/code> is pushed to the top of the stack and removed when it finishes. After it, the <code class=\"markup--code markup--p-code\">first()<\/code> function completes, so it\u2019s removed from the stack.<\/p>\r\n<p id=\"0f22\" class=\"graf graf--p graf-after--p\">The program completes its execution at this point, so the global execution context(<code class=\"markup--code markup--p-code\">main()<\/code>) is popped off from the stack.<\/p>\r\n\r\n<h3 id=\"1d6e\" class=\"graf graf--h3 graf-after--p\">How Does Asynchronous JavaScript Work?<\/h3>\r\n<p id=\"9e6e\" class=\"graf graf--p graf-after--h3\">Now that we have a basic idea about the call stack, and how the synchronous JavaScript works, let\u2019s get back to the asynchronous JavaScript.<\/p>\r\n\r\n<h4 id=\"57df\" class=\"graf graf--h4 graf-after--p\">What is Blocking?<\/h4>\r\n<p id=\"edd9\" class=\"graf graf--p graf-after--h4\">Let\u2019s suppose we are doing an image processing or a network request in a synchronous way. For example:<\/p>\r\n\r\n<pre id=\"29d6\" class=\"graf graf--pre graf-after--p\">const processImage = (image) => {\r\n \/**\r\n * doing some operations on image\r\n **\/\r\n console.log('Image processed');\r\n}<\/pre>\r\n<pre id=\"bccf\" class=\"graf graf--pre graf-after--pre\">const networkRequest = (url) => {\r\n \/**\r\n * requesting network resource\r\n **\/\r\n return someData;\r\n}<\/pre>\r\n<pre id=\"7cb7\" class=\"graf graf--pre graf-after--pre\">const greeting = () => {\r\n console.log('Hello World');\r\n}<\/pre>\r\n<pre id=\"e32a\" class=\"graf graf--pre graf-after--pre\">processImage(logo.jpg);\r\nnetworkRequest('www.somerandomurl.com');\r\ngreeting();<\/pre>\r\n<p id=\"c365\" class=\"graf graf--p graf-after--pre\">Doing image processing and network request takes time. So when <code class=\"markup--code markup--p-code\">processImage()<\/code> function is called, it\u2019s going to take some time depending on the size of the image.<\/p>\r\n<p id=\"d2e2\" class=\"graf graf--p graf-after--p\">When the <code class=\"markup--code markup--p-code\">processImage()<\/code> function completes, it\u2019s removed from the stack. After that the <code class=\"markup--code markup--p-code\">networkRequest()<\/code> function is called and pushed to the stack. Again it\u2019s also going to take some time to finish execution.<\/p>\r\n<p id=\"760b\" class=\"graf graf--p graf-after--p\">At last when the <code class=\"markup--code markup--p-code\">networkRequest()<\/code> function completes, <code class=\"markup--code markup--p-code\">greeting()<\/code> function is called and since it contains only a <code class=\"markup--code markup--p-code\">console.log<\/code> statement and <code class=\"markup--code markup--p-code\">console.log<\/code> statements are generally fast, so the <code class=\"markup--code markup--p-code\">greeting()<\/code> function is immediately executed and returned.<\/p>\r\n<p id=\"a448\" class=\"graf graf--p graf-after--p\">So you see, we have to wait until the function (such as <code class=\"markup--code markup--p-code\">processImage()<\/code> or <code class=\"markup--code markup--p-code\">networkRequest()<\/code>) has finished. This means these functions are blocking the call stack or main thread. So we can\u2019t perform any other operation while the above code is executing which is not ideal.<\/p>\r\n\r\n<h4 id=\"4396\" class=\"graf graf--h4 graf-after--p\">So what\u2019s the solution?<\/h4>\r\n<p id=\"e9c3\" class=\"graf graf--p graf-after--h4\">The simplest solution is asynchronous callbacks. We use asynchronous callbacks to make our code non-blocking. For example:<\/p>\r\n\r\n<pre id=\"699c\" class=\"graf graf--pre graf-after--p\">const networkRequest = () => {\r\n setTimeout(() => {\r\n console.log('Async Code');\r\n }, 2000);\r\n};<\/pre>\r\n<pre id=\"742d\" class=\"graf graf--pre graf-after--pre\">console.log('Hello World');<\/pre>\r\n<pre id=\"42c7\" class=\"graf graf--pre graf-after--pre\">networkRequest();<\/pre>\r\n<p id=\"322a\" class=\"graf graf--p graf-after--pre\">Here I have used <code class=\"markup--code markup--p-code\">setTimeout<\/code> method to simulate the network request. Please keep in mind that the <code class=\"markup--code markup--p-code\">setTimeout<\/code> is not a part of the JavaScript engine, it\u2019s a part of something known as web APIs (in browsers) and C\/C++ APIs (in node.js).<\/p>\r\n<p id=\"ff2c\" class=\"graf graf--p graf-after--p\">To understand how this code is executed we have to understand a few more concepts such event loop and the callback queue (or the message queue).<\/p>\r\n\r\n<figure id=\"2ce6\" class=\"graf graf--figure graf-after--p\">\r\n<div class=\"aspectRatioPlaceholder is-locked\">\r\n<div class=\"aspectRatioPlaceholder-fill\"><\/div>\r\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*O_H6XRaDX9FaC4Q9viiRAA.png\" data-width=\"839\" data-height=\"662\" data-action=\"zoom\" data-action-value=\"1*O_H6XRaDX9FaC4Q9viiRAA.png\" data-scroll=\"native\"><\/div>\r\n<\/div><\/figure>\r\n<\/div>\r\n<figure id=\"2ce6\" class=\"graf graf--figure graf-after--p\">\r\n<div class=\"aspectRatioPlaceholder is-locked\">\r\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*O_H6XRaDX9FaC4Q9viiRAA.png\" data-width=\"839\" data-height=\"662\" data-action=\"zoom\" data-action-value=\"1*O_H6XRaDX9FaC4Q9viiRAA.png\" data-scroll=\"native\"><img class=\"progressiveMedia-image js-progressiveMedia-image\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*O_H6XRaDX9FaC4Q9viiRAA.png\" data-src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*O_H6XRaDX9FaC4Q9viiRAA.png\" \/><\/div>\r\n<\/div>\r\n<figcaption class=\"imageCaption\">An Overview of JavaScript Runtime Environment<\/figcaption><\/figure>\r\n<p id=\"12a9\" class=\"graf graf--p graf-after--figure\">The event loop, the web APIs and the message queue are not part of the JavaScript engine, it\u2019s a part of browser\u2019s JavaScript runtime environment or Nodejs JavaScript runtime environment (in case of Nodejs). In Nodejs, the web APIs are replaced by the C\/C++ APIs.<\/p>\r\n<p id=\"77fc\" class=\"graf graf--p graf-after--p\">Now let\u2019s get back to the above code and see how it\u2019s executed in an asynchronous way.<\/p>\r\n\r\n<pre id=\"093f\" class=\"graf graf--pre graf-after--p\">const networkRequest = () => {\r\n setTimeout(() => {\r\n console.log('Async Code');\r\n }, 2000);\r\n};<\/pre>\r\n<pre id=\"e715\" class=\"graf graf--pre graf-after--pre\">console.log('Hello World');<\/pre>\r\n<pre id=\"fa66\" class=\"graf graf--pre graf-after--pre\">networkRequest();<\/pre>\r\n<pre id=\"7906\" class=\"graf graf--pre graf-after--pre\">console.log('The End');<\/pre>\r\n<figure id=\"ef4a\" class=\"graf graf--figure graf-after--pre\">\r\n<div class=\"aspectRatioPlaceholder is-locked\">\r\n<div class=\"aspectRatioPlaceholder-fill\"><\/div>\r\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*sOz5cj-_Jjv23njWg_-uGA.gif\" data-width=\"842\" data-height=\"662\" data-action=\"zoom\" data-action-value=\"1*sOz5cj-_Jjv23njWg_-uGA.gif\" data-scroll=\"native\"><\/div>\r\n<\/div><\/figure>\r\n<figure id=\"ef4a\" class=\"graf graf--figure graf-after--pre\">\r\n<div class=\"aspectRatioPlaceholder is-locked\">\r\n<div class=\"progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded\" data-image-id=\"1*sOz5cj-_Jjv23njWg_-uGA.gif\" data-width=\"842\" data-height=\"662\" data-action=\"zoom\" data-action-value=\"1*sOz5cj-_Jjv23njWg_-uGA.gif\" data-scroll=\"native\"><img class=\"progressiveMedia-image js-progressiveMedia-image\" src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*sOz5cj-_Jjv23njWg_-uGA.gif\" data-src=\"https:\/\/cdn-images-1.medium.com\/max\/1600\/1*sOz5cj-_Jjv23njWg_-uGA.gif\" \/><\/div>\r\n<\/div>\r\n<figcaption class=\"imageCaption\">Event Loop<\/figcaption><\/figure>\r\n<p id=\"505c\" class=\"graf graf--p graf-after--figure\">When the above code loads in the browser, the <code class=\"markup--code markup--p-code\">console.log(\u2018Hello World\u2019)<\/code> is pushed to the stack and popped off the stack after it\u2019s finished. Next, a call to <code class=\"markup--code markup--p-code\">networkRequest()<\/code> is encountered, so it\u2019s pushed to the top of the stack.<\/p>\r\n<p id=\"0177\" class=\"graf graf--p graf-after--p\">Next <code class=\"markup--code markup--p-code\">setTimeout()<\/code> function is called, so it\u2019s pushed to the top of the stack. The <code class=\"markup--code markup--p-code\">setTimeout()<\/code> has two arguments: 1) callback and 2) time in microseconds (ms).<\/p>\r\n<p id=\"a426\" class=\"graf graf--p graf-after--p\">The <code class=\"markup--code markup--p-code\">setTimeout()<\/code> method starts a timer of <code class=\"markup--code markup--p-code\">2s<\/code> in the web APIs environment. At this point, the <code class=\"markup--code markup--p-code\">setTimeout()<\/code> has finished and it\u2019s popped off from the stack. After it, <code class=\"markup--code markup--p-code\">console.log('The End')<\/code> is pushed to the stack, executed and removed from the stack after its completion.<\/p>\r\n<p id=\"51aa\" class=\"graf graf--p graf-after--p\">Meanwhile, the timer has expired, now the callback is pushed to the <strong class=\"markup--strong markup--p-strong\">message queue<\/strong>. But the callback is not immediately executed, and that\u2019s where the event loop kicks in.<\/p>\r\n\r\n<h4 id=\"4165\" class=\"graf graf--h4 graf-after--p\">The Event\u00a0Loop<\/h4>\r\n<p id=\"914e\" class=\"graf graf--p graf-after--h4\">The job of the Event loop is to look into the call stack and determine if the call stack is empty or not. If the call stack is empty, it looks into the message queue to see if there\u2019s any pending call back waiting to be executed.<\/p>\r\n<p id=\"52ca\" class=\"graf graf--p graf-after--p\">In this case, the message queue contains one callback, and the call stack is empty at this point. So the Event loop pushes the callback to the top of the stack.<\/p>\r\n<p id=\"c643\" class=\"graf graf--p graf-after--p\">After that the <code class=\"markup--code markup--p-code\">console.log(\u2018Async Code\u2019)<\/code> is pushed to the top of the stack, executed and popped off from the stack. At this point, the callback has finished so it\u2019s removed from the stack and the program finally finishes.<\/p>\r\n<p id=\"d198\" class=\"graf graf--p graf-after--p\">The <strong class=\"markup--strong markup--p-strong\">Message queue<\/strong> also contains the callbacks from the DOM events such as click events and keyboard events. For example:<\/p>\r\n\r\n<pre id=\"3e52\" class=\"graf graf--pre graf-after--p\">document.querySelector('.btn').addEventListener('click',(event) => {\r\n console.log('Button Clicked');\r\n});<\/pre>\r\n<p id=\"b58c\" class=\"graf graf--p graf-after--pre\">In case of DOM events, the event listener sits in the web APIs environment waiting for a certain event (click event in this case) to happen, and when that event happens, then the callback function is placed in the message queue waiting to be executed.<\/p>\r\n<p id=\"6b7b\" class=\"graf graf--p graf-after--p\">Again the event loop checks if the call stack is empty and pushes the event callback to the stack if it\u2019s empty and the callback is executed.<\/p>\r\n\r\n<h4 id=\"dfd3\" class=\"graf graf--h4 graf-after--p\">Deferring Function Execution<\/h4>\r\n<p id=\"90e4\" class=\"graf graf--p graf-after--h4\">We can also use <code class=\"markup--code markup--p-code\">setTimeout<\/code> to defer the function execution until the stack is clear. For example:<\/p>\r\n\r\n<pre id=\"046f\" class=\"graf graf--pre graf-after--p\">const bar = () => {\r\n console.log('bar');\r\n}<\/pre>\r\n<pre id=\"2620\" class=\"graf graf--pre graf-after--pre\">const baz = () => {\r\n console.log('baz');\r\n}<\/pre>\r\n<pre id=\"2ea4\" class=\"graf graf--pre graf-after--pre\">const foo = () => {\r\n console.log('foo');\r\n setTimeout(bar, 0);\r\n baz();\r\n}<\/pre>\r\n<pre id=\"160e\" class=\"graf graf--pre graf-after--pre\">foo();<\/pre>\r\n<p id=\"0eb9\" class=\"graf graf--p graf-after--pre\">The code prints:<\/p>\r\n\r\n<pre id=\"6435\" class=\"graf graf--pre graf-after--p\">foo\r\nbaz\r\nbar<\/pre>\r\n<p id=\"499d\" class=\"graf graf--p graf-after--pre\">When this code run, first <code class=\"markup--code markup--p-code\">foo()<\/code> is called, inside <code class=\"markup--code markup--p-code\">foo<\/code> we call <code class=\"markup--code markup--p-code\">console.log('foo')<\/code>, after that <code class=\"markup--code markup--p-code\">setTimeout()<\/code> is called with <code class=\"markup--code markup--p-code\">bar()<\/code> as a callback and <code class=\"markup--code markup--p-code\">0 seconds<\/code> timer.<\/p>\r\n<p id=\"dfca\" class=\"graf graf--p graf-after--p\">Now if we have not used <code class=\"markup--code markup--p-code\">setTimeout<\/code>, the <code class=\"markup--code markup--p-code\">bar()<\/code> function would have immediately executed, but using <code class=\"markup--code markup--p-code\">setTimeout<\/code> with 0 seconds timer helps to defer execution of <code class=\"markup--code markup--p-code\">bar<\/code> until the stack is empty.<\/p>\r\n<p id=\"38c3\" class=\"graf graf--p graf-after--p\">After 0 seconds the <code class=\"markup--code markup--p-code\">bar() <\/code>callback is put into the message queue waiting to be executed. But it will only be executed when the stack is completely empty that is after the <code class=\"markup--code markup--p-code\">baz<\/code> and <code class=\"markup--code markup--p-code\">foo<\/code> function has finished.<\/p>\r\n\r\n<h4 id=\"b378\" class=\"graf graf--h4 graf-after--p\">ES6 Job\u00a0Queue<\/h4>\r\n<p id=\"46f6\" class=\"graf graf--p graf-after--h4\">We have learned how the asynchronous callbacks and DOM events are executed which uses the message queue to store all the callbacks waiting to be executed.<\/p>\r\n<p id=\"2068\" class=\"graf graf--p graf-after--p\">ES6 introduced the concept of job queue which is used by Promises in JavaScript. The difference between the message queue and the job queue is that the job queue has a higher priority than the message queue, which means that promise jobs inside the job queue will be executed before the callbacks inside the message queue.<\/p>\r\n<p id=\"e2ea\" class=\"graf graf--p graf-after--p\">For example:<\/p>\r\n\r\n<pre id=\"a38c\" class=\"graf graf--pre graf-after--p\">const bar = () => {\r\n console.log('bar');\r\n};<\/pre>\r\n<pre id=\"363b\" class=\"graf graf--pre graf-after--pre\">const baz = () => {\r\n console.log('baz');\r\n};<\/pre>\r\n<pre id=\"3bc9\" class=\"graf graf--pre graf-after--pre\">const foo = () => {\r\n console.log('foo');\r\n setTimeout(bar, 0);\r\n new Promise((resolve, reject) => {\r\n resolve('Promise resolved');\r\n }).then(res => console.log(res))\r\n .catch(err => console.log(err));\r\n baz();\r\n};<\/pre>\r\n<pre id=\"253c\" class=\"graf graf--pre graf-after--pre\">foo();<\/pre>\r\n<p id=\"4bf2\" class=\"graf graf--p graf-after--pre\">The code prints:<\/p>\r\n\r\n<pre id=\"45ff\" class=\"graf graf--pre graf-after--p\">foo\r\nbaz\r\nPromised resolved\r\nbar<\/pre>\r\n<p id=\"7af1\" class=\"graf graf--p graf-after--pre\">We can see that the promise is executed before the <code class=\"markup--code markup--p-code\">setTimeout<\/code>, because promise response are stored inside the job queue which has a higher priority than message queue.<\/p>\r\n\r\n<h3 id=\"9c53\" class=\"graf graf--h3 graf-after--p\">Conclusion<\/h3>\r\n<p id=\"800b\" class=\"graf graf--p graf-after--h3\">So we have learned how asynchronous JavaScript works and other concepts such as call stack, event loop, message queue and job queue which together make the JavaScript runtime environment. While it\u2019s not necessary that you learn all these concepts to be an awesome JavaScript developer, but it\u2019s helpful to know these concepts\u00a0:)<\/p>\r\n\r\n<\/div>","post_title":"Understanding Asynchronous JavaScript\u200a\u2014\u200athe Event Loop","post_excerpt":"Master JavaScript asynchronous programming with the event loop. Understand how callbacks, promises, and async\/await work behind the scenes. Learn to write efficient non-blocking code for better performance.","post_status":"publish","comment_status":"open","ping_status":"open","post_password":"","post_name":"understanding-asynchronous-javascript","to_ping":"","pinged":"","post_modified":"2018-11-14 12:19:08","post_modified_gmt":"2018-11-14 12:19:08","post_content_filtered":"","post_parent":0,"guid":"https:\/\/narodev.com\/?p=305","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw"}],"post_count":9,"current_post":-1,"before_loop":false,"in_the_loop":false,"post":{"ID":171,"post_author":"1","post_date":"2017-06-09 21:45:53","post_date_gmt":"2017-06-09 21:45:53","post_content":"This is the privacy policy (\"<strong>Privacy Policy<\/strong>\") that governs how we, KStore App. (\"<strong>KStore<\/strong>\", \"<strong>we<\/strong>\", \"<strong>our<\/strong>\" or \"<strong>us<\/strong>\"), use Personal Information\r\n<ul>\r\n \t<li>KStore App doesn't collect any personal information and \/ or share and of the messages in conversations made with the app \/ bot .<\/li>\r\n \t<li>Kstore App will not send any scam \/ spam messages , or any advertising \/ marketing links<\/li>\r\n<\/ul>","post_title":"KStore Privacy Policy","post_excerpt":"Privacy policy for KStore mobile application. Complete terms and conditions for user data protection, cookie usage, and privacy compliance.","post_status":"publish","comment_status":"open","ping_status":"open","post_password":"","post_name":"kstore-privacy-policy","to_ping":"","pinged":"","post_modified":"2017-06-09 21:48:47","post_modified_gmt":"2017-06-09 21:48:47","post_content_filtered":"","post_parent":0,"guid":"https:\/\/narodev.com\/?p=171","menu_order":0,"post_type":"post","post_mime_type":"","comment_count":"0","filter":"raw"},"comment_count":0,"current_comment":-1,"found_posts":49,"max_num_pages":6,"max_num_comment_pages":0,"is_single":false,"is_preview":false,"is_page":false,"is_archive":false,"is_date":false,"is_year":false,"is_month":false,"is_day":false,"is_time":false,"is_author":false,"is_category":false,"is_tag":false,"is_tax":false,"is_search":false,"is_feed":false,"is_comment_feed":false,"is_trackback":false,"is_home":true,"is_privacy_policy":false,"is_404":false,"is_embed":false,"is_paged":false,"is_admin":false,"is_attachment":false,"is_singular":false,"is_robots":false,"is_favicon":false,"is_posts_page":false,"is_post_type_archive":false,"thumbnails_cached":false},"blog_layout":"masonry","blog_columns":"3","media_link":"yes","hide_share":"yes","hide_content":"yes","meta_author":"yes","meta_comments":"yes","hide_views":"yes","hide_likes":"yes","read_more_text":"Read More","img_size":"766x520","heading_tag":"h4","remainings_loading_btn_items_amount":3,"load_more_text":"Load More","post_count":9,"query_args":{"post_status":"publish","posts_per_page":9,"order":"ASC","orderby":"date","paged":1,"update_post_term_cache":false,"update_post_meta_cache":false,"error":"","m":"","p":0,"post_parent":"","subpost":"","subpost_id":"","attachment":"","attachment_id":0,"name":"","pagename":"","page_id":0,"second":"","minute":"","hour":"","day":0,"monthnum":0,"year":0,"w":0,"category_name":"","tag":"","cat":"","tag_id":"","author":"","author_name":"","feed":"","tb":"","meta_key":"","meta_value":"","preview":"","s":"","sentence":"","title":"","fields":"all","menu_order":"","embed":"","category__in":[],"category__not_in":[],"category__and":[],"post__in":[],"post__not_in":[],"post_name__in":[],"tag__in":[],"tag__not_in":[],"tag__and":[],"tag_slug__in":[],"tag_slug__and":[],"post_parent__in":[],"post_parent__not_in":[],"author__in":[],"author__not_in":[],"search_columns":[],"ignore_sticky_posts":false,"suppress_filters":false,"cache_results":true,"update_menu_item_cache":false,"lazy_load_term_meta":false,"post_type":"","nopaging":false,"comments_per_page":"50","no_found_rows":false},"atts":{"blog_columns":"3","blog_columns_tablet":"2","blog_columns_mobile":"1","img_size_string":"766x520","navigation_type":"load_more","load_more_text":"Load More","hide_content":"yes","read_more_text":"Read More","meta_author":"yes","meta_comments":"yes","number_of_posts":9,"blog_layout":"masonry","order":"ASC","blog_title":"","blog_subtitle":"","img_size_array":null,"img_aspect_ratio":"","navigation_align":null,"navigation_align_tablet":null,"navigation_align_mobile":null,"remainings_loading_btn_items_amount":3,"hide_media":"","media_link":"yes","hide_blog_title":"","content_letter_count":null,"read_more_hide":"","hide_all_meta":"","meta_categories":"","meta_date":"","hide_views":"yes","hide_likes":"yes","hide_share":"yes","cursor_tooltip":"","cursor_prop":null,"cursor_tooltip_type":null,"tooltip_text":null,"tooltip_icon_type":null,"tooltip_number":null,"tooltip_icon_fontawesome":null,"tooltip_icon_render_class":null,"tooltip_thumbnail":null,"tooltip_image_render_class":null,"tooltip_thumbnail_size":null,"tooltip_thumbnail_custom_dimension":null,"cursor_thumbnail":null,"tooltip_thumbnail_animation":null,"cursor_color_bg":null,"cursor_tooltip_bg":null,"tooltip_bg_color_color":null,"tooltip_bg_color_color_b":null,"tooltip_bg_color_image":null,"tooltip_bg_color_video_link":null,"tooltip_bg_color_video_start":null,"tooltip_bg_color_video_end":null,"tooltip_bg_color_play_once":null,"tooltip_bg_color_play_on_mobile":null,"tooltip_bg_color_privacy_mode":null,"tooltip_bg_color_slideshow_gallery":null,"tooltip_bg_color_slideshow_loop":null,"tooltip_bg_color_slideshow_slide_duration":null,"tooltip_bg_color_slideshow_slide_transition":null,"tooltip_bg_color_slideshow_transition_duration":null,"tooltip_bg_color_slideshow_lazyload":null,"tooltip_bg_color_slideshow_ken_burns":null,"tooltip_bg_color_slideshow_ken_burns_zoom_direction":null,"tooltip_additional_bg_color_color":null,"tooltip_additional_bg_color_color_b":null,"tooltip_additional_bg_color_image":null,"tooltip_additional_bg_color_video_link":null,"tooltip_additional_bg_color_video_start":null,"tooltip_additional_bg_color_video_end":null,"tooltip_additional_bg_color_play_once":null,"tooltip_additional_bg_color_play_on_mobile":null,"tooltip_additional_bg_color_privacy_mode":null,"tooltip_additional_bg_color_slideshow_gallery":null,"tooltip_additional_bg_color_slideshow_loop":null,"tooltip_additional_bg_color_slideshow_slide_duration":null,"tooltip_additional_bg_color_slideshow_slide_transition":null,"tooltip_additional_bg_color_slideshow_transition_duration":null,"tooltip_additional_bg_color_slideshow_lazyload":null,"tooltip_additional_bg_color_slideshow_ken_burns":null,"tooltip_additional_bg_color_slideshow_ken_burns_zoom_direction":null,"slider_container_padding":null,"slides_transition":null,"carousel_appear_animation":null,"animation_style":null,"animation_triggered_by_mouse":null,"autoplay":null,"autoplay_speed":null,"autoplay_pause":null,"autoplay_reverse":null,"slider_infinite":null,"adaptive_height":null,"slide_per_single":null,"fade_animation":null,"center_mode":null,"use_pagination":null,"pagination_type":null,"pagination_dynamic":null,"pagination_custom_colors":null,"use_navigation":null,"use_title_navigation":null,"navigation_position":null,"navigation_customize_colors":null,"customize_responsive":null,"widescreen_breakpoint":null,"widescreen_slides":null,"desktop_breakpoint":null,"desktop_slides":null,"tablet_breakpoint":null,"tablet_slides":null,"mobile_breakpoint":null,"mobile_slides":null,"order_by":"date","categories":"","exclude_categories":"","tags":"","exclude_tags":"","taxonomies":"","exclude_taxonomies":"","by_posts":"","exclude_any":"","author":"","exclude_author":"","item_bg":"","item_bg_color":null,"item_bg_color_b":null,"item_bg_image":null,"item_bg_video_link":null,"item_bg_video_start":null,"item_bg_video_end":null,"item_bg_play_once":null,"item_bg_play_on_mobile":null,"item_bg_privacy_mode":null,"item_bg_slideshow_gallery":null,"item_bg_slideshow_loop":null,"item_bg_slideshow_slide_duration":null,"item_bg_slideshow_slide_transition":null,"item_bg_slideshow_transition_duration":null,"item_bg_slideshow_lazyload":null,"item_bg_slideshow_ken_burns":null,"item_bg_slideshow_ken_burns_zoom_direction":null,"heading_tag":"h4","image_scale_animation":"","media_overlay_idle_color":null,"media_overlay_idle_color_b":null,"media_overlay_idle_image":null,"media_overlay_idle_video_link":null,"media_overlay_idle_video_start":null,"media_overlay_idle_video_end":null,"media_overlay_idle_play_once":null,"media_overlay_idle_play_on_mobile":null,"media_overlay_idle_privacy_mode":null,"media_overlay_idle_slideshow_gallery":null,"media_overlay_idle_slideshow_loop":null,"media_overlay_idle_slideshow_slide_duration":null,"media_overlay_idle_slideshow_slide_transition":null,"media_overlay_idle_slideshow_transition_duration":null,"media_overlay_idle_slideshow_lazyload":null,"media_overlay_idle_slideshow_ken_burns":null,"media_overlay_idle_slideshow_ken_burns_zoom_direction":null,"media_overlay_hover_color":null,"media_overlay_hover_color_b":null,"media_overlay_hover_image":null,"media_overlay_hover_video_link":null,"media_overlay_hover_video_start":null,"media_overlay_hover_video_end":null,"media_overlay_hover_play_once":null,"media_overlay_hover_play_on_mobile":null,"media_overlay_hover_privacy_mode":null,"media_overlay_hover_slideshow_gallery":null,"media_overlay_hover_slideshow_loop":null,"media_overlay_hover_slideshow_slide_duration":null,"media_overlay_hover_slideshow_slide_transition":null,"media_overlay_hover_slideshow_transition_duration":null,"media_overlay_hover_slideshow_lazyload":null,"media_overlay_hover_slideshow_ken_burns":null,"media_overlay_hover_slideshow_ken_burns_zoom_direction":null,"load_more_media_type":"icon","load_more_media_icon":{"value":"","library":""},"_title":"","_element_width":"","_element_width_tablet":"","_element_width_mobile":"","_position":"","_element_id":"","_css_classes":"","_element_cache":"","wgl_easy_sticky":"","_animation":"","_animation_tablet":"","_animation_mobile":"","animation_duration":null,"_animation_delay":null,"_transform_rotate_popover":"","_transform_rotateZ_effect":null,"_transform_rotateZ_effect_tablet":null,"_transform_rotateZ_effect_mobile":null,"_transform_rotate_3d":null,"_transform_rotateX_effect":null,"_transform_rotateX_effect_tablet":null,"_transform_rotateX_effect_mobile":null,"_transform_rotateY_effect":null,"_transform_rotateY_effect_tablet":null,"_transform_rotateY_effect_mobile":null,"_transform_perspective_effect":null,"_transform_perspective_effect_tablet":null,"_transform_perspective_effect_mobile":null,"_transform_translate_popover":"","_transform_translateX_effect":null,"_transform_translateX_effect_tablet":null,"_transform_translateX_effect_mobile":null,"_transform_translateY_effect":null,"_transform_translateY_effect_tablet":null,"_transform_translateY_effect_mobile":null,"_transform_scale_popover":"","_transform_keep_proportions":"yes","_transform_scale_effect":null,"_transform_scale_effect_tablet":null,"_transform_scale_effect_mobile":null,"_transform_scaleX_effect":null,"_transform_scaleX_effect_tablet":null,"_transform_scaleX_effect_mobile":null,"_transform_scaleY_effect":null,"_transform_scaleY_effect_tablet":null,"_transform_scaleY_effect_mobile":null,"_transform_skew_popover":"","_transform_skewX_effect":null,"_transform_skewX_effect_tablet":null,"_transform_skewX_effect_mobile":null,"_transform_skewY_effect":null,"_transform_skewY_effect_tablet":null,"_transform_skewY_effect_mobile":null,"_transform_flipX_effect":"","_transform_flipY_effect":"","_transform_rotate_popover_hover":"","_transform_rotateZ_effect_hover":null,"_transform_rotateZ_effect_hover_tablet":null,"_transform_rotateZ_effect_hover_mobile":null,"_transform_rotate_3d_hover":null,"_transform_rotateX_effect_hover":null,"_transform_rotateX_effect_hover_tablet":null,"_transform_rotateX_effect_hover_mobile":null,"_transform_rotateY_effect_hover":null,"_transform_rotateY_effect_hover_tablet":null,"_transform_rotateY_effect_hover_mobile":null,"_transform_perspective_effect_hover":null,"_transform_perspective_effect_hover_tablet":null,"_transform_perspective_effect_hover_mobile":null,"_transform_translate_popover_hover":"","_transform_translateX_effect_hover":null,"_transform_translateX_effect_hover_tablet":null,"_transform_translateX_effect_hover_mobile":null,"_transform_translateY_effect_hover":null,"_transform_translateY_effect_hover_tablet":null,"_transform_translateY_effect_hover_mobile":null,"_transform_scale_popover_hover":"","_transform_keep_proportions_hover":"yes","_transform_scale_effect_hover":null,"_transform_scale_effect_hover_tablet":null,"_transform_scale_effect_hover_mobile":null,"_transform_scaleX_effect_hover":null,"_transform_scaleX_effect_hover_tablet":null,"_transform_scaleX_effect_hover_mobile":null,"_transform_scaleY_effect_hover":null,"_transform_scaleY_effect_hover_tablet":null,"_transform_scaleY_effect_hover_mobile":null,"_transform_skew_popover_hover":"","_transform_skewX_effect_hover":null,"_transform_skewX_effect_hover_tablet":null,"_transform_skewX_effect_hover_mobile":null,"_transform_skewY_effect_hover":null,"_transform_skewY_effect_hover_tablet":null,"_transform_skewY_effect_hover_mobile":null,"_transform_flipX_effect_hover":"","_transform_flipY_effect_hover":"","_background_color":null,"_background_color_b":null,"_background_image":null,"_background_video_link":null,"_background_video_start":null,"_background_video_end":null,"_background_play_once":null,"_background_play_on_mobile":null,"_background_privacy_mode":null,"_background_slideshow_gallery":null,"_background_slideshow_loop":null,"_background_slideshow_slide_duration":null,"_background_slideshow_slide_transition":null,"_background_slideshow_transition_duration":null,"_background_slideshow_lazyload":null,"_background_slideshow_ken_burns":null,"_background_slideshow_ken_burns_zoom_direction":null,"_background_hover_color":null,"_background_hover_color_b":null,"_background_hover_image":null,"_background_hover_video_link":null,"_background_hover_video_start":null,"_background_hover_video_end":null,"_background_hover_play_once":null,"_background_hover_play_on_mobile":null,"_background_hover_privacy_mode":null,"_background_hover_slideshow_gallery":null,"_background_hover_slideshow_loop":null,"_background_hover_slideshow_slide_duration":null,"_background_hover_slideshow_slide_transition":null,"_background_hover_slideshow_transition_duration":null,"_background_hover_slideshow_lazyload":null,"_background_hover_slideshow_ken_burns":null,"_background_hover_slideshow_ken_burns_zoom_direction":null,"_mask_switch":"","hide_desktop":"","hide_tablet":"","hide_mobile":"","wgl_hide_el_under_enable":""},"load_more_media_type":"icon","load_more_media_icon":{"value":"","library":""}}">








