[{"data":1,"prerenderedAt":456},["ShallowReactive",2],{"navigation_docs":3,"-timer-reference-performance-notes":256,"-timer-reference-performance-notes-surround":451},[4,102],{"title":5,"path":6,"stem":7,"children":8},"TreStack Timer","\u002Ftimer","1.timer",[9,12,30,51,68,89],{"title":10,"path":6,"stem":11},"TreStack Timer docs","1.timer\u002Findex",{"title":13,"path":14,"stem":15,"children":16,"page":29},"Getting started","\u002Ftimer\u002Fstart","1.timer\u002F1.start",[17,21,25],{"title":18,"path":19,"stem":20},"Installing TreStack Timer","\u002Ftimer\u002Fstart\u002Finstalling-a-trestack-app","1.timer\u002F1.start\u002F1.installing-a-trestack-app",{"title":22,"path":23,"stem":24},"Turning on the app embed and placing the app block","\u002Ftimer\u002Fstart\u002Fplacing-your-first-app-block","1.timer\u002F1.start\u002F2.placing-your-first-app-block",{"title":26,"path":27,"stem":28},"Development stores and theme previews","\u002Ftimer\u002Fstart\u002Fdevelopment-stores-and-theme-previews","1.timer\u002F1.start\u002F3.development-stores-and-theme-previews",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Timer types","\u002Ftimer\u002Ftimer-types","1.timer\u002F2.timer-types",[35,39,43,47],{"title":36,"path":37,"stem":38},"TreStack Timer, setup and settings","\u002Ftimer\u002Ftimer-types\u002Ftrestack-timer","1.timer\u002F2.timer-types\u002F1.trestack-timer",{"title":40,"path":41,"stem":42},"Placement, countries, and translations","\u002Ftimer\u002Ftimer-types\u002Fplacement-and-targeting","1.timer\u002F2.timer-types\u002F2.placement-and-targeting",{"title":44,"path":45,"stem":46},"Cart page and cart drawer timers","\u002Ftimer\u002Ftimer-types\u002Fcart-timers","1.timer\u002F2.timer-types\u002F3.cart-timers",{"title":48,"path":49,"stem":50},"Email timers","\u002Ftimer\u002Ftimer-types\u002Femail-timers","1.timer\u002F2.timer-types\u002F4.email-timers",{"title":52,"path":53,"stem":54,"children":55,"page":29},"Performance and themes","\u002Ftimer\u002Freference","1.timer\u002F3.reference",[56,60,64],{"title":57,"path":58,"stem":59},"Performance notes","\u002Ftimer\u002Freference\u002Fperformance-notes","1.timer\u002F3.reference\u002F1.performance-notes",{"title":61,"path":62,"stem":63},"Theme compatibility","\u002Ftimer\u002Freference\u002Ftheme-compatibility","1.timer\u002F3.reference\u002F2.theme-compatibility",{"title":65,"path":66,"stem":67},"Running several timers at once","\u002Ftimer\u002Freference\u002Frunning-several-timers","1.timer\u002F3.reference\u002F3.running-several-timers",{"title":69,"path":70,"stem":71,"children":72,"page":29},"Billing, privacy, and data","\u002Ftimer\u002Faccount","1.timer\u002F4.account",[73,77,81,85],{"title":74,"path":75,"stem":76},"Billing, trials, and plan changes","\u002Ftimer\u002Faccount\u002Fbilling","1.timer\u002F4.account\u002F1.billing",{"title":78,"path":79,"stem":80},"Privacy and data, what the app stores","\u002Ftimer\u002Faccount\u002Fprivacy-and-data","1.timer\u002F4.account\u002F2.privacy-and-data",{"title":82,"path":83,"stem":84},"Data processing and subprocessors","\u002Ftimer\u002Faccount\u002Fdata-processing-and-subprocessors","1.timer\u002F4.account\u002F3.data-processing-and-subprocessors",{"title":86,"path":87,"stem":88},"Uninstalling TreStack Timer","\u002Ftimer\u002Faccount\u002Funinstalling-trestack-timer","1.timer\u002F4.account\u002F4.uninstalling-trestack-timer",{"title":90,"path":91,"stem":92,"children":93,"page":29},"When something is wrong","\u002Ftimer\u002Ftroubleshooting","1.timer\u002F5.troubleshooting",[94,98],{"title":95,"path":96,"stem":97},"When the timer does not appear","\u002Ftimer\u002Ftroubleshooting\u002Ftroubleshooting-app-blocks","1.timer\u002F5.troubleshooting\u002F1.troubleshooting-app-blocks",{"title":99,"path":100,"stem":101},"When the timer shows in the wrong place or looks wrong","\u002Ftimer\u002Ftroubleshooting\u002Ftroubleshooting-storefront-display","1.timer\u002F5.troubleshooting\u002F2.troubleshooting-storefront-display",{"title":103,"path":104,"stem":105,"children":106},"TreStack Bundles","\u002Fbundles","2.bundles",[107,110,131,160,185,198,219,244],{"title":108,"path":104,"stem":109},"TreStack Bundles docs","2.bundles\u002Findex",{"title":111,"path":112,"stem":113,"children":114,"page":29},"Getting a deal live","\u002Fbundles\u002Fstart","2.bundles\u002F1.start",[115,119,123,127],{"title":116,"path":117,"stem":118},"Getting started with TreStack Bundles","\u002Fbundles\u002Fstart\u002Fgetting-started","2.bundles\u002F1.start\u002F1.getting-started",{"title":120,"path":121,"stem":122},"Deal types and deal bars","\u002Fbundles\u002Fstart\u002Fdeal-types","2.bundles\u002F1.start\u002F2.deal-types",{"title":124,"path":125,"stem":126},"Creating, publishing and managing deals","\u002Fbundles\u002Fstart\u002Fcreating-and-publishing-deals","2.bundles\u002F1.start\u002F3.creating-and-publishing-deals",{"title":128,"path":129,"stem":130},"Development stores and testing safely","\u002Fbundles\u002Fstart\u002Fdevelopment-stores-and-testing","2.bundles\u002F1.start\u002F4.development-stores-and-testing",{"title":132,"path":133,"stem":134,"children":135,"page":29},"Building offers","\u002Fbundles\u002Fdeals","2.bundles\u002F2.deals",[136,140,144,148,152,156],{"title":137,"path":138,"stem":139},"Quantity breaks and Buy X, get Y","\u002Fbundles\u002Fdeals\u002Fquantity-breaks-and-buy-x-get-y","2.bundles\u002F2.deals\u002F1.quantity-breaks-and-buy-x-get-y",{"title":141,"path":142,"stem":143},"Bundles and mix and match","\u002Fbundles\u002Fdeals\u002Fbundles-and-mix-and-match","2.bundles\u002F2.deals\u002F2.bundles-and-mix-and-match",{"title":145,"path":146,"stem":147},"Free gifts and progressive gifts","\u002Fbundles\u002Fdeals\u002Fgifts-and-progressive-gifts","2.bundles\u002F2.deals\u002F3.gifts-and-progressive-gifts",{"title":149,"path":150,"stem":151},"Upsells, add-ons and personalisation","\u002Fbundles\u002Fdeals\u002Fupsells-add-ons-and-personalisation","2.bundles\u002F2.deals\u002F4.upsells-add-ons-and-personalisation",{"title":153,"path":154,"stem":155},"Subscriptions in a deal","\u002Fbundles\u002Fdeals\u002Fsubscriptions","2.bundles\u002F2.deals\u002F5.subscriptions",{"title":157,"path":158,"stem":159},"Products, dates and visibility","\u002Fbundles\u002Fdeals\u002Fproducts-dates-and-visibility","2.bundles\u002F2.deals\u002F6.products-dates-and-visibility",{"title":161,"path":162,"stem":163,"children":164,"page":29},"How a deal looks, and where","\u002Fbundles\u002Fdesign","2.bundles\u002F3.design",[165,169,173,177,181],{"title":166,"path":167,"stem":168},"Designing a deal","\u002Fbundles\u002Fdesign\u002Fdesign","2.bundles\u002F3.design\u002F1.design",{"title":170,"path":171,"stem":172},"Badges, timers and scratch-off","\u002Fbundles\u002Fdesign\u002Fbadges-timers-and-scratch-off","2.bundles\u002F3.design\u002F2.badges-timers-and-scratch-off",{"title":174,"path":175,"stem":176},"Variants, swatches and images","\u002Fbundles\u002Fdesign\u002Fvariants-swatches-and-images","2.bundles\u002F3.design\u002F3.variants-swatches-and-images",{"title":178,"path":179,"stem":180},"Prices, the sticky bar and the savings summary","\u002Fbundles\u002Fdesign\u002Fprices-sticky-bar-and-savings","2.bundles\u002F3.design\u002F4.prices-sticky-bar-and-savings",{"title":182,"path":183,"stem":184},"Translations, currencies and markets","\u002Fbundles\u002Fdesign\u002Ftranslations-and-markets","2.bundles\u002F3.design\u002F5.translations-and-markets",{"title":186,"path":187,"stem":188,"children":189,"page":29},"Prices at checkout","\u002Fbundles\u002Fcheckout","2.bundles\u002F4.checkout",[190,194],{"title":191,"path":192,"stem":193},"How the discount is applied at checkout","\u002Fbundles\u002Fcheckout\u002Fhow-the-discount-is-applied","2.bundles\u002F4.checkout\u002F1.how-the-discount-is-applied",{"title":195,"path":196,"stem":197},"Combining discounts, and store limits","\u002Fbundles\u002Fcheckout\u002Fcombinations-and-limits","2.bundles\u002F4.checkout\u002F2.combinations-and-limits",{"title":199,"path":200,"stem":201,"children":202,"page":29},"Tests and numbers","\u002Fbundles\u002Fmeasure","2.bundles\u002F5.measure",[203,207,211,215],{"title":204,"path":205,"stem":206},"Deal analytics","\u002Fbundles\u002Fmeasure\u002Fanalytics","2.bundles\u002F5.measure\u002F1.analytics",{"title":208,"path":209,"stem":210},"Added revenue","\u002Fbundles\u002Fmeasure\u002Fadded-revenue","2.bundles\u002F5.measure\u002F2.added-revenue",{"title":212,"path":213,"stem":214},"A\u002FB testing a deal","\u002Fbundles\u002Fmeasure\u002Fab-tests","2.bundles\u002F5.measure\u002F3.ab-tests",{"title":216,"path":217,"stem":218},"Smart A\u002FB tests","\u002Fbundles\u002Fmeasure\u002Fsmart-ab-tests","2.bundles\u002F5.measure\u002F4.smart-ab-tests",{"title":220,"path":221,"stem":222,"children":223,"page":29},"Billing, privacy, and when something is wrong","\u002Fbundles\u002Faccount","2.bundles\u002F6.account",[224,228,232,236,240],{"title":225,"path":226,"stem":227},"TreStack Bundles plans and billing","\u002Fbundles\u002Faccount\u002Fplans-and-billing","2.bundles\u002F6.account\u002F1.plans-and-billing",{"title":229,"path":230,"stem":231},"Going over your plan","\u002Fbundles\u002Faccount\u002Fgoing-over-your-plan","2.bundles\u002F6.account\u002F2.going-over-your-plan",{"title":233,"path":234,"stem":235},"Pausing, cancelling and uninstalling","\u002Fbundles\u002Faccount\u002Fpausing-cancelling-and-uninstalling","2.bundles\u002F6.account\u002F3.pausing-cancelling-and-uninstalling",{"title":237,"path":238,"stem":239},"Privacy, data and sub-processors","\u002Fbundles\u002Faccount\u002Fprivacy-and-data","2.bundles\u002F6.account\u002F4.privacy-and-data",{"title":241,"path":242,"stem":243},"When a deal does not show or prices look wrong","\u002Fbundles\u002Faccount\u002Ftroubleshooting","2.bundles\u002F6.account\u002F5.troubleshooting",{"title":245,"path":246,"stem":247,"children":248,"page":29},"Reference","\u002Fbundles\u002Freference","2.bundles\u002F7.reference",[249,252],{"title":57,"path":250,"stem":251},"\u002Fbundles\u002Freference\u002Fperformance-notes","2.bundles\u002F7.reference\u002F1.performance-notes",{"title":253,"path":254,"stem":255},"Theme compatibility and placement","\u002Fbundles\u002Freference\u002Ftheme-compatibility","2.bundles\u002F7.reference\u002F2.theme-compatibility",{"id":257,"title":57,"body":258,"description":444,"extension":445,"links":446,"meta":447,"navigation":448,"path":58,"seo":449,"stem":59,"__hash__":450},"docs\u002F1.timer\u002F3.reference\u002F1.performance-notes.md",{"type":259,"value":260,"toc":428},"minimark",[261,276,305,310,313,316,320,323,326,330,333,336,340,373,377,409,413,416],[262,263,264,268,269,272,275],"p",{},[265,266,267],"strong",{},"Applies to:"," TreStack Timer, every plan",[270,271],"br",{},[265,273,274],{},"Updated:"," 26 September 2026",[277,278,279,284],"callout",{},[262,280,281],{},[265,282,283],{},"At a glance",[285,286,287,294,299],"ul",{},[288,289,290,293],"li",{},[265,291,292],{},"Bundle:"," 11.4 KB gzipped",[288,295,296,275],{},[265,297,298],{},"Measured:",[288,300,301,304],{},[265,302,303],{},"Theme measured:"," Horizon, one page",[306,307,309],"h2",{"id":308},"what-loads-and-from-where","What loads, and from where",[262,311,312],{},"The storefront code is one script bundle, served from the Shopify CDN as part of the theme app extension and loaded with defer, so it does not hold up the page. Your published timers are written into the page by the app embed, so there is no request to our server to fetch them. While no timer is published, the embed loads nothing at all.",[262,314,315],{},"A web font loads only the character sets the timer text uses, from the same extension. A background image is served from your own store Files. The one request that goes to our server is a small count event to timer.trestack.app when a timer is seen, clicked, closed, or completed, which is what the analytics and the monthly views read.",[306,317,319],{"id":318},"the-numbers","The numbers",[262,321,322],{},"The script bundle measured 11.4 KB gzipped on 26 September 2026, against a target of under 15 KB.",[262,324,325],{},"On the same day we ran Lighthouse mobile on a product page on Shopify Horizon theme with a top bar and a product timer that had a background image and a web font, five runs with the app and five without, and compared medians. There was no measurable drop in the performance score, layout shift was the same, and the product image stayed the largest paint. That is one measurement on one theme. It is not a guarantee for every store, which is why the next section exists.",[306,327,329],{"id":328},"measuring-your-own-store","Measuring your own store",[262,331,332],{},"Lighthouse on a live storefront is noisy: two runs on an unchanged page often differ by several points. Run each configuration at least three times and compare medians, on the same page, with the same device setting, in a private window with no browser extensions. Test the page the timer is actually on, logged out.",[262,334,335],{},"If the median moves by more than a couple of points, send us both sets of reports and the page URL. We treat that as a bug, not a tuning question.",[306,337,339],{"id":338},"measuring-the-cost-in-four-steps","Measuring the cost, in four steps.",[341,342,344,349,352,356,359,363,366,370],"steps",{"level":343},"3",[345,346,348],"h3",{"id":347},"pick-one-page-and-log-out","Pick one page and log out",[262,350,351],{},"The page the timer will be on. Private window, no browser extensions, no customer session.",[345,353,355],{"id":354},"run-three-baseline-reports","Run three baseline reports",[262,357,358],{},"Same device and throttling each time. Save all three and note the medians.",[345,360,362],{"id":361},"publish-the-timer","Publish the timer",[262,364,365],{},"Change nothing else on the theme in the same session, or the comparison means little.",[345,367,369],{"id":368},"run-three-more-and-compare","Run three more and compare",[262,371,372],{},"Compare medians for largest paint and layout shift, not only the headline score.",[306,374,376],{"id":375},"settings-reference","Settings reference",[378,379,380,385,389,393,397,401,405],"field-group",{},[381,382,384],"field",{"name":383},"Script","One bundle, loaded with defer, from the Shopify CDN as part of the theme app extension.",[381,386,388],{"name":387},"Size","11.4 KB gzipped, measured 26 September 2026. Target under 15 KB.",[381,390,392],{"name":391},"Timer settings","Written into the page by the app embed. No request to our server to fetch them.",[381,394,396],{"name":395},"Nothing published","The app embed loads no script at all.",[381,398,400],{"name":399},"Fonts","Your theme font by default. A web font loads only the character sets the timer text uses.",[381,402,404],{"name":403},"Images","Background images come from your own store Files on the Shopify CDN.",[381,406,408],{"name":407},"Requests to our server","Count events only, to timer.trestack.app, with the timer ID and event type and no shopper identifier.",[306,410,412],{"id":411},"if-this-does-not-work","If this does not work",[262,414,415],{},"The failures most likely on this procedure, with the check that resolves each one.",[417,418,419,424],"accordion",{},[420,421,423],"accordion-item",{"label":422},"Your Lighthouse score dropped after publishing a timer","Check it dropped on the median of three runs rather than on one, and that nothing else changed on the theme in the same session. If the median really moved, send both sets of reports and the URL.",[420,425,427],{"label":426},"The network panel shows a request you do not recognise","Requests to timer.trestack.app are the count events described above. The script and fonts come from the Shopify CDN under the extension assets. Anything on another domain belongs to your theme or another app.",{"title":429,"searchDepth":430,"depth":430,"links":431},"",2,[432,433,434,435,442,443],{"id":308,"depth":430,"text":309},{"id":318,"depth":430,"text":319},{"id":328,"depth":430,"text":329},{"id":338,"depth":430,"text":339,"children":436},[437,439,440,441],{"id":347,"depth":438,"text":348},3,{"id":354,"depth":438,"text":355},{"id":361,"depth":438,"text":362},{"id":368,"depth":438,"text":369},{"id":375,"depth":430,"text":376},{"id":411,"depth":430,"text":412},"What the storefront code weighs, what it loads and from where, one measurement on one theme, and how to measure your own store so the numbers compare.","md",null,{},true,{"title":57,"description":444},"sR2Ic9NsGqG79LSZr1-WVhnZOsFnyj-P43tfe47h5Io",[452,454],{"title":48,"path":49,"stem":50,"description":453,"children":-1},"A countdown image for marketing emails, drawn when the email is opened. How to get the snippet, what it shows after the deadline, and why you unpublish rather than delete.",{"title":61,"path":62,"stem":63,"description":455,"children":-1},"What the app needs from a theme, what has and has not been tested, page builders, and what to redo when you switch or upgrade your theme.",1791656484237]