{"id":445,"date":"2019-03-18T08:12:10","date_gmt":"2019-03-18T08:12:10","guid":{"rendered":"https:\/\/www.imperva.com\/learn\/?post_type=performance&#038;p=445"},"modified":"2023-08-14T10:52:25","modified_gmt":"2023-08-14T10:52:25","slug":"front-end-optimization-feo","status":"publish","type":"performance","link":"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/","title":{"rendered":"Front End Optimization"},"content":{"rendered":"<div class=\"container\">\n<section class=\"section-main d-flex d-sm-block\">\n<div class=\"row alt-row custom-row\">\n<div class=\"col-12 col-sm-6 alignleft\">\n<p>In the context of web services, the term \u201cfront end\u201d relates to the interaction between your website and a visitor\u2019s browser. Front end optimization (FEO), also known as content optimization, is the process of fine-tuning your website to make it more browser-friendly and quicker to load.<\/p>\n<p>Broadly speaking, FEO focuses on reducing file sizes and minimizing the number of requests needed for a given page to load.<\/p>\n<\/div>\n<div class=\"col-12 col-sm-6 col-md-6 col-lg-5 col-xl-6 alignright\">\n<div class=\"image-box\"><img loading=\"lazy\" decoding=\"async\" title=\"\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/bitmap@3x.png\" alt=\"Imperva CDN Guide: Front End Optimization\" width=\"565\" height=\"390\" \/><\/div>\n<\/div>\n<div class=\"col-12 col-md-6 sm-has-layout\">\n<p>During the FEO process, web designers draw a distinction between the perceived and the actual page load time. Perceived load time is considered because of its impact on the overall user experience (UX), while the actual load time is often used as a performance benchmark metric.<\/p>\n<p>Content delivery networks (CDNs) play an important role in the FEO process of front end optimization, as they are commonly used to streamline many of the more time-demanding optimization tasks. For example, a typical CDN offers auto-file compression and auto-minification features, freeing you from having to manually tinker with individual website resources.<\/p>\n<\/div>\n<\/div>\n<div class=\"row custom-row bottom-padding order-12 order-sm-auto\">\n<div class=\"col-12 col-md-6\">\n<div class=\"note-box\">\n<p><strong>Fact:<\/strong> Front end delays comprise up to 80% of your website response time.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"row\">\n<div class=\"col-12 heading-col\">\n<h3>Case in Point: Time to First Byte (TTFB)<\/h3>\n<\/div>\n<\/div>\n<div class=\"row alt-row custom-row\">\n<div class=\"col-12 col-sm-6 alignleft\">\n<p>Time to first byte, often used to measure a website\u2019s response time, is one of the most important\u2014as well as one of the most misunderstood\u2014performance metrics.<\/p>\n<\/div>\n<div class=\"col-12 col-sm-6 col-lg-5 col-xl-6 alignright\">\n<div class=\"image-box\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/bitmap@3x-1.png\" alt=\"Imperva CDN Guide: Case in Point: Time to First Byte (TTFB)\" width=\"561\" height=\"322\" \/><\/div>\n<\/div>\n<div class=\"col-12 col-sm-6 alignleft\">\n<p>From an actual load time perspective, TTFB is the duration it takes for the first data byte to arrive from a server to the requesting browser. From a perceived load time perspective, however, TTFB is the duration it takes for the browser to parse the first byte after downloading the HTML file.<\/p>\n<p>Only perceived TTFB impacts user experience, making it the more valuable of the two metrics.<\/p>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section-main ways-section\">\n<div class=\"row\">\n<div class=\"col-12 text-center\">\n<h2>There are several ways to improve your website responsiveness:<\/h2>\n<ul class=\"ways-list\">\n<li><a href=\"#reducing_http_requests\"><br \/>\n<span class=\"icon-holder\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/gateway-waf@3x.png\" alt=\"Imperva CDN Guide: Reducing HTTP requests\" width=\"86\" height=\"86\" \/><\/span><\/a>\n<h3>Reducing HTTP requests<\/h3><\/li>\n<li><a href=\"#file_compression\"><br \/>\n<span class=\"icon-holder\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/files@3x.png\" alt=\"Imperva CDN Guide: File compression\" width=\"86\" height=\"86\" \/><\/span><\/a>\n<h3>File compression<\/h3><\/li>\n<li><a href=\"#cache_optimization\"><br \/>\n<span class=\"icon-holder\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/caching@3x.png\" alt=\"Imperva CDN Guide: Cache optimization\" width=\"86\" height=\"86\" \/><\/span><\/a>\n<h3>Cache optimization<\/h3><\/li>\n<li><a href=\"#code_minification\"><br \/>\n<span class=\"icon-holder\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/web-browser@3x.png\" alt=\"Imperva CDN Guide: Code minification\" width=\"86\" height=\"86\" \/><\/span><\/a>\n<h3>Code minification<\/h3><\/li>\n<li><a href=\"#image_optimization\"><br \/>\n<span class=\"icon-holder\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/data-masking@3x.png\" alt=\"Imperva CDN Guide: Image optimization\" width=\"86\" height=\"86\" \/><\/span><\/a>\n<h3>Image optimization<\/h3><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section-main\">\n<div class=\"row\">\n<div class=\"col-12 heading-col\">\n<h2 id=\"reducing_http_requests\">Reducing HTTP Requests<\/h2>\n<\/div>\n<\/div>\n<div class=\"row custom-row bottom-padding\">\n<div class=\"col-12 skip-custom position-static\">\n<div class=\"row custom-row align-items-sm-center position-static\">\n<div class=\"col-12 col-sm-6\">\n<p>When loading a web page, a browser has to open a separate TCP connection for each HTTP request made, which is equal to the amount of page elements it\u2019s required to download.<\/p>\n<p>The problem is that there is a limit to the number of concurrent connections a browser can open to a single host. This limit exists to protect a server from being overloaded with a high number of HTTP requests. However, it also serves as a potential bottleneck, often forcing the browser to start queuing connection requests.<\/p>\n<\/div>\n<div class=\"col-12 col-sm-6 col-lg-5 col-xl-6 md-vertical-center text-center\">\n<div class=\"image-box\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/2@3x.png\" alt=\"Imperva CDN Guide: Reducing HTTP Requests\" width=\"377\" height=\"190\" \/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"col-12 col-md-6 has-layout skip-custom-md\">\n<p>As the maximum connection threshold is quickly reached, various FEO techniques are employed to minimize the number of individual page elements. One of the most common is resource consolidation\u2014the practice of bundling together multiple smaller files.<\/p>\n<\/div>\n<\/div>\n<div class=\"row\">\n<div class=\"col-12 heading-col\">\n<h3>For Example\u2026<\/h3>\n<\/div>\n<\/div>\n<div class=\"row alt-row custom-row\">\n<div class=\"col-12 col-md-6 alignleft\">\n<p>Say your website template consists of one HTML file, two CSS files and 16 images\u2014including your logo and various menu backgrounds. In total, a browser needs to make 19 HTTP requests to load an empty page on your site.<\/p>\n<p>A visitor using the Google Chrome browser can only open six TCP connections to your server at once, so the browser has to queue the remaining 13 requests.<\/p>\n<p>However, if you consolidate all of the template images into a single sprite image, you can reduce the number of requests from 19 to just four.<\/p>\n<p>Not only does this let Chrome parse the page in one \u201csitting,\u201d but it reduces the number of round trips needed to load the page.<\/p>\n<\/div>\n<div class=\"col-12 col-md-6 col-lg-5 col-xl-6 alignright text-center\">\n<div class=\"image-box sm-custom-width\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/diagram-44@3x.png\" alt=\"Imperva CDN Guide: Example with\/without sprite image\" width=\"600\" height=\"755\" \/><\/div>\n<\/div>\n<div class=\"col-12 col-xl-6 has-layout\">\n<div class=\"note-box\">\n<div class=\"row\">\n<div class=\"col-12 heading-col\">\n<h3>The CDN Factor<\/h3>\n<\/div>\n<\/div>\n<div class=\"row custom-row\">\n<div class=\"col-12 col-md-6 col-xl-12\">\n<p>CDNs can further reduce server response time by pre-pooling connections and making certain that they remain open throughout a session.<\/p>\n<p>While CDNs don\u2019t reduce the number of requests per se, pre-pooling improves performance by eliminating delay times associated with closing and reopening TCP connections.<\/p>\n<\/div>\n<div class=\"col-12 col-md-6 col-lg-5 col-xl-12\">\n<p><strong>Note:<\/strong> The HTTP\/2 protocol, still in the earlyadoption stage, introduces multiplexing\u2014a connection method that permits multiple requests and responses to be sent via a single TCP connection.<\/p>\n<p>In the near future, this may minimize the benefit of resource bundling.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"file-compression\" class=\"anchor-block\"><\/div>\n<\/section>\n<section class=\"section-main\">\n<div class=\"row\">\n<div class=\"col-12 heading-col\">\n<h2 id=\"file_compression\">File Compression<\/h2>\n<\/div>\n<\/div>\n<div class=\"row custom-row align-items-sm-center align-items-md-start\">\n<div class=\"col-12 col-sm-6\">\n<p>Every one of your website pages is built from a collection of HTML, JavaScript, CSS and (possibly) other code files. The more complex the page, the larger the code files and the longer the load time.<\/p>\n<p>With file compression, these files can be shrunk to a fraction of their original size to improve site responsiveness. Preferred for its quick encoding\/decoding times and high compression rates, <a href=\"\/learn\/performance\/gzip\/\" target=\"_blank\" rel=\"noopener noreferrer\">gzip<\/a> is the most popular file compression choice. It can shrink a code file by as much as 60 or even 80 percent.<\/p>\n<\/div>\n<div class=\"col-12 col-sm-6 col-lg-5 col-xl-6\">\n<div class=\"image-box\"><img loading=\"lazy\" decoding=\"async\" title=\"\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/diagram-45@3x.png\" alt=\"Imperva CDN Guide: File Compression\" width=\"600\" height=\"277\" \/><\/div>\n<\/div>\n<\/div>\n<div class=\"row custom-row align-items-md-start align-items-lg-end\">\n<div class=\"col-12 col-md-6\">\n<p><strong>Note:<\/strong> Gzipping is not effective in reducing image file sizes, as they are already compressed.<\/p>\n<\/div>\n<div class=\"col-12 col-md-6 col-lg-5 col-xl-6\">\n<div class=\"note-box\">\n<h3>The CDN Factor<\/h3>\n<p>Nearly all CDNs provide automated file compression, seamlessly Gzipping all compressible code files (e.g., CSS and JS files) before serving them to website visitors.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section-main\">\n<div class=\"row\">\n<div class=\"col-12 heading-col\">\n<h2 id=\"cache_optimization\">Cache Optimization<\/h2>\n<\/div>\n<\/div>\n<div class=\"row custom-row\">\n<div class=\"col-12 col-md-6\">\n<p><a href=\"\/learn\/performance\/cdn-caching\/#http-cache-headers\" target=\"_blank\" rel=\"noopener noreferrer\">HTTP cache headers<\/a> play an important role in the way browsers parse a website, for they determine which content items are cached and for how long.<\/p>\n<p><a href=\"\/learn\/performance\/cdn-caching\/\" target=\"_blank\" rel=\"noopener noreferrer\">Caching<\/a> is storing your static files, which tend to be your largest ones, outside of your server\u2014either on visitors\u2019 local drives or a nearby CDN PoP. This can vastly improve the website\u2019s load speed.<\/p>\n<p>The downside is that manual cache header management can be a tedious and inefficient task. Moreover, caching mechanisms often run into issues when handling dynamically generated content created on-the-fly as a page begins to load (e.g., AJAX objects and even dynamically generated HTML files).<\/p>\n<div class=\"sm-space-bottom text-center\">\n<div class=\"image-box\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/diagram-46@3x.png\" alt=\"Imperva CDN Guide: Cache Optimization\" width=\"541\" height=\"428\" \/><\/div>\n<\/div>\n<\/div>\n<div class=\"col-12 col-md-6 col-lg-5 col-xl-6\">\n<div class=\"note-box\">\n<h3>The CDN Factor<\/h3>\n<p>Many CDNs offer cache control options, usually by way of a user-friendly dashboard. With it they allow you to set site-wide policies, manage caching rules for individual items and even set policies for entire file groups based on things such as file type and location, (e.g., always cache all images in the \u201c\/blog\/\u201d folder for 60 days).<\/p>\n<p>CDNs have also begun integrating machine learning techniques. These follow content usage patterns to automatically optimize caching policies, thereby caching the typically \u201cuncacheable\u201d dynamic content. This relieves you of nearly all cache management tasks.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section-main\">\n<div class=\"row\">\n<div class=\"col-12 heading-col\">\n<h2 id=\"code_minification\">Code Minification<\/h2>\n<\/div>\n<\/div>\n<div class=\"row alt-row custom-row\">\n<div class=\"col-12 col-md-6 alignleft\">\n<p><a href=\"https:\/\/www.imperva.com\/learn\/performance\/minification\/\" target=\"_blank\" rel=\"noopener noreferrer\">Minification<\/a> is an FEO process that recognizes the difference between how developers write code and how machines read it.<\/p>\n<p>The idea is that\u2014while developers write code for easy reading comprehension, with spaces, line breaks and comments\u2014machines can read it without any of these elements, making them nonessential characters<\/p>\n<p>Minification trims code to its barest essentials, often reducing it by half before compression.<\/p>\n<\/div>\n<div class=\"col-12 col-md-6 col-lg-5 col-xl-6 alignright\">\n<figure class=\"figure-block\"><span class=\"figure-holder\"><span class=\"figure-holder\"><code>\/ * I\u2019m Just a Code Comment on Minif ication Example *\/<br \/>\nVar minifyExampIe = function ( ) {<br \/>\nfill(0, 0, 0);<br \/>\ntext( \"Minification makes code smaller without changing its behavior\u201d, 100, 100);<br \/>\n};<\/code><\/span><\/span><figcaption>Before minification (201 characters)<\/figcaption><\/figure>\n<figure class=\"figure-block\"><span class=\"figure-holder\"><code>Var minifyExampIe = function ( ) { fill(0, 0, 0); text( \"Minification makes code smaller without changing its behavior\u201d, 100, 100);};minifyExample();<\/code><\/span><figcaption>After minification (137 characters) = File size decreased by over 30%<\/figcaption><\/figure>\n<\/div>\n<div class=\"col-12 col-md-6 has-layout\">\n<div class=\"note-box\">\n<h3>The CDN Factor<\/h3>\n<p>CDNs have the capacity to completely automate code minification. As an on-edge service, already serving much of a site\u2019s content, it\u2019s very easy for CDNs to minify all JavaScript, HTML and CSS files on-the-fly, as they\u2019re being sent to visitors\u2019 browsers.<\/p>\n<p><strong>Gzip AND Minify:<\/strong> While minifying and gzipping code may seem redundant, combining both methods offers the best results.<\/p>\n<p>Thus, minifying files before you gzip them will shrink the tarfile size by an additional 5 to 10 percent.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section-main\">\n<div class=\"row\">\n<div class=\"col-12 heading-col\">\n<h2 id=\"image_optimization\">Image Optimization<\/h2>\n<\/div>\n<\/div>\n<div class=\"row alt-row custom-row bottom-padding\">\n<div class=\"col-12 col-sm-6 alignleft\">\n<p>Caching and compression are the two most common <a href=\"\/learn\/performance\/image-optimization\/\" target=\"_blank\" rel=\"noopener noreferrer\">image optimization<\/a> methods, with caching being the more effective of the two. This is because, unlike code files, all image formats are already compressed.<\/p>\n<p>As a result, to further reduce image file size, you have to tamper with that image\u2019s data, either by removing some of the header information or by reducing the original image quality. This is known as lossy compression.<\/p>\n<p><strong>Note:<\/strong> While discarding data and diminishing resolution is often unadvised, lossy compression can be useful for some high-resolution images, because our eyes can\u2019t naturally perceive the full range of visual information such images hold.<\/p>\n<p>For example, lossy compression can remove color gradations and reduce pixel complexity without noticeably affecting our perception of the image.<\/p>\n<\/div>\n<div class=\"col-12 col-sm-6 col-lg-5 col-xl-6 alignright\">\n<figure class=\"figure-block\"><span class=\"figure-holder\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/bitmap-copy-4@3x.png\" alt=\"Imperva CDN Guide: Image Optimization before compression\" width=\"540\" height=\"359\" \/><\/span><figcaption>Before compression: 72kb<\/figcaption><\/figure>\n<figure class=\"figure-block\"><span class=\"figure-holder\"><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/bitmap-copy-2@3x.png\" alt=\"Imperva CDN Guide: Image Optimization after compression\" width=\"540\" height=\"359\" \/><\/span><figcaption>After compression: 14.7kb<\/figcaption><\/figure>\n<\/div>\n<div class=\"col-12 col-xl-6 has-layout\">\n<div class=\"note-box\">\n<div id=\"progressive-rendering\" class=\"anchor-block\"><\/div>\n<div class=\"row\">\n<div class=\"col-12 heading-col\">\n<h3>The CDN Factor<\/h3>\n<\/div>\n<\/div>\n<div class=\"row align-items-center\">\n<div class=\"col-12 col-lg-6 col-xl-12\">\n<div class=\"row\">\n<div class=\"col-12 col-md-6 col-lg-12\">\n<p>CDNs, the go-to solution for image caching, are often purchased for that purpose alone. Furthermore, some CDNs also help automate the process of image compression, letting you choose between page load speed and image quality.<\/p>\n<p><a href=\"\/products\/cdn-content-delivery-network\/\">More advanced CDNs<\/a> also offer a progressive rendering option, putting a twist on the original lossy compression concept. With progressive rendering, the CDN quickly loads a pixelated version of the image.<\/p>\n<\/div>\n<div class=\"col-12 col-md-6 col-lg-12\">\n<p>The CDN then progressively replaces it with a series of progressively better-and-better looking variants until the actual image is ready to load.<\/p>\n<p>Progressive rendering is useful for its ability to diminish perceived load time without sacrificing image quality.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"col-12 col-lg-6 col-xl-12 skip-custom\">\n<div class=\"photo-wrap\">\n<div class=\"photos-holder\"><img loading=\"lazy\" decoding=\"async\" class=\"d-none d-sm-block\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/bitmap@3x-2.png\" alt=\"Imperva CDN Guide: The CDN Factor\" width=\"470\" height=\"218\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"d-sm-none\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/parrot-gif.gif\" alt=\"Imperva CDN Guide: The CDN Factor in gif format\" width=\"470\" height=\"372\" \/><\/div>\n<ul class=\"note-list\">\n<li>After 15 ms<\/li>\n<li>After 45 ms<\/li>\n<li>After 90 ms &#8211; image in full resolution<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"row\">\n<div class=\"col-12 heading-col\">\n<h3>Vector and Raster Images<\/h3>\n<\/div>\n<\/div>\n<div class=\"row custom-row align-items-center\">\n<div class=\"col-12 col-sm-6\">\n<p>Another image optimization technique is to replace some of your regular (raster) images with their vector counterparts.<\/p>\n<p>This technique is applicable to images composed of simple geometric shapes: lines, curves, polygons etc. A typical vector image is an icon or a diagram.<\/p>\n<p>You should use vector images whenever you can, because:<\/p>\n<p>They are very small in size, as they only need to hold data for a set of coordinates\u2014not for each individual pixel.<\/p>\n<p>Being resolution-independent, they\u2019re able to be zoomed in and out indefinitely, without any impact on quality. This makes them perfect for responsive designs.<\/p>\n<\/div>\n<div class=\"col-12 col-sm-5 col-md-6 col-lg-5 col-xl-6\">\n<div class=\"image-box\"><img loading=\"lazy\" decoding=\"async\" class=\"d-sm-none d-md-block\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/diagram-47@3x.png\" alt=\"Imperva CDN Guide: Vector and Raster Images\" width=\"577\" height=\"317\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"d-none d-sm-block d-md-none\" src=\"\/wp-content\/uploads\/sites\/13\/2020\/03\/vertical@3x.png\" alt=\"Imperva CDN Guide: Vector and Raster Images in vertical view\" width=\"280\" height=\"482\" \/><\/div>\n<\/div>\n<\/div>\n<\/section>\n<div class=\"row\">\n<div class=\"col-12\">\n<nav class=\"nav-pagination sub\">\n<h3>Next:<\/h3>\n<div class=\"nav-element\"><span class=\"title-item\">Chapter 5:<\/span><a href=\"\/learn\/performance\/cdn-and-ssl-tls\/\">CDN and SSL\/TLS &gt;<\/a><\/div>\n<\/nav>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"featured_media":1507,"menu_order":0,"template":"","categories":[7],"class_list":["post-445","performance","type-performance","status-publish","has-post-thumbnail","hentry","category-cdn-guide"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Front End Optimization (FEO) | CDN Guide | Imperva<\/title>\n<meta name=\"description\" content=\"FEO focuses on reducing file sizes and minimizing the number of requests needed for a given page to load. Discover ways to improve your website responsiveness.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Front End Optimization (FEO) | CDN Guide | Imperva\" \/>\n<meta property=\"og:description\" content=\"FEO focuses on reducing file sizes and minimizing the number of requests needed for a given page to load. Discover ways to improve your website responsiveness.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/\" \/>\n<meta property=\"og:site_name\" content=\"Learning Center\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-14T10:52:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.imperva.com\/learn\/wp-content\/uploads\/sites\/13\/2020\/03\/bitmap@3x.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1695\" \/>\n\t<meta property=\"og:image:height\" content=\"1170\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"11 minutes\" \/>\n\t<meta name=\"twitter:label2\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data2\" content=\"Roee Aharoni\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/\",\"url\":\"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/\",\"name\":\"Front End Optimization (FEO) | CDN Guide | Imperva\",\"isPartOf\":{\"@id\":\"https:\/\/www.imperva.com\/learn\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.imperva.com\/learn\/wp-content\/uploads\/sites\/13\/2020\/03\/bitmap@3x.png\",\"datePublished\":\"2019-03-18T08:12:10+00:00\",\"dateModified\":\"2023-08-14T10:52:25+00:00\",\"description\":\"FEO focuses on reducing file sizes and minimizing the number of requests needed for a given page to load. Discover ways to improve your website responsiveness.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/#primaryimage\",\"url\":\"https:\/\/www.imperva.com\/learn\/wp-content\/uploads\/sites\/13\/2020\/03\/bitmap@3x.png\",\"contentUrl\":\"https:\/\/www.imperva.com\/learn\/wp-content\/uploads\/sites\/13\/2020\/03\/bitmap@3x.png\",\"width\":1695,\"height\":1170,\"caption\":\"bitmap@3x\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.imperva.com\/learn\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Performance\",\"item\":\"https:\/\/www.imperva.com\/learn\/performance\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Front End Optimization\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.imperva.com\/learn\/#website\",\"url\":\"https:\/\/www.imperva.com\/learn\/\",\"name\":\"Learning Center\",\"description\":\"Imperva\",\"publisher\":{\"@id\":\"https:\/\/www.imperva.com\/learn\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.imperva.com\/learn\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.imperva.com\/learn\/#organization\",\"name\":\"Imperva Inc\",\"url\":\"https:\/\/www.imperva.com\/learn\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.imperva.com\/learn\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.imperva.com\/learn\/wp-content\/uploads\/sites\/13\/2023\/06\/Linkedin-FB-OG-sharing.jpeg\",\"contentUrl\":\"https:\/\/www.imperva.com\/learn\/wp-content\/uploads\/sites\/13\/2023\/06\/Linkedin-FB-OG-sharing.jpeg\",\"width\":1200,\"height\":627,\"caption\":\"Imperva Inc\"},\"image\":{\"@id\":\"https:\/\/www.imperva.com\/learn\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Front End Optimization (FEO) | CDN Guide | Imperva","description":"FEO focuses on reducing file sizes and minimizing the number of requests needed for a given page to load. Discover ways to improve your website responsiveness.","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:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/","og_locale":"en_US","og_type":"article","og_title":"Front End Optimization (FEO) | CDN Guide | Imperva","og_description":"FEO focuses on reducing file sizes and minimizing the number of requests needed for a given page to load. Discover ways to improve your website responsiveness.","og_url":"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/","og_site_name":"Learning Center","article_modified_time":"2023-08-14T10:52:25+00:00","og_image":[{"width":1695,"height":1170,"url":"https:\/\/www.imperva.com\/learn\/wp-content\/uploads\/sites\/13\/2020\/03\/bitmap@3x.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"11 minutes","Written by":"Roee Aharoni"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/","url":"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/","name":"Front End Optimization (FEO) | CDN Guide | Imperva","isPartOf":{"@id":"https:\/\/www.imperva.com\/learn\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/#primaryimage"},"image":{"@id":"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/#primaryimage"},"thumbnailUrl":"https:\/\/www.imperva.com\/learn\/wp-content\/uploads\/sites\/13\/2020\/03\/bitmap@3x.png","datePublished":"2019-03-18T08:12:10+00:00","dateModified":"2023-08-14T10:52:25+00:00","description":"FEO focuses on reducing file sizes and minimizing the number of requests needed for a given page to load. Discover ways to improve your website responsiveness.","breadcrumb":{"@id":"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/#primaryimage","url":"https:\/\/www.imperva.com\/learn\/wp-content\/uploads\/sites\/13\/2020\/03\/bitmap@3x.png","contentUrl":"https:\/\/www.imperva.com\/learn\/wp-content\/uploads\/sites\/13\/2020\/03\/bitmap@3x.png","width":1695,"height":1170,"caption":"bitmap@3x"},{"@type":"BreadcrumbList","@id":"https:\/\/www.imperva.com\/learn\/performance\/front-end-optimization-feo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.imperva.com\/learn\/"},{"@type":"ListItem","position":2,"name":"Performance","item":"https:\/\/www.imperva.com\/learn\/performance\/"},{"@type":"ListItem","position":3,"name":"Front End Optimization"}]},{"@type":"WebSite","@id":"https:\/\/www.imperva.com\/learn\/#website","url":"https:\/\/www.imperva.com\/learn\/","name":"Learning Center","description":"Imperva","publisher":{"@id":"https:\/\/www.imperva.com\/learn\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.imperva.com\/learn\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.imperva.com\/learn\/#organization","name":"Imperva Inc","url":"https:\/\/www.imperva.com\/learn\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.imperva.com\/learn\/#\/schema\/logo\/image\/","url":"https:\/\/www.imperva.com\/learn\/wp-content\/uploads\/sites\/13\/2023\/06\/Linkedin-FB-OG-sharing.jpeg","contentUrl":"https:\/\/www.imperva.com\/learn\/wp-content\/uploads\/sites\/13\/2023\/06\/Linkedin-FB-OG-sharing.jpeg","width":1200,"height":627,"caption":"Imperva Inc"},"image":{"@id":"https:\/\/www.imperva.com\/learn\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.imperva.com\/learn\/wp-json\/wp\/v2\/performance\/445","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.imperva.com\/learn\/wp-json\/wp\/v2\/performance"}],"about":[{"href":"https:\/\/www.imperva.com\/learn\/wp-json\/wp\/v2\/types\/performance"}],"version-history":[{"count":13,"href":"https:\/\/www.imperva.com\/learn\/wp-json\/wp\/v2\/performance\/445\/revisions"}],"predecessor-version":[{"id":2717,"href":"https:\/\/www.imperva.com\/learn\/wp-json\/wp\/v2\/performance\/445\/revisions\/2717"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.imperva.com\/learn\/wp-json\/wp\/v2\/media\/1507"}],"wp:attachment":[{"href":"https:\/\/www.imperva.com\/learn\/wp-json\/wp\/v2\/media?parent=445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.imperva.com\/learn\/wp-json\/wp\/v2\/categories?post=445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}