Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Product Filters > Fix Performance issue and Fatal error on stores with a high volume of products #10198

Merged
merged 2 commits into from
Jul 14, 2023

Conversation

nefeline
Copy link
Contributor

@nefeline nefeline commented Jul 13, 2023

This PR fixes the issue initially reported on pdnLyh-3VR-p2 by removing the SQL queries used to manipulate the product counts for filters in particular cases. These queries were triggered for 100% of the stores using the Products (Beta) or the Product Collection blocks, independent of their usage of the Product Filters. Consequently, they negatively affected all stores' performance and triggered memory exhaustion errors for big e-commerces with thousands of products.

What these queries were used for?

A practical use-case example is: when adding the Products (beta) block on any post or page, it is possible to edit a setting under "Advanced Filters" that allows you to handpick specific products for display instead of showing all of them by default:

Screenshot 2023-07-13 at 19 33 58

If any user decided to use the Filter by Attribute, Filter by Rating, or the Filter by Stock blocks with the filter counts enabled (they are disabled by default) alongside the Products (Beta) block that is just rendering a handful of products, these queries would manipulate the product counts to match the displayed products, and not all available products in the store right before rendering the block.

In other words, these queries were modifying the native behavior of the filter counts, and as a consequence, they were not aligned with the design decisions made a few cycles ago. With the changes introduced here, all filter counts now provide the same functionality across the board, independent of their use cases.

Discussion

There's an ongoing internal discussion, opened by @kmanijak, to gather feedback from the design team in case we wanna open an exception for this use case in particular and deviate from the design decision made previously. Depending on the outcome of that discussion, more changes will follow. (ref. per0F9-Rh-p2 )

Its also important to note that these queries are not necessary for maintaining the functionality of the filters or the filter counts; the get_attribute_counts method is.

User Facing Testing

  1. Make sure you have products in your store with attributes and stock status (You can do so by simply importing the sample products from the core of Woo).
  2. Create a new post.
  3. Insert the Products (Beta) block.
  4. Insert the Filter by Attribute, Filter by Stock and Filter by Price
  5. Make sure all filters have the "Display product count" setting enabled (it is disabled by default).
Screenshot 2023-07-13 at 20 09 31
  1. Save the post and go to the front-end
  2. Make sure you can use all filters as expected and without any problems/errors: the product counts should match the number of existing products in the store with the filtered criteria, not just what is displayed on the page.
  3. Repeat all steps from 2 to 7, but using the Products Collection block instead of Products (beta). Make sure all filters work as expected.

WooCommerce Visibility

  • WooCommerce Core
  • Feature plugin
  • Experimental

Performance Impact

This update will positively impact performance as two heavy queries were removed from the codebase. Stores with a high volume of products should be able to use the Products Collection and Products (Beta) blocks without risking having memory exhaustion errors as a consequence.

Changelog

Improve performance and fix memory exhaustion errors that could be triggered for stores with a high volume of products using the Products (Beta) or Products Collection blocks.

…eturned by the Store API for certain use-cases.
@woocommercebot woocommercebot requested review from a team and thealexandrelara and removed request for a team July 13, 2023 18:24
@nefeline nefeline self-assigned this Jul 13, 2023
@nefeline nefeline added the type: bug The issue/PR concerns a confirmed bug. label Jul 13, 2023
@github-actions
Copy link
Contributor

github-actions bot commented Jul 13, 2023

The release ZIP for this PR is accessible via:

https://wcblocks.wpcomstaging.com/wp-content/uploads/woocommerce-gutenberg-products-block-10198.zip

Script Dependencies Report

There is no changed script dependency between this branch and trunk.

This comment was automatically generated by the ./github/compare-assets action.

TypeScript Errors Report

  • Files with errors: 468
  • Total errors: 2243

🎉 🎉 This PR does not introduce new TS errors.

comments-aggregator

@nefeline nefeline added block: all products Issues related to the all products block. focus: performance The issue/PR is related to performance. labels Jul 13, 2023
@nefeline nefeline requested review from imanish003 and kmanijak July 13, 2023 18:31
@github-actions
Copy link
Contributor

