Title: featuremonkey's Replies | WordPress.org

---

# featuremonkey

  [  ](https://wordpress.org/support/users/featuremonkey/)

 *   [Profile](https://wordpress.org/support/users/featuremonkey/)
 *   [Topics Started](https://wordpress.org/support/users/featuremonkey/topics/)
 *   [Replies Created](https://wordpress.org/support/users/featuremonkey/replies/)
 *   [Reviews Written](https://wordpress.org/support/users/featuremonkey/reviews/)
 *   [Topics Replied To](https://wordpress.org/support/users/featuremonkey/replied-to/)
 *   [Engagements](https://wordpress.org/support/users/featuremonkey/engagements/)
 *   [Favorites](https://wordpress.org/support/users/featuremonkey/favorites/)

 Search replies:

## Forum Replies Created

Viewing 15 replies - 1 through 15 (of 18 total)

1 [2](https://wordpress.org/support/users/featuremonkey/replies/page/2/?output_format=md)
[→](https://wordpress.org/support/users/featuremonkey/replies/page/2/?output_format=md)

 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[WooCommerce] Local Attribute Removal](https://wordpress.org/support/topic/local-attribute-removal/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [2 years, 5 months ago](https://wordpress.org/support/topic/local-attribute-removal/#post-17269818)
 * > [https://wordpress.org/support/topic/how-to-delete-all-product-attributes/](https://wordpress.org/support/topic/how-to-delete-all-product-attributes/)
   >  xue28
 * I don’t want to delete all product attributes.
 * I want to delete all **local product attributes with a specified name**.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[ShortPixel Adaptive Images - WebP, AVIF, CDN, Image Optimization] 307 Fallback Strategy](https://wordpress.org/support/topic/307-fallback-strategy/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [2 years, 7 months ago](https://wordpress.org/support/topic/307-fallback-strategy/#post-17154207)
 * Thanks for the detailed response.
 * > Why would the image already be resized and compressed?
   >  pedro
 * The image would be resized and compressed on the origin server so when ShortPixel
   returns 307 on first load, the image isn’t large for that user. You stated that
   using the “lossless compression” with ShortPixel ensures that compressed images
   are detected, so no compression-on-compression issues occur.
 * > And this is pretty much what we have done with another plugin of ours, called
   > [FastPixel](https://fastpixel.io/),
   >  pedro
 * **Can I use “automatic cache warm-up” for solely images with FastPixel? **
 * **Does it store the warmed-up (“optimized”) images on the CDN before image is
   accessed by a visitor?**
 * > I encourage you to test it and let us know if it meets your expectations.
   >  pedro
 * I ran the test on a website and using ShortPixel CDN with its configuration has
   a higher score ( 584 ms speed) than the FastPixel test website ( 1.0 second )
   due to TTFB (683 ms on FastPixel vs. 38 ms on original) . However, cached page
   size of FastPixel is only 51.1KB on load, while the original website is 468KB
   on load.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Adaptive Images for WordPress] How does it work vs. srcset?](https://wordpress.org/support/topic/how-does-it-work-vs-srcset/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [2 years, 7 months ago](https://wordpress.org/support/topic/how-does-it-work-vs-srcset/#post-17154150)
 * **Here is an analysis of the above statement involving srcset.**
 * > not all srcsets are defined correctly [1] and not all srcsets are close to 
   > all device sizes [2]
   >  takis
 * Given that each approach uses breakpoints, there is no difference in the closeness
   of srcset vs. adaptive images with respect to the device size.
 * > Configure the `$resolutions` variable at the top of the `adaptive-images.php`
   > file to match the breakpoints you are using for your designs.
   > …
   > Set breakpoints to match your CSS’s Media Queries $resolutions = array(1382,
   > 992, 768, 480);
   >  [https://adaptive-images.com/details.htm#:~:text=working%20with%20WordPress-,Installation,-For%20Apache%3A](https://adaptive-images.com/details.htm#:~:text=working%20with%20WordPress-,Installation,-For%20Apache%3A)
 * Therefore, the difference between srcset and adaptive images is that srcset requires
   images to exist on the server before they are requested without JS, while adaptive
   images generates images “on-the-fly” using JS.
 * —
 * Boht srcset and adaptive images do not address when the browser window is resized
   without further configuration.
 * > Adaptive Images does NOT work on your browser window size, resizing your browser
   > will have no effect on the size of images that are downloaded. It works on 
   > the screen size.
   >  [https://adaptive-images.com/details.htm#:~:text=won%E2%80%99t%20be%20sent.-,Common%20Questions,-There%20are%20a](https://adaptive-images.com/details.htm#:~:text=won%E2%80%99t%20be%20sent.-,Common%20Questions,-There%20are%20a)
 * srcset can account for this behavior when it is defined to correctly use the 
   [viewport width vs. screen size](https://stackoverflow.com/questions/73927187/difference-between-viewport-size-and-screen-size)
   with a `<picture>` tag.
    - [https://stackoverflow.com/questions/29346692/srcset-and-viewport-width](https://stackoverflow.com/questions/29346692/srcset-and-viewport-width)
    - [https://stackoverflow.com/questions/69035485/img-srcset-doesnt-scale-down-when-viewport-shrinks](https://stackoverflow.com/questions/69035485/img-srcset-doesnt-scale-down-when-viewport-shrinks)
    - [https://www.smashingmagazine.com/2013/06/clown-car-technique-solving-for-adaptive-images-in-responsive-web-design/](https://www.smashingmagazine.com/2013/06/clown-car-technique-solving-for-adaptive-images-in-responsive-web-design/)
 * adaptive images technique requires execution of JavaScript to detect when the
   user has resized image beyond a given breakpoint.
    - [https://sirv.com/help/articles/when-to-use-src-srcset-data-src/](https://sirv.com/help/articles/when-to-use-src-srcset-data-src/)
    - [https://sirv.com/help/articles/responsive-imaging/#resize-step](https://sirv.com/help/articles/responsive-imaging/#resize-step)
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Adaptive Images for WordPress] How does it work vs. srcset?](https://wordpress.org/support/topic/how-does-it-work-vs-srcset/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [2 years, 7 months ago](https://wordpress.org/support/topic/how-does-it-work-vs-srcset/#post-17154116)
 * **Here is more context to the above response.**
 * The use of “a cookie set by JS” indicates that — without further specification
   from the plugin developer — this plugin is using the implementation of Adaptive
   Images listed here: [https://adaptive-images.com/details.htm](https://adaptive-images.com/details.htm)
 * >  1. The HTML starts to load in the browser and a snippet of JS in the <head> writes
   >     a session cookie, storing the visitor’s screen size in pixels.
   >  2. The browser then encounters an <img> tag and sends a request to the server
   >     for that image. It also sends the cookie, because that’s how browsers work.
   >  3. Apache receives the request for the image and immediately has a look in the
   >     website’s .htaccess file, to see if there are any special instructions for
   >     serving files.
   >  4. There are! The .htaccess says “Dear server, any request you get for a JPG,
   >     GIF, or PNG file please send to the adaptive-images.php file instead.”
   > The PHP file then does some intelligent thinking which can cover a number of
   > scenario’s but I’ll illustrate one path that can happen:
   >  1. The PHP file looks for a cookie and finds that the user has a maximum screen
   >     size of 480px.
   >  2. It compares the cookie value with all `$resolution` sizes that were configured,
   >     and decides which matches best. In this case, an image maxing out at 480px
   >     wide.
   >  3. It then has a look inside the `/ai-cache/480/` folder to see if a rescaled
   >     image already exists.
   >  4. We’ll pretend it doesn’t – the PHP then goes to the actual requested URI to
   >     find the original file.
   >  5. It checks the image width. If that’s smaller than the user’s screen width 
   >     it sends the image.
   >  6. If it’s larger, the PHP creates a down-scaled copy and saves that into the`/
   >     ai-cache/480/` folder ready for the next time it’s needed, and sends it to
   >     the user.
   >  _[https://adaptive-images.com/details.htm](https://adaptive-images.com/details.htm)_
 * **So, the failure state with this plugin and external CDN’s is present when the
   following detail isn’t implemented. **
 * > It [the origin server] sends images with a cache header that tells proxies [
   > CDN’s] not to cache the image whilst telling browsers they should. This avoids
   > problems with proxy servers and network caching systems grabbing the wrong 
   > image and storing it.
   >  [https://adaptive-images.com/details.htm#:~:text=the%20approach.-,How%20it%20works,-Adaptive%20Images%20does](https://adaptive-images.com/details.htm#:~:text=the%20approach.-,How%20it%20works,-Adaptive%20Images%20does)
 * Unfortunately, this behavior defeats the point of using adaptive images on the
   origin server, since a CDN that receives no-cache header for images will always
   pass image requests to the origin server (which increases latency of the system).
 * The above scenario results in a website that is likely to be slower than a website
   that just serves a single image file — however large — from a CDN directly; due
   to the increase in latency (from the delivery of the image from the origin server).
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[LiteSpeed Cache] How to Enable WooCommerce AJAX Cart Caching?](https://wordpress.org/support/topic/enable-woocommerce-cart-caching/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [2 years, 7 months ago](https://wordpress.org/support/topic/enable-woocommerce-cart-caching/#post-17145404)
 * > not exactly sure what is your question , do you want to cache my-account/cart/
   > checkout page or something ?
   >  qtwrk
 * No, but will LSCache prevent the caching of any page with the AJAX Cart on it?
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[LiteSpeed Cache] How to Enable WooCommerce AJAX Cart Caching?](https://wordpress.org/support/topic/enable-woocommerce-cart-caching/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [2 years, 7 months ago](https://wordpress.org/support/topic/enable-woocommerce-cart-caching/#post-17145403)
 * The initial statement of this forum post is incorrect without a significant amount
   of resources. However, it would be interesting to let people create cache varies
   based on cookie conditions.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[LiteSpeed Cache] How to Enable WooCommerce AJAX Cart Caching?](https://wordpress.org/support/topic/enable-woocommerce-cart-caching/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [2 years, 7 months ago](https://wordpress.org/support/topic/enable-woocommerce-cart-caching/#post-17142187)
 * Yes, I have the AJAX Cart.
 * How do I ensure that LightSpeed Cache still caches pages with the WooCommerce
   Cart cookie since caching those pages (with the WooCommerce Cart cookie) is disabled
   by LSCache by default?
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[LiteSpeed Cache] Cache Vary Groups Behavior](https://wordpress.org/support/topic/cache-vary-groups-behavior/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [2 years, 7 months ago](https://wordpress.org/support/topic/cache-vary-groups-behavior/#post-17137590)
 * > > If so, how do you configure QC to — instead of filling the template — just
   > > store 3 page objects (one for each role), and serve those pages accordingly
   > > without hitting origin server?
   > >  featuremonkey
   > I am not exactly sure if I understand the question
   >  qtwrk
 * Suppose that you have 3 + 1 roles:
    - Admin
    - Member A
    - Member B
    - (guest)
 * There is a page (with path /a-post ) with content that can be seen by both Admin
   and Member A, but not Member B or guest users.
 * When ESI is enabled, QC is still required to store lots of cache block objects
   for the page template (“public cache”; one for each role) and each user login(“
   private cache”; one for each logged-in user), then piece them together into a
   final page that is delivered to browser. However, this overhead is unnecessary
   in this scenario.
 * Instead, QC **could theoretically** generate 2 – 4 pages without ESI enabled 
   for less overhead:
    - Page (of path /a-post) output for Admin Role, Member A
    - Page (of path /a-post) output of Member B, guest
 * _*2 pages since the content has 2 variations; one for administrators and A members,
   one for B members or guests._
 * This theoretical setup only requires QC to store 2 pages (of path /a-post), instead
   of the discussed configurations where
    - ESI Disabled, Cache Vary Disabled: 1 “public” page for guests, with thousands
      of “private” DUPLICATED pages (one for each user).
    - ESI Disabled, Cache Vary Enabled: 4 useless “public” pages are created for
      each role, with thousands of “private” DUPLICATED pages (one for each user).
    - ESI Enabled, Cache Vary Enabled: 4 “public” pages are created for each role,
      with thousands of “private” DUPLICATED esi blocks for each user, which are
      then formatted into a final page upon request.
 * So instead of storing thousands of duplicated cache objects with those configurations,“
   how do you configure QC to only store the 2 – 4 final cache page objects (one
   for each role = 4; or one for users with the right cookie and one for users without
   the right cookie = 2)” for the same path (example /a-post), and serve the correct
   page object accordingly without hitting origin server?
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[LiteSpeed Cache] Cache Vary Groups Behavior](https://wordpress.org/support/topic/cache-vary-groups-behavior/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [2 years, 7 months ago](https://wordpress.org/support/topic/cache-vary-groups-behavior/#post-17137243)
 * > the login status is stored in cookie , so QC will check the cookie value as
   > authentication , if this private cache is stored on QC already , then no hit
   > on origin , if it was not , or expired , then hit origin.
   >  qtwrk
 * This information contradicts what you said 2 months ago in this [forum post](https://wordpress.org/support/topic/membership-cache-configuration/).
 * > > How to perform authentication from the CDN level (without involving host 
   > > server)?
   > >  featuremonkey
   > well, this is NOT possible , CDN is only a reverse proxy server + caching ,
   > it does NOT carry any PHP script of your site.
   >  qtwrk
 * **Moving forward**, you have stated that the user must enable ESI to configure
   QC to store 3 pages (one for each role) in addition to the public cache page.
   However, the behavior you have provided does not match the behavior I am requesting.
 * > if you enable ESI , the page for login user , on same group , will have one“
   > login-user’s public cache” , and utilize ESI block to fill in the rest
   >  qtwrk
 * So with ESI enabled, there will be two objects on QC (after the origin is visited):
   Public and Private Cache. When a logged-in user visits the website, QC takes 
   the cookie to verify that user’s status, then takes the template private cache
   and fills it with an ESI block.
 * And that ESI block (e.g., headline for a logged-in role) is also stored on QC,
   so then QC doesn’t hit origin server to “fill” the page.
 * **Is that correct?**
 * If so, how do you configure QC to — instead of filling the template — just store
   3 page objects (one for each role), and serve those pages accordingly without
   hitting origin server?
 * > this pub cache , presumably will be stored on QC , but for ESI blocks , it 
   > will be same case as aforementioned private cache situation.
   >  qtwrtk
 * The public cache you refer to is the “Private Cache” of all logged-in users with
   ESI enabled. So, does this statement mean that
    1. ESI blocks will be cached per user (i.e 1000 esi cache block objects) on origin
       and QC?
    2. ESI Blocks will be cached per role (i.e 3 esi cache blocks objects) on origin
       and QC?
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[LiteSpeed Cache] Cache Vary Groups Behavior](https://wordpress.org/support/topic/cache-vary-groups-behavior/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [2 years, 7 months ago](https://wordpress.org/support/topic/cache-vary-groups-behavior/#post-17137086)
 * > the cache is always generated from origin , and then it will be stored at QC
   > and origin
 * So QC will perform authentication for logged-in user on private cache page to
   serve private cache page without hitting origin?
 * How do you configure QC to store 3 pages (one for each role) in addition to the
   public cache page?
 * You must enable ESI?
 * If I enable ESI, then it only stores a section of the page and always hits origin
   server for rest? Or does it store everything on QC, then create the template 
   in QC?
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[LiteSpeed Cache] Cache Vary Groups Behavior](https://wordpress.org/support/topic/cache-vary-groups-behavior/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [2 years, 7 months ago](https://wordpress.org/support/topic/cache-vary-groups-behavior/#post-17137040)
 * Is the private cache served from the origin or QUIC.cloud CDN?
 * > when its login users , no matter what group this user belongs to , it has its
   > own private cache.
 * LightSpeed Cache states “When a page is privately-cached, there is a separate
   personalized copy stored for each user that requests it.”
    - [https://blog.litespeedtech.com/2017/08/30/wpw-private-cache-vs-public-cache/](https://blog.litespeedtech.com/2017/08/30/wpw-private-cache-vs-public-cache/)
 * Suppose that ESI is disabled and a cache vary is configured for three roles with
   1000 users.
    - Does this configuration store 1000 pages (one for each user) or does it store
      3 pages (one for each role) in addition to the public cache page.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Advanced AJAX Product Filters] Category Filter: Hierarchichal Child Limit](https://wordpress.org/support/topic/category-filter-hierarchichal-child-limit/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [2 years, 8 months ago](https://wordpress.org/support/topic/category-filter-hierarchichal-child-limit/#post-17052275)
 * If this feature will not be implemented by the plugin, please define where the
   file and function that controls this behavior is located for a custom code implementation.
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder] Defer Captcha Load To Viewport](https://wordpress.org/support/topic/defer-captcha-load-to-viewport/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [3 years, 3 months ago](https://wordpress.org/support/topic/defer-captcha-load-to-viewport/#post-16537420)
 * How to suggest this feature?
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Broken Link Checker] Feature Request: URL Target Column](https://wordpress.org/support/topic/feature-request-url-target-column/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [3 years, 3 months ago](https://wordpress.org/support/topic/feature-request-url-target-column/#post-16537401)
 * .
 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[Admin Columns] Change Separator of Custom Field Type Posts](https://wordpress.org/support/topic/change-separator-of-custom-field-type-posts/)
 *  Thread Starter [featuremonkey](https://wordpress.org/support/users/featuremonkey/)
 * (@featuremonkey)
 * [3 years, 3 months ago](https://wordpress.org/support/topic/change-separator-of-custom-field-type-posts/#post-16537388)
 * I change CSS class **.ac-divider** `display` property from `inline-block` to `
   block` in `assets/css/table.css` of Plugin File Editor: Admin Columns.

Viewing 15 replies - 1 through 15 (of 18 total)

1 [2](https://wordpress.org/support/users/featuremonkey/replies/page/2/?output_format=md)
[→](https://wordpress.org/support/users/featuremonkey/replies/page/2/?output_format=md)