Loading...
Loading...
Use when investigating or improving Spree 6 performance — slow cart writes, slow checkout, slow Store API product listings, N+1 queries in custom endpoints or serializers, search latency, Meilisearch indexing floods, image processing backlogs, Solid Queue/Sidekiq queue tuning, HTTP/CDN caching of the Store API, dashboard data-fetching, or tracing with OpenTelemetry. Common phrasings include "slow cart", "add to cart is slow", "tax provider called too often", "N+1 in Spree", "slow product listing", "search slow", "Meilisearch reindex", "import is starving jobs", "jobs backlog", "queue tuning", "Spree cache", "CDN caching API", "trace a checkout", "find the slow workflow step".
npx skill4agent add spree/agent-skills spree-performancegem 'spree_opentelemetry'OTEL_EXPORTER_OTLP_ENDPOINTdocker run --rm -p 16686:16686 -p 4318:4318 jaegertracing/jaeger:latestSpree::Workflowcarts.add_itemcarts.complete process_paymentsActiveRecord::Base.logger = Logger.new($stdout)Spree::Carts::AddItemUpsertItemsSpree.cart_recalculate_workflowSpree::Carts::RecalculateSpree.cart_recalculate_totals_workflowSpree::Carts::RecalculateTotalscart.ensure_updated_fulfillmentsset_promotion_contextSpree::PromotionHandler::CartRecalculateTotalsafter_recalculateRecalculateTotalsSpree::DiscountSpree::FeeSpree::TaxLinecart.tax_provider.estimate(...)carts.recalculate.after_recalculatecarts.recalculate.set_promotion_contextcarts.recalculate_totals.set_tax_line_contextcart.updatedexternal_stepafter_saveSpree::LineItemSpree::CartResourceController#collection.includes(collection_includes).preload_associations_lazilylimit# Spree::Api::V3::Store::ProductsController#scope_includes (abridged)
[:seller, {
primary_media: [attachment_attachment: :blob, poster_attachment: :blob],
default_variant: [:prices, stock_levels: [:stock_location, :active_stock_reservations]],
variants: [:prices, :seller, stock_levels: [:stock_location, :active_stock_reservations]]
}]product.default_variant:pricesvariant.price_in(currency)pricespricesSpree::Mediaattachmentposterprimary_mediascope_includescollection_includes.includesexpand=fields=products = current_store.products.active
.includes(primary_media: [], default_variant: [:prices])
.preload_associations_lazilySpree::Api::V3::HttpCachingCache-Control: publicstale-while-revalidateVaryAccept, x-spree-currency, x-spree-locale, x-spree-channelupdated_atexpandfieldsqprivate, no-storeVaryx-spree-*cache_collection(collection)cache_resource(resource)falseRails.cacheredis_cache_storeSpree::SearchProvider::DatabaseLIKEpg_trgmEXPLAINspree_meilisearchSpree.search_provider = 'SpreeMeilisearch::SearchProvider'Spree::SearchProvider::IndexJobSpree.queues.searchsearchbin/rails spree:search:reindexspree task search:reindexSpree::MediaSpree::Config.product_image_variant_sizesminismallmediumlargexlargeog_imagepreprocessed: true:embedconfig.active_storage.queues.transform/rails/active_storage/representations/spree-deploymentCDN_HOSTSpree.queues:defaultdefaulteventsexportsimagesimportsproductsvariantscategoriescollectionsstock_location_stock_levelscoupon_codesthemesaddressesgift_cardswebhookspayment_webhooksapi_keyssearchstock_reservationstax_identifiersdata_requestspayoutsSpree.queuesspree_corelib/spree/core.rb# server/config/initializers/spree.rb
Spree.queues.payment_webhooks = :spree_payment_webhooks
Spree.queues.events = :spree_events
Spree.queues.webhooks = :spree_webhooks
Spree.queues.stock_reservations = :spree_stock_reservations
Spree.queues.imports = :spree_imports
Spree.queues.images = :spree_images
Spree.queues.search = :spree_search
Spree.queues.categories = :spree_categories
Spree.queues.collections = :spree_collections
Spree.queues.payouts = :spree_payoutsSpree.queues.taxons=stock_location_stock_items=reportsconfig/queue.yml"*"JOB_THREADSbin/jobsSOLID_QUEUE_IN_PUMA=falseJOB_THREADSJOB_CONCURRENCYqueue.yml[spree_payment_webhooks, spree_events, spree_webhooks, mailers, default][spree_imports, spree_images, active_storage_transform, spree_search]SPREE_IMPORT_JOB_CONCURRENCYJOB_THREADSRAILS_MAX_THREADS + JOB_THREADS/jobssidekiq.ymlspree-deploymentSpree::Events::SubscriberJobSpree.queues.eventssubscribes_to 'order.placed', async: falsestaleTimeretry: 1adminClientexpand: [...]limitstaleTimeprice_inpricesSpree.queues:defaultVaryx-spree-*Spree::Product.allcurrent_storenode_modules/@spree/docs/dist/developer/providers/observability.mdnode_modules/@spree/docs/dist/developer/deployment/background_jobs.mdcaching.mdcdn.mdnode_modules/@spree/docs/dist/developer/core-concepts/search-filtering.mdSpree::Carts::RecalculateRecalculateTotalsspree_core/app/workflows/spree/carts/Spree::Api::V3::HttpCachingSpree::Api::V3::ResourceControllerspree-workflowsspree-order-totalsspree-taxesspree-deploymentspree-events-webhooks