Amirali Yaghoutiمهندس ارشد نرم‌افزار

مطالعه موردی مهندسی

فیلتر سریع آرشیو A2

این افزونه‌ی MU فیلتر کند آرشیو را در فروشگاه گالری جواهریان با یک مودال AJAX دسته‌آگاه عوض کرد. خریدار کاتالوگ ساعت و جواهر را بر اساس برند، ویژگی و قیمت محدود می‌کند، بدون بارگذاری دوباره‌ی صفحه.

مسئله تجاری

فیلتر کردن کاتالوگ یکی از کندترین کارهایی بود که خریدار می‌توانست روی سایت انجام دهد. هر بار تغییر فیلتر، کوئری‌های سنگین تاکسونومی و قیمت را روی یک رندر آرشیوِ از قبل گران سوار می‌کرد و p95 مسیر آرشیو حدود ۵٫۲ ثانیه بود. فیلتر سریع‌تری می‌خواستم که صفحات دسته را همچنان سمت سرور رندرشده و قابل خزش نگه دارد.

آنچه تحویل دادم

  • یک رابط فیلتر مودال روی AJAX، با گزینه‌های وابسته که نشان می‌دهند در دسته‌ی فعلی واقعاً چه چیزی وجود دارد.
  • سطل‌های قیمت که با منطق چندکی از قیمت واقعی کاتالوگ ساخته می‌شوند، تا بازه‌ها از داده بیایند نه از پله‌های ثابت.
  • یک لایه‌ی کش ترنزینت با TTL ده دقیقه، پنجره‌ی کهنه‌ی شش ساعته و سقف ۵۱۲ کیلوبایت برای هر مقدار.
  • باطل‌سازی خودکار: هوک‌های save_post_product و set_object_terms و هوک‌های ترم، نسخه‌ی کش را پشت یک قفل کوتاه جلو می‌برند.
  • یک حالت امن با فالبک رندرشده‌ی سمت سرور، تا خطای جاوااسکریپت هیچ‌وقت جلوی مرور را نگیرد.

رویکرد فنی

  • محدودیت قیمت به‌جای شرط‌های روی‌هم‌چیده‌ی meta_query، از یک فیلتر posts_clauses رد می‌شود.
  • مجموعه‌ی شناسه‌های منطبق سقف ۲۰٬۰۰۰ دارد، تا یک دسته‌ی خیلی بزرگ از محدودیت حافظه یا اندازه‌ی کش رد نشود.
  • هر اندپوینت AJAX پیش از دست زدن به دیتابیس، اکشن nonce را تأیید می‌کند.

نتیجه و شواهد

روی ترافیک واقعی پروداکشن اندازه گرفته شد: p95 مسیر آرشیو بعد از عرضه از حدود ۵٫۲ ثانیه به حدود ۱٫۷ ثانیه رسید.

اهمیت برای کارفرما

خریدار ساعت پیش از تصمیم، مدل‌های زیادی را مقایسه می‌کند. وقتی محدود کردن بر اساس برند یا قیمت آنی باشد، بیشتر در کاتالوگ می‌ماند و سرور هم در هر نشست کوئری تکراری بسیار کمتری می‌زند.

یادداشت‌های تحویل

این ماژول را سر تا ته خودم نگه می‌دارم؛ از ثابت‌های تنظیم تا هوک‌های باطل‌سازی. برای همین لازم نیست کسی یادش بماند کش را دستی پاک کند.

  • رفتار ماژول با ثابت‌های مشخصی مثل A2_FF_CACHE_TTL تنظیم می‌شود.
  • حالت امن، مسیر رندرشده‌ی سمت سرور را مرجع نگه می‌دارد.
  • نسخه‌ی ۱.۶.۲ همان بیلدی است که روی فروشگاه زنده اجرا می‌شود.
خلاصه-اجرایی-پروژه

خلاصه اجرایی خوانا

خلاصه_اجرایی {
  پروژه: "A2 Fast Archive Filters"
  بافت: "کارایی ووکامرس"
  رابط: "مودال AJAX با گزینه‌های وابسته به بافت دسته"
  قیمت: "سطل‌های چندکی از قیمت‌های واقعی کاتالوگ"
  کش: "TTL ۱۰ دقیقه، پنجره‌ی کهنه ۶ ساعت، سقف ۵۱۲KB"
  باطل‌سازی: "save_post_product، set_object_terms، هوک‌های ترم"
  سقف: "۲۰٬۰۰۰ شناسه‌ی منطبق"
  فالبک: "حالت امن با رندر سمت سرور"
  اندازه‌گیری: "p95 آرشیو ۵٫۲ ثانیه ← ۱٫۷ ثانیه"
}

ارزش حرفه‌ای این پروژه

سطل‌های قیمت چندکی به‌جای پله‌های ثابت، انتخابی است که دوست دارم به آن نگاه شود. بازه‌ی قیمتی که از داده‌ی واقعی نیامده باشد، نصف گزینه‌هایش خالی درمی‌آید.

حالت امن با فالبک سمت سرور یعنی صفحه‌ی دسته هیچ‌وقت گروگان جاوااسکریپت نمی‌شود؛ نه برای خریدار، نه برای خزنده.