Shopify GraphQL ক্যাশিং: একটি ব্যবহারিক নির্দেশিকা
GraphQL, REST-এর মতো কাজ করে না। আপনি URL দিয়ে ক্যাশ করতে পারবেন না। REST-এ, একটি এন্ডপয়েন্ট মানে একটি ক্যাশ এন্ট্রি। GraphQL-এ, একটি এন্ডপয়েন্ট সবকিছু পরিচালনা করে। একই URL-এ দুটি রিকোয়েস্ট ভিন্ন ভিন্ন ডেটা প্রদান করতে পারে।
GraphQL সঠিকভাবে ক্যাশ করতে হলে, আপনার ক্যাশ কী (cache key)-তে অবশ্যই অন্তর্ভুক্ত থাকতে হবে:
- কুয়েরি (The query)
- ভেরিয়েবলস (The variables)
- ইউজার কনটেক্সট (লোকাল বা বায়ার সেগমেন্ট)
একটি দ্রুত সিস্টেম তৈরি করতে লেয়ার ব্যবহার করুন:
- ক্লায়েন্ট ক্যাশ: ব্রাউজারে সেশন পুনরায় ব্যবহারের জন্য।
- এজ ক্যাশ: পাবলিক স্টোরফ্রন্ট পেজগুলোর জন্য।
- অ্যাপ ক্যাশ: আপনার সার্ভারে শেয়ার করা ডেটার জন্য।
- Persisted queries: স্থিতিশীল, হ্যাশ-ভিত্তিক কী-এর জন্য।
ডেটা পরিবর্তনের গতির সাথে আপনার ক্যাশ টাইম সামঞ্জস্যপূর্ণ রাখুন।
এই আইটেমগুলো দীর্ঘ সময়ের জন্য ক্যাশ করুন:
- প্রোডাক্ট ডিটেইলস
- কালেকশনস
- শপ সেটিংস
এই আইটেমগুলো অল্প সময়ের জন্য ক্যাশ করুন:
- প্রাইসিং
- ইনভেন্টরি অ্যাভেইলেবিলিটি
এই আইটেমগুলো কখনোই ক্যাশ করবেন না:
- কার্টস
- চেকআউট প্রসেস
- কাস্টমার-নির্দিষ্ট প্রাইসিং
আপনি যদি B2B স্টোর পরিচালনা করেন, তবে অবশ্যই আপনার ক্যাশ কী-তে কোম্পানি আইডি অন্তর্ভুক্ত করতে হবে। যদি আপনি এটি করতে ব্যর্থ হন, তবে কাস্টমার A হয়তো কাস্টমার B-এর কন্ট্রাক্ট প্রাইস দেখতে পেতে পারেন।
ডেটার সতেজতা (freshness) বজায় রাখতে এই তিনটি পদ্ধতি ব্যবহার করুন:
- TTL (Time-based): একটি এক্সপায়ারেশন টাইম সেট করুন। এটি সহজ কিন্তু এতে আপনাকে প্রায়শই অনুমানের ওপর নির্ভর করতে হয়।
- Webhooks (Event-based): এটি সবচেয়ে নির্ভুল। যখন কোনো প্রোডাক্ট আপডেট হয়, Shopify একটি webhook পাঠায়। আপনার পুরনো ক্যাশ এন্ট্রিটি মুছে ফেলতে সেই webhook ব্যবহার করুন।
- Stale-while-revalidate: ব্যাকগ্রাউন্ডে ক্যাশ রিফ্রেশ করার সময় তাৎক্ষণিকভাবে পুরনো ডেটা প্রদান করুন।
নির্ভরযোগ্য webhook হ্যান্ডলার তৈরি করুন। যদি একটি webhook ব্যর্থ হয়, তবে আপনার ক্যাশ পুরনো বা স্টেল (stale) থেকে যাবে। এটি প্রতিরোধ করতে 'retries' ব্যবহার করুন।
আপনার কৌশলটি কাজ করছে কিনা তা দেখতে এই মেট্রিক্সগুলোর দিকে নজর দিন:
- হিট রেশিও (Hit ratio): উচ্চ সংখ্যক হিট নিশ্চিত করার লক্ষ্য রাখুন।
- ল্যাটেন্সি (Latency): আপনার রেসপন্স টাইম কমে আসা উচিত।
- এপিআই কল এড়ানো (API calls avoided): বেশি হিট মানে কম খরচ।
- স্টেল ইনসিডেন্টস (Stale incidents): আপনার লক্ষ্য হলো ভুল দাম বা স্টকের রিপোর্টের সংখ্যা শূন্য রাখা।
আপনার ক্যাশগুলোকে লেয়ার করুন। ডেটার পরিবর্তনশীলতার (volatility) সাথে এক্সপায়ারেশন টাইম সামঞ্জস্যপূর্ণ করুন। পুরনো ডেটা মুছে ফেলতে webhook ব্যবহার করুন। পার্সোনালাইজেশন বজায় রাখে এমন কী (key) তৈরি করুন।
উৎস: https://dev.to/masadashraf/caching-shopify-graphql-a-practical-guide-for-developers-33k8