github-actions bot commented Jul 13, 2023

Size Change: +3.05 kB (0%)

Total Size: 1.36 MB

Filename Size Change
build/active-filters-wrapper--mini-cart-contents-block/cart-button--mini-cart-contents-block/checkout-but--3d5b804b-style.js 0 B -959 B (removed) 🏆
build/active-filters-wrapper-frontend.js 7.64 kB -4 B (0%)
build/active-filters.js 7.59 kB -5 B (0%)
build/all-products-frontend.js 12.3 kB +49 B (0%)
build/all-products.js 41.5 kB +304 B (+1%)
build/attribute-filter-wrapper-frontend.js 7.79 kB -1 B (0%)
build/attribute-filter.js 13.3 kB -6 B (0%)
build/breadcrumbs.js 2.14 kB +2 B (0%)
build/cart-blocks/cart-accepted-payment-methods-frontend.js 1.38 kB +1 B (0%)
build/cart-blocks/cart-cross-sells-products--product-price-frontend.js 2.91 kB +1 B (0%)
build/cart-blocks/cart-cross-sells-products-frontend.js 3.83 kB +3 B (0%)
build/cart-blocks/cart-cross-sells-style.js 252 B -1 B (0%)
build/cart-blocks/cart-express-payment-frontend.js 720 B -1 B (0%)
build/cart-blocks/cart-express-payment-style.js 136 B -1 B (-1%)
build/cart-blocks/cart-items-style.js 229 B +1 B (0%)
build/cart-blocks/cart-line-items--mini-cart-contents-block/products-table-frontend.js 5.47 kB -3 B (0%)
build/cart-blocks/cart-line-items-frontend.js 1.06 kB -1 B (0%)
build/cart-blocks/cart-line-items-style.js 137 B -1 B (-1%)
build/cart-blocks/cart-order-summary-frontend.js 1.28 kB +1 B (0%)
build/cart-blocks/cart-order-summary-style.js 319 B +1 B (0%)
build/cart-blocks/empty-cart-frontend.js 344 B -2 B (-1%)
build/cart-blocks/filled-cart-frontend.js 655 B -2 B (0%)
build/cart-blocks/filled-cart-style.js 311 B -1 B (0%)
build/cart-blocks/order-summary-coupon-form-frontend.js 1.63 kB -3 B (0%)
build/cart-blocks/order-summary-discount-frontend.js 2.12 kB +1 B (0%)
build/cart-blocks/order-summary-discount-style.js 136 B -2 B (-1%)
build/cart-blocks/order-summary-fee-frontend.js 272 B -1 B (0%)
build/cart-blocks/order-summary-fee-style.js 137 B -1 B (-1%)
build/cart-blocks/order-summary-heading-frontend.js 333 B -1 B (0%)
build/cart-blocks/order-summary-shipping-frontend.js 17 kB +2 B (0%)
build/cart-blocks/order-summary-taxes-style.js 178 B +1 B (+1%)
build/cart-blocks/proceed-to-checkout-frontend.js 1.43 kB -1 B (0%)
build/cart-blocks/proceed-to-checkout-style.js 1.09 kB -1 B (0%)
build/cart-frontend.js 29.9 kB -6 B (0%)
build/cart.js 45.4 kB -12 B (0%)
build/catalog-sorting.js 1.71 kB +2 B (0%)
build/checkout-blocks/actions--checkout-blocks/terms-style.js 487 B +1 B (0%)
build/checkout-blocks/actions-style.js 684 B -4 B (-1%)
build/checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 4.7 kB -1 B (0%)
build/checkout-blocks/billing-address-frontend.js 1.18 kB +1 B (0%)
build/checkout-blocks/billing-address-style.js 532 B +2 B (0%)
build/checkout-blocks/express-payment-frontend.js 1.13 kB -3 B (0%)
build/checkout-blocks/order-note-frontend.js 1.13 kB +3 B (0%)
build/checkout-blocks/order-summary-cart-items-frontend.js 3.76 kB -1 B (0%)
build/checkout-blocks/order-summary-coupon-form-frontend.js 1.79 kB -1 B (0%)
build/checkout-blocks/order-summary-coupon-form-style.js 137 B +1 B (+1%)
build/checkout-blocks/order-summary-discount-frontend.js 2.29 kB -1 B (0%)
build/checkout-blocks/order-summary-shipping-frontend.js 17 kB -1 B (0%)
build/checkout-blocks/payment-frontend.js 9.29 kB +3 B (0%)
build/checkout-blocks/payment-style.js 460 B +1 B (0%)
build/checkout-blocks/pickup-options-frontend.js 4.84 kB +1 B (0%)
build/checkout-blocks/pickup-options-style.js 443 B +2 B (0%)
build/checkout-blocks/shipping-address-frontend.js 1.18 kB +1 B (0%)
build/checkout-blocks/shipping-address-style.js 477 B +1 B (0%)
build/checkout-blocks/shipping-method-frontend.js 2.63 kB +1 B (0%)
build/checkout-blocks/shipping-method-style.js 1.37 kB -3 B (0%)
build/checkout-blocks/shipping-methods-frontend.js 6.4 kB +3 B (0%)
build/checkout-blocks/terms-frontend.js 1.55 kB -4 B (0%)
build/checkout-blocks/terms-style.js 675 B -1 B (0%)
build/checkout-blocks/totals-frontend.js 347 B -1 B (0%)
build/checkout-blocks/totals-style.js 285 B +1 B (0%)
build/checkout-frontend.js 31.9 kB +8 B (0%)
build/checkout.js 48 kB -3 B (0%)
build/featured-category.js 15.1 kB -3 B (0%)
build/featured-product.js 15.3 kB +1 B (0%)
build/filter-wrapper-frontend.js 14.3 kB +8 B (0%)
build/filter-wrapper.js 2.4 kB +3 B (0%)
build/handpicked-products.js 8.09 kB -3 B (0%)
build/legacy-template.js 8.93 kB +2 B (0%)
build/mini-cart-component-frontend.js 30.8 kB +5 B (0%)
build/mini-cart-contents-block/cart-button-frontend.js 1.73 kB -3 B (0%)
build/mini-cart-contents-block/checkout-button-frontend.js 1.81 kB -2 B (0%)
build/mini-cart-contents-block/checkout-button-style.js 467 B -1 B (0%)
build/mini-cart-contents-block/empty-cart-style.js 359 B +1 B (0%)
build/mini-cart-contents-block/footer-frontend.js 3.83 kB -3 B (0%)
build/mini-cart-contents-block/footer-style.js 2.4 kB +1 B (0%)
build/mini-cart-contents-block/products-table-style.js 5.1 kB +1 B (0%)
build/mini-cart-contents-block/shopping-button-frontend.js 530 B -1 B (0%)
build/mini-cart-contents-block/title-frontend.js 1.89 kB -3 B (0%)
build/mini-cart-contents-block/title-items-counter-frontend.js 1.59 kB -1 B (0%)
build/mini-cart-contents-block/title-style.js 442 B +1 B (0%)
build/mini-cart-contents.js 18.1 kB +17 B (0%)
build/mini-cart.js 6.1 kB -5 B (0%)
build/price-filter.js 8.66 kB -1 B (0%)
build/product-add-to-cart--product-button--product-image--product-price--product-rating--product-rating-s--92e2d51d.js 0 B -272 B (removed) 🏆
build/product-add-to-cart--product-button--product-image--product-rating--product-rating-stars--product-title.js 0 B -151 B (removed) 🏆
build/product-add-to-cart-frontend.js 6.52 kB -1 B (0%)
build/product-add-to-cart.js 8.84 kB -1 B (0%)
build/product-best-sellers.js 8.43 kB -2 B (0%)
build/product-button--product-image--product-price--product-rating--product-rating-stars--product-sale-ba--4e6a8b3c.js 0 B -955 B (removed) 🏆
build/product-button-frontend.js 2.66 kB -3 B (0%)
build/product-button.js 3.97 kB -2 B (0%)
build/product-categories.js 2.71 kB +1 B (0%)
build/product-category.js 9.43 kB -5 B (0%)
build/product-collection.js 13.9 kB +17 B (0%)
build/product-gallery-large-image.js 2.01 kB +1 B (0%)
build/product-gallery.js 2.3 kB -2 B (0%)
build/product-image-frontend.js 2.71 kB -2 B (0%)
build/product-image.js 4.21 kB -2 B (0%)
build/product-on-sale.js 8.73 kB -3 B (0%)
build/product-rating-frontend.js 2.34 kB -3 B (0%)
build/product-rating-stars.js 938 B -2 B (0%)
build/product-rating.js 1.04 kB -1 B (0%)
build/product-results-count.js 1.67 kB +1 B (0%)
build/product-sale-badge-frontend.js 1.8 kB -2 B (0%)
build/product-sale-badge.js 665 B -2 B (0%)
build/product-search.js 2.63 kB +2 B (0%)
build/product-sku-frontend.js 1.85 kB -4 B (0%)
build/product-sku.js 536 B +1 B (0%)
build/product-stock-indicator-frontend.js 2.04 kB -2 B (0%)
build/product-stock-indicator.js 731 B +1 B (0%)
build/product-summary-frontend.js 2.26 kB -1 B (0%)
build/product-tag.js 8.93 kB +2 B (0%)
build/product-template.js 3.35 kB -4 B (0%)
build/product-title.js 3.66 kB -2 B (0%)
build/rating-filter-rtl.css 4.25 kB +4 B (0%)
build/rating-filter-wrapper-rtl.css 4.11 kB +4 B (0%)
build/rating-filter-wrapper.css 4.11 kB +5 B (0%)
build/rating-filter.css 4.24 kB +4 B (0%)
build/single-product.js 11.2 kB +43 B (0%)
build/store-notices.js 1.69 kB +1 B (0%)
build/vendors--active-filters-wrapper--attribute-filter-wrapper--mini-cart-contents-block/cart-button--mi--6436fd83-style.js 0 B -604 B (removed) 🏆
build/vendors--attribute-filter-wrapper-frontend.js 5.11 kB -1 B (0%)
build/vendors--cart-blocks/order-summary-shipping--checkout-blocks/billing-address--checkout-blocks/order--decc3dc6-frontend.js 19.4 kB -6 B (0%)
build/vendors--cart-blocks/proceed-to-checkout-style.js 178 B -1 B (-1%)
build/vendors--checkout-blocks/shipping-method-frontend.js 12.4 kB -5 B (0%)
build/vendors--checkout-blocks/shipping-method-style.js 11.7 kB +4 B (0%)
build/vendors--price-filter-wrapper-frontend.js 2.2 kB +1 B (0%)
build/vendors--product-add-to-cart-frontend.js 7.25 kB -6 B (0%)
build/vendors--rating-filter-wrapper-frontend.js 5.11 kB -1 B (0%)
build/vendors--stock-filter-wrapper-frontend.js 5.11 kB -1 B (0%)
build/wc-blocks-vendors.js 65.4 kB +8 B (0%)
build/active-filters-wrapper--mini-cart-contents-block/cart-button--mini-cart-contents-block/checkout-but--7b0ebc06-style.js 958 B +958 B (new file) 🆕
build/product-add-to-cart--product-button--product-image--product-price--product-rating--product-rating-c--0937e03a.js 271 B +271 B (new file) 🆕
build/product-add-to-cart--product-button--product-image--product-rating--product-rating-counter--product--3cd1bd17.js 151 B +151 B (new file) 🆕
build/product-button--product-image--product-price--product-rating--product-rating-counter--product-ratin--c0971b69.js 954 B +954 B (new file) 🆕
build/product-rating-counter-frontend.js 2 kB +2 kB (new file) 🆕
build/product-rating-counter.js 687 B +687 B (new file) 🆕
build/vendors--active-filters-wrapper--attribute-filter-wrapper--mini-cart-contents-block/cart-button--mi--4b176c62-style.js 604 B +604 B (new file) 🆕
ℹ️ View Unchanged
Filename Size
build/active-filters-frontend.js 8.7 kB
build/active-filters-rtl.css 2.02 kB
build/active-filters-wrapper-rtl.css 1.88 kB
build/active-filters-wrapper.css 1.88 kB
build/active-filters.css 2.02 kB
build/all-products-rtl.css 4.19 kB
build/all-products.css 4.18 kB
build/all-reviews-rtl.css 1.84 kB
build/all-reviews.css 1.84 kB
build/all-reviews.js 7.87 kB
build/attribute-filter-frontend.js 23.1 kB
build/attribute-filter-rtl.css 4.19 kB
build/attribute-filter-wrapper-rtl.css 4.06 kB
build/attribute-filter-wrapper.css 4.06 kB
build/attribute-filter.css 4.19 kB
build/blocks-checkout.js 35.1 kB
build/breadcrumbs-rtl.css 253 B
build/breadcrumbs.css 253 B
build/cart-blocks/cart-accepted-payment-methods-style.js 137 B
build/cart-blocks/cart-cross-sells-frontend.js 253 B
build/cart-blocks/cart-cross-sells-products-style.js 137 B
build/cart-blocks/cart-express-payment--checkout-blocks/express-payment-frontend.js 5.16 kB
build/cart-blocks/cart-items-frontend.js 301 B
build/cart-blocks/cart-totals-frontend.js 307 B
build/cart-blocks/cart-totals-style.js 238 B
build/cart-blocks/empty-cart-style.js 340 B
build/cart-blocks/order-summary-coupon-form-style.js 137 B
build/cart-blocks/order-summary-heading-style.js 335 B
build/cart-blocks/order-summary-shipping-style.js 177 B
build/cart-blocks/order-summary-subtotal-frontend.js 273 B
build/cart-blocks/order-summary-subtotal-style.js 138 B
build/cart-blocks/order-summary-taxes-frontend.js 435 B
build/cart-rtl.css 9.6 kB
build/cart.css 9.59 kB
build/catalog-sorting-rtl.css 277 B
build/catalog-sorting.css 276 B
build/checkout-blocks/actions-frontend.js 1.88 kB
build/checkout-blocks/contact-information-frontend.js 2.04 kB
build/checkout-blocks/contact-information-style.js 609 B
build/checkout-blocks/fields-frontend.js 318 B
build/checkout-blocks/fields-style.js 260 B
build/checkout-blocks/order-summary-cart-items-style.js 137 B
build/checkout-blocks/order-summary-discount-style.js 137 B
build/checkout-blocks/order-summary-fee-frontend.js 275 B
build/checkout-blocks/order-summary-fee-style.js 137 B
build/checkout-blocks/order-summary-frontend.js 1.28 kB
build/checkout-blocks/order-summary-shipping-style.js 137 B
build/checkout-blocks/order-summary-style.js 318 B
build/checkout-blocks/order-summary-subtotal-frontend.js 273 B
build/checkout-blocks/order-summary-subtotal-style.js 137 B
build/checkout-blocks/order-summary-taxes-frontend.js 435 B
build/checkout-blocks/order-summary-taxes-style.js 177 B
build/checkout-blocks/shipping-methods-style.js 417 B
build/checkout-rtl.css 9.23 kB
build/checkout.css 9.22 kB
build/customer-account-rtl.css 406 B
build/customer-account.css 406 B
build/customer-account.js 3.19 kB
build/featured-category-rtl.css 986 B
build/featured-category.css 987 B
build/featured-product-rtl.css 1.03 kB
build/featured-product.css 1.03 kB
build/filter-wrapper-rtl.css 399 B
build/filter-wrapper.css 397 B
build/legacy-template-rtl.css 258 B
build/legacy-template.css 257 B
build/mini-cart-contents-block/cart-button--mini-cart-contents-block/checkout-button--mini-cart-contents---358acf4e-style.js 294 B
build/mini-cart-contents-block/cart-button-style.js 387 B
build/mini-cart-contents-block/empty-cart-frontend.js 360 B
build/mini-cart-contents-block/filled-cart-frontend.js 267 B
build/mini-cart-contents-block/filled-cart-style.js 268 B
build/mini-cart-contents-block/footer-rtl.css 419 B
build/mini-cart-contents-block/footer.css 418 B
build/mini-cart-contents-block/items-frontend.js 237 B
build/mini-cart-contents-block/items-style.js 237 B
build/mini-cart-contents-block/products-table--product-summary-style.js 737 B
build/mini-cart-contents-block/products-table-frontend.js 588 B
build/mini-cart-contents-block/products-table-rtl.css 2.19 kB
build/mini-cart-contents-block/products-table.css 2.18 kB
build/mini-cart-contents-block/shopping-button-style.js 394 B
build/mini-cart-contents-block/title-items-counter-style.js 300 B
build/mini-cart-contents-block/title-label-frontend.js 1.53 kB
build/mini-cart-contents-block/title-label-style.js 301 B
build/mini-cart-contents-rtl.css 2.73 kB
build/mini-cart-contents.css 2.73 kB
build/mini-cart-frontend.js 2.84 kB
build/mini-cart-rtl.css 2.61 kB
build/mini-cart.css 2.61 kB
build/packages-style-rtl.css 3.59 kB
build/packages-style.css 3.59 kB
build/price-filter-frontend.js 14.7 kB
build/price-filter-rtl.css 2.71 kB
build/price-filter-wrapper-frontend.js 6.85 kB
build/price-filter-wrapper-rtl.css 2.56 kB
build/price-filter-wrapper.css 2.56 kB
build/price-filter.css 2.7 kB
build/price-format.js 1.19 kB
build/product-add-to-cart-rtl.css 1.39 kB
build/product-add-to-cart.css 1.4 kB
build/product-button-rtl.css 889 B
build/product-button.css 891 B
build/product-categories-rtl.css 671 B
build/product-categories.css 670 B
build/product-details-rtl.css 413 B
build/product-details.css 410 B
build/product-gallery-large-image-rtl.css 314 B
build/product-gallery-large-image.css 313 B
build/product-image-gallery-rtl.css 322 B
build/product-image-gallery.css 322 B
build/product-image-rtl.css 951 B
build/product-image.css 949 B
build/product-new.js 8.73 kB
build/product-price-frontend.js 231 B
build/product-price-rtl.css 696 B
build/product-price.css 695 B
build/product-price.js 1.67 kB
build/product-query-rtl.css 367 B
build/product-query.css 365 B
build/product-query.js 12.7 kB
build/product-rating-rtl.css 262 B
build/product-rating-stars-frontend.js 2.24 kB
build/product-rating-stars-rtl.css 904 B
build/product-rating-stars.css 906 B
build/product-rating.css 262 B
build/product-results-count-rtl.css 248 B
build/product-results-count.css 247 B
build/product-reviews-rtl.css 474 B
build/product-reviews.css 473 B
build/product-sale-badge-rtl.css 392 B
build/product-sale-badge.css 389 B
build/product-search-rtl.css 435 B
build/product-search.css 434 B
build/product-sku-rtl.css 258 B
build/product-sku.css 258 B
build/product-stock-indicator-rtl.css 250 B
build/product-stock-indicator.css 250 B
build/product-summary-rtl.css 571 B
build/product-summary.css 572 B
build/product-summary.js 1.01 kB
build/product-template-rtl.css 439 B
build/product-template.css 437 B
build/product-title-frontend.js 2.22 kB
build/product-title-rtl.css 718 B
build/product-title.css 719 B
build/product-top-rated.js 8.98 kB
build/products-by-attribute.js 9.77 kB
build/rating-filter-frontend.js 21.5 kB
build/rating-filter-wrapper-frontend.js 6.3 kB
build/rating-filter.js 6.99 kB
build/reviews-by-category-rtl.css 1.84 kB
build/reviews-by-category.css 1.84 kB
build/reviews-by-category.js 12.2 kB
build/reviews-by-product-rtl.css 1.84 kB
build/reviews-by-product.css 1.84 kB
build/reviews-by-product.js 13.3 kB
build/reviews-frontend.js 7.17 kB
build/single-product-rtl.css 399 B
build/single-product.css 397 B
build/stock-filter-frontend.js 21.7 kB
build/stock-filter-rtl.css 4.06 kB
build/stock-filter-wrapper-frontend.js 6.55 kB
build/stock-filter-wrapper-rtl.css 3.93 kB
build/stock-filter-wrapper.css 3.93 kB
build/stock-filter.css 4.06 kB
build/stock-filter.js 7.73 kB
build/vendors--attribute-filter-wrapper--cart-blocks/order-summary-coupon-form--cart-blocks/order-summary--48e1e4bb-frontend.js 6.83 kB
build/vendors--attribute-filter-wrapper--cart-blocks/order-summary-shipping--checkout-blocks/billing-addr--d9f38f9d-frontend.js 4.2 kB
build/vendors--cart-blocks/cart-cross-sells-products--cart-blocks/cart-line-items--cart-blocks/cart-order--3c5fe802-frontend.js 5.26 kB
build/vendors--cart-blocks/cart-line-items--checkout-blocks/order-summary-cart-items--mini-cart-contents---233ab542-frontend.js 3.57 kB
build/vendors--checkout-blocks/pickup-options--checkout-blocks/shipping-methods-frontend.js 8.25 kB
build/vendors--mini-cart-contents-block/products-table--price-filter-wrapper--product-price-style.js 5.27 kB
build/vendors--mini-cart-contents-block/products-table-style.js 3.16 kB
build/wc-blocks-data.js 22.4 kB
build/wc-blocks-editor-style-rtl.css 6.19 kB
build/wc-blocks-editor-style.css 6.19 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 934 B
build/wc-blocks-registry.js 3.15 kB
build/wc-blocks-rtl.css 2.54 kB
build/wc-blocks-shared-context.js 1.1 kB
build/wc-blocks-shared-hocs.js 1.75 kB
build/wc-blocks.css 2.54 kB
build/wc-blocks.js 3.75 kB
build/wc-interactivity.js 10.4 kB
build/wc-payment-method-bacs.js 816 B
build/wc-payment-method-cheque.js 811 B
build/wc-payment-method-cod.js 909 B
build/wc-payment-method-paypal.js 837 B
build/wc-settings.js 2.6 kB
build/wc-shipping-method-pickup-location.js 30.4 kB

