{"id":9444,"date":"2020-04-22T13:52:03","date_gmt":"2020-04-22T20:52:03","guid":{"rendered":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/power-apps\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/"},"modified":"2025-06-11T07:59:22","modified_gmt":"2025-06-11T14:59:22","slug":"turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests","status":"publish","type":"post","link":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/power-apps\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/","title":{"rendered":"Turbocharge your model-driven apps by transitioning away from synchronous requests"},"content":{"rendered":"<p>Model-driven apps are highly customizable and can pull data from many different sources to satisfy your business needs.\u00a0 When using custom logic to retrieve data from Dataverse or elsewhere, one important concept comes to mind &#8211;\u00a0<strong>performance<\/strong>.\u00a0 \u00a0Pro developers should <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/model-driven-apps\/design-performant-forms\">know how<\/a> to effectively code, build, and run model-driven apps that load quickly when a user opens and navigates in your app while working on daily tasks.\u00a0 Typically, pro developers use JavaScript to request data using\u00a0<strong>fetch<\/strong> or\u00a0<strong>XMLHttpRequest<\/strong>.<\/p>\n<p>In the XHR case, browsers still support an older model where data is fetched synchronously.\u00a0 However, this model causes severe performance issues for end users, especially when the network is slow or there are multiple calls that need to be made.\u00a0 Essentially, the browser freezes up and the end user is frustrated that they cannot click, scroll, or interact with the page.\u00a0 See <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/developer\/model-driven-apps\/best-practices\/business-logic\/interact-http-https-resources-asynchronously\">our guidance<\/a>\u00a0and\u00a0<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/XMLHttpRequest\/Synchronous_and_Asynchronous_Requests\">MDN&#8217;s article<\/a> for more details on the effect (as well as examples).\u00a0 Transitioning to asynchronous web requests can\u00a0<strong>shave seconds off end users&#8217; form load times<\/strong> depending on the customizations.<\/p>\n<p>Traditionally, the legacy web client has required certain extensions like ribbon rules to return synchronously, meaning developers were forced to use synchronous requests when requesting data from remote sources.\u00a0 In Unified Interface, we&#8217;ve taken steps to ensure asynchronous communication is supported.\u00a0 For example:<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/developer\/model-driven-apps\/define-ribbon-enable-rules#custom-rule\">Asynchronous ribbon rule evaluation<\/a> is supported in Unified Interface.<\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/maker\/model-driven-apps\/design-performant-forms#async-support-in-form-onload-and-form-onsave-events\">Async OnLoad and OnSave<\/a> is supported in Unified Interface.<\/li>\n<li>Many customers needed to check privileges using\u00a0Xrm.Utility.getGlobalContext().userSettings.securityRoles, looping through the collection to request role names from Dataverse.\u00a0 We&#8217;ve added <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/developer\/model-driven-apps\/clientapi\/reference\/xrm-utility\/getglobalcontext\/usersettings#roles\">the roles property<\/a> to userSettings to avoid the need to request role names.<\/li>\n<li>We&#8217;re working on asynchronous evaluation for grid item icons.<\/li>\n<\/ul>\n<p>Today, running the solution checker will alert you of any detected synchronous requests with the\u00a0<strong>web-use-async<\/strong> rule.<\/p>\n<h2>Examples<\/h2>\n<p>Let&#8217;s see an example in action.\u00a0 As mentioned earlier, synchronous requests are typically used in ribbon rules since the legacy web client only supported this strategy.<\/p>\n<pre>\/\/ NOTE: Don't do this!\nfunction EnableRule() {\n    const request = new XMLHttpRequest();\n\n    \/\/ Pass false for the async argument to force synchronous request\n    request.open('GET', '\/bar\/foo', false);\n    request.send(null);\n    return request.status === 200 &amp;&amp; request.responseText === \"true\";\n}\n<\/pre>\n<p>The rule logic asks the server for some data, parses it, and returns a boolean value as its rule evaluation result.\u00a0 Again, this freezes the browser for the end user until the request returns from the server.<\/p>\n<p>Let&#8217;s see how we can convert this rule from synchronous to asynchronous.\u00a0 By wrapping the request handlers in a Promise and resolving or rejecting when the request is finished, the rule will not block the browser from performing more work.\u00a0 Of course, in practice, you will probably use helpers to wrap these types of requests so the Promise code does not need to be duplicated.<\/p>\n<pre>function EnableRule() {\n    const request = new XMLHttpRequest();\n    request.open('GET', '\/bar\/foo');\n    return new Promise(function(resolve, reject) {\n        request.onload = function (e) {\n            if (request.readyState === 4) {\n                if (request.status === 200) {\n                    resolve(request.responseText === \"true\");\n                } else {\n                    reject(request.statusText);\n                }\n            }\n        };\n        request.onerror = function (e) {\n            reject(request.statusText);\n        };\n        request.send(null);\n    });\n}\n<\/pre>\n<p>Using promises and asynchronous patterns, the user is now free to interact with the page while the request is out getting data.\u00a0 No more freezing of the user interface while the page is loading!<\/p>\n<p>Here&#8217;s another example of using the new roles property of userSettings to avoid synchronous requests.<\/p>\n<pre>\/\/ NOTE: Don't do this!\nfunction userHasRole(roleName) {\n    const roleIds = Xrm.Utility.getGlobalContext().userSettings.securityRoles;\n    let hasRole = false;\n    roleIds.forEach(function(roleId) {\n        const request = new XMLHttpRequest();\n\n        \/\/ Pass false for the async argument to force synchronous request\n        request.open('GET', '\/api\/data\/v9.0\/roles(' + roleId + ')', false);\n        request.send(null);\n        if (request.status === 200) {\n            const result = JSON.parse(request.responseText);\n            if (result.name === roleName) {\n                hasRole = true;\n            }\n        }\n    });\n\n    return hasRole;\n}\n<\/pre>\n<p>Using the new roles feature provided by Unified Interface, no network requests need to be made at all:<\/p>\n<pre>function userHasRole(roleName) {\n    const matchingRoles = Xrm.Utility.getGlobalContext().userSettings.roles.get(function(role) {\n        return role.name === roleName;\n    });\n    return matchingRoles.length &gt; 0;\n}\n<\/pre>\n<p>Here&#8217;s a profile of the network requests before and after the above change (assuming the user has 10 roles).<\/p>\n<p>Before (~2.3 seconds):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-9533\" height=\"490\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/04\/sync-xhr-competitor-simple-annotated.jpg\" width=\"1600\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/04\/sync-xhr-competitor-simple-annotated.jpg 1600w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/04\/sync-xhr-competitor-simple-annotated-300x92.jpg 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/04\/sync-xhr-competitor-simple-annotated-1024x314.jpg 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/04\/sync-xhr-competitor-simple-annotated-768x235.jpg 768w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/04\/sync-xhr-competitor-simple-annotated-1536x470.jpg 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/p>\n<p>After (~1.2 seconds):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-9534\" height=\"444\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/04\/non-sync-xhr-competitor-simple.jpg\" width=\"1479\" srcset=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/04\/non-sync-xhr-competitor-simple.jpg 1479w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/04\/non-sync-xhr-competitor-simple-300x90.jpg 300w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/04\/non-sync-xhr-competitor-simple-1024x307.jpg 1024w, https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/04\/non-sync-xhr-competitor-simple-768x231.jpg 768w\" sizes=\"auto, (max-width: 1479px) 100vw, 1479px\" \/><\/p>\n<p>You can see <strong>over 1 second (~50%) shaved off the form load<\/strong>, and the content is rendered much faster without the synchronous requests!<\/p>\n<p>We&#8217;ve also created <a href=\"https:\/\/www.youtube.com\/watch?v=qhXg_w6dWw8\">a video tutorial<\/a>\u00a0to walk through this and more examples of using asynchronous requests.<\/p>\n<p>We hope you will take advantage of these new capabilities in Unified Interface to delight your end users by providing a more responsive experience.\u00a0 If you find yourself needing to use synchronous requests in any situation, please let us know so we can enhance the product to accommodate.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Turbocharge your model-driven apps by transitioning from synchronous requests<\/p>\n","protected":false},"author":206,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","_alt_title":"","ms-ems-related-posts":[],"footnotes":""},"audience":[3378],"content-type":[],"job-role":[],"product":[3473],"property":[],"topic":[3421],"coauthors":[2180],"class_list":["post-9444","post","type-post","status-publish","format-standard","hentry","audience-it-professional","product-power-apps","topic-application-modernization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Turbocharge your model-driven apps by transitioning away from synchronous requests - Microsoft Power Platform Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Turbocharge your model-driven apps by transitioning away from synchronous requests - Microsoft Power Platform Blog\" \/>\n<meta property=\"og:description\" content=\"Turbocharge your model-driven apps by transitioning from synchronous requests\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/power-apps\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Power Platform Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-22T20:52:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-11T14:59:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/04\/sync-xhr-competitor-simple-annotated.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"490\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jesse Parsons\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jesse Parsons\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/\"},\"author\":[{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/author\/jeparson\/\",\"@type\":\"Person\",\"@name\":\"Jesse Parsons\"}],\"headline\":\"Turbocharge your model-driven apps by transitioning away from synchronous requests\",\"datePublished\":\"2020-04-22T20:52:03+00:00\",\"dateModified\":\"2025-06-11T14:59:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/\"},\"wordCount\":622,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/04\/sync-xhr-competitor-simple-annotated.jpg\",\"keywords\":[\"Dynamics 365\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/\",\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/\",\"name\":\"Turbocharge your model-driven apps by transitioning away from synchronous requests - Microsoft Power Platform Blog\",\"isPartOf\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/04\/sync-xhr-competitor-simple-annotated.jpg\",\"datePublished\":\"2020-04-22T20:52:03+00:00\",\"dateModified\":\"2025-06-11T14:59:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#primaryimage\",\"url\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/04\/sync-xhr-competitor-simple-annotated.jpg\",\"contentUrl\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/04\/sync-xhr-competitor-simple-annotated.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Turbocharge your model-driven apps by transitioning away from synchronous requests\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#website\",\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/\",\"name\":\"Microsoft Power Platform Blog\",\"description\":\"Innovate with Business Apps\",\"publisher\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization\",\"name\":\"Microsoft Power Platform Blog\",\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"contentUrl\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"width\":194,\"height\":145,\"caption\":\"Microsoft Power Platform Blog\"},\"image\":{\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/person\/1d9facc489c1cd5b79342cffbd7e5a5e\",\"name\":\"Jesse Parsons\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/8868ddacd5fd2556e54817e7e5c1a3a24699298c5e4fc5b11833d98408020995?s=96&d=mm&r=g86215177af230723f42ff6d98200a262\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8868ddacd5fd2556e54817e7e5c1a3a24699298c5e4fc5b11833d98408020995?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8868ddacd5fd2556e54817e7e5c1a3a24699298c5e4fc5b11833d98408020995?s=96&d=mm&r=g\",\"caption\":\"Jesse Parsons\"},\"url\":\"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/author\/jeparson\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Turbocharge your model-driven apps by transitioning away from synchronous requests - Microsoft Power Platform Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/","og_locale":"en_US","og_type":"article","og_title":"Turbocharge your model-driven apps by transitioning away from synchronous requests - Microsoft Power Platform Blog","og_description":"Turbocharge your model-driven apps by transitioning from synchronous requests","og_url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/power-apps\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/","og_site_name":"Microsoft Power Platform Blog","article_published_time":"2020-04-22T20:52:03+00:00","article_modified_time":"2025-06-11T14:59:22+00:00","og_image":[{"width":1600,"height":490,"url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/04\/sync-xhr-competitor-simple-annotated.jpg","type":"image\/jpeg"}],"author":"Jesse Parsons","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jesse Parsons","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#article","isPartOf":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/"},"author":[{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/author\/jeparson\/","@type":"Person","@name":"Jesse Parsons"}],"headline":"Turbocharge your model-driven apps by transitioning away from synchronous requests","datePublished":"2020-04-22T20:52:03+00:00","dateModified":"2025-06-11T14:59:22+00:00","mainEntityOfPage":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/"},"wordCount":622,"commentCount":0,"publisher":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#primaryimage"},"thumbnailUrl":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/04\/sync-xhr-competitor-simple-annotated.jpg","keywords":["Dynamics 365"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/","url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/","name":"Turbocharge your model-driven apps by transitioning away from synchronous requests - Microsoft Power Platform Blog","isPartOf":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#primaryimage"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#primaryimage"},"thumbnailUrl":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/04\/sync-xhr-competitor-simple-annotated.jpg","datePublished":"2020-04-22T20:52:03+00:00","dateModified":"2025-06-11T14:59:22+00:00","breadcrumb":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#primaryimage","url":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/04\/sync-xhr-competitor-simple-annotated.jpg","contentUrl":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2020\/04\/sync-xhr-competitor-simple-annotated.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/2020\/04\/22\/turbocharge-your-model-driven-apps-by-transitioning-away-from-synchronous-requests\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/"},{"@type":"ListItem","position":2,"name":"Turbocharge your model-driven apps by transitioning away from synchronous requests"}]},{"@type":"WebSite","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#website","url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/","name":"Microsoft Power Platform Blog","description":"Innovate with Business Apps","publisher":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#organization","name":"Microsoft Power Platform Blog","url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","contentUrl":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","width":194,"height":145,"caption":"Microsoft Power Platform Blog"},"image":{"@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/#\/schema\/person\/1d9facc489c1cd5b79342cffbd7e5a5e","name":"Jesse Parsons","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/8868ddacd5fd2556e54817e7e5c1a3a24699298c5e4fc5b11833d98408020995?s=96&d=mm&r=g86215177af230723f42ff6d98200a262","url":"https:\/\/secure.gravatar.com\/avatar\/8868ddacd5fd2556e54817e7e5c1a3a24699298c5e4fc5b11833d98408020995?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8868ddacd5fd2556e54817e7e5c1a3a24699298c5e4fc5b11833d98408020995?s=96&d=mm&r=g","caption":"Jesse Parsons"},"url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/author\/jeparson\/"}]}},"bloginabox_animated_featured_image":null,"bloginabox_display_generated_audio":false,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Power Platform Blog","distributor_original_site_url":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/9444","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/users\/206"}],"replies":[{"embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/comments?post=9444"}],"version-history":[{"count":1,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/9444\/revisions"}],"predecessor-version":[{"id":130629,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/9444\/revisions\/130629"}],"wp:attachment":[{"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/media?parent=9444"}],"wp:term":[{"taxonomy":"audience","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/audience?post=9444"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/content-type?post=9444"},{"taxonomy":"job-role","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/job-role?post=9444"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/product?post=9444"},{"taxonomy":"property","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/property?post=9444"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/topic?post=9444"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/cm-edgetun.pages.dev\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/coauthors?post=9444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}