compressed-size-action

Copy link
Contributor

@kmanijak kmanijak left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this PR 🙌

I agree it brings consistency to how the filter works as agreed in the discussion #9023 and it's great it fixes the performance problem!

I'm approving, but before merging, could you please remove references to All Products block from the PR description as I don't think it's affected by this problem at all. It's Products (Beta) and Product Collection (which is still experimental and not available to use). Unless I'm missing something?

As a next step, let's keep discussing filters along with the custom-configured Products (Beta) block (but that's the next chapter!)

@github-actions github-actions bot added this to the 10.7.0 milestone Jul 14, 2023
@imanish003
Copy link
Contributor

Hi @nefeline 👋

it is possible to edit a setting under "Advanced Filters" that allows you to handpick specific products for display instead of showing all of them by default:

I think it’s applicable for all filters instead of just the handpicked products filter. If any filter changes the number of products that will be visible on frontend then this is applicable. For example:

  • Stock status: If user set stock status as “On backorder” then we show the products which are on backorder
  • Same with other filters like Product categories, product tags or keyword, and so on.

In short, if there is any filter that we apply in Products beta or Product collection block, which reduces the number of products to be visible on frontend then it will be applicable.

I'm not entirely certain if we're on the same page regarding this, so I wanted to make sure I overcommunicate here to prevent any potential confusion 🙂

@nefeline
Copy link
Contributor Author

Thanks for the review @kmanijak and @imanish003 !

Regarding:

I'm approving, but before merging, could you please remove references to All Products block from the PR description as I don't think it's affected by this problem at all. It's Products (Beta) and Product Collection (which is still experimental and not available to use). Unless I'm missing something?

Yep, good call! I replaced all occurrences of All Products with Product Collection.

Can any of you please re-review this PR 🙏 ? I pushed some changes on 1b4131f as I noticed the filters were not working alongside the Product Collection block, now they do.

@nefeline
Copy link
Contributor Author

I think it’s applicable for all filters instead of just the handpicked products filter.

Yep! Handpicked products was just a use-case example.

A practical use-case example is: when adding the Products (beta) block on any post or page[...]

Copy link
Contributor

@kmanijak kmanijak left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can any of you please re-review this PR 🙏 ? I pushed some changes on 1b4131f as I noticed the filters were not working alongside the Product Collection block, now they do.

I double-checked Products and Product Collection ✅

@nefeline nefeline merged commit aa9312d into trunk Jul 14, 2023
@nefeline nefeline deleted the try/remove-expensive-queries branch July 14, 2023 08:34
@opr opr modified the milestones: 10.7.0, 10.6.1 Jul 17, 2023
@opr opr added the release: cherry-pick Cherry picked into the relevant release branch. label Jul 17, 2023
opr pushed a commit that referenced this pull request Jul 17, 2023
…h a high volume of products (#10198)

* Remove queries that fetch all products for manipulating the results returned by the Store API for certain use-cases.

* Keep support for Product Collection block
@nefeline nefeline mentioned this pull request Jul 17, 2023
5 tasks
@nefeline nefeline mentioned this pull request Jul 17, 2023
5 tasks
opr added a commit that referenced this pull request Jul 18, 2023
* Empty commit for release pull request

* Product Filters > Fix Performance issue and Fatal error on stores with a high volume of products (#10198)

* Remove queries that fetch all products for manipulating the results returned by the Store API for certain use-cases.

* Keep support for Product Collection block

* Stop reading Product IDs from asset store in filter blocks (#10195)

* Remove queries that fetch all products for manipulating the results returned by the Store API for certain use-cases.

* Remove the code that's supposed to read product ids for filter context and logic around that in useCollectionData

* Fix incorrect merge

---------

Co-authored-by: Patricia Hillebrandt <patriciahillebrandt@gmail.com>

* Add testing instructions for 10.6.1

* Fix margin issue with the Proceed to checkout button on the site editor (#10182)

* Fix margin issue with the Proceed to checkout button on the site editor

* Remove unecessary selector

* Merge pull request from GHSA-gxfx-93xq-pr6p

* Add cors check

* refactor logic

* Refactor add_cors_headers to allow null and allowed hosts

* Move remove_filter inline

* Revert unrelated code style changes

* Add explainer to docblock

* Remove access for null origin

* Move CORS handling to auth class so it applies API wide

* Move only Authentication to priority 11

* Handle preflight requests so cart-tokens work

---------

Co-authored-by: Mike Jolley <mike.jolley@me.com>

* Add changelog to readme

* Bump versions, readme, changelog, and testing notes

* Add testing zip

* fix migration (#10205)

* New testing zip

* Don't send headers early in Store API (#10241)

* Replace sanitization functions to enforce string values (#10242)

* New testing zip

* Update changelog

---------

Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Patricia Hillebrandt <patriciahillebrandt@gmail.com>
Co-authored-by: Karol Manijak <20098064+kmanijak@users.noreply.github.com>
Co-authored-by: Thomas Roberts <thomas.roberts@automattic.com>
Co-authored-by: Alex Florisca <alex.florisca@automattic.com>
Co-authored-by: Seghir Nadir <nadir.seghir@gmail.com>
Co-authored-by: Mike Jolley <mike.jolley@me.com>
Co-authored-by: Luigi Teschio <gigitux@gmail.com>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
block: all products Issues related to the all products block. focus: performance The issue/PR is related to performance. release: cherry-pick Cherry picked into the relevant release branch. type: bug The issue/PR concerns a confirmed bug.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants