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

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

هاب برند A2

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

مسئله تجاری

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

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

  • یک فایل MU، a2-brand-hubs-mu.php، با شورت‌کدهایی که شبکه‌ی هاب را برای دسته‌های فرزند swiss-watches و japanese-watches رندر می‌کنند.
  • یک جاب اسنپ‌شات روزانه از طریق WP-Cron که بازه‌های قیمت ارزآگاه و تعداد محصولات را بازمی‌سازد، محافظت‌شده با یک آپشن قفل تا دو اجرا هم‌پوشانی نکنند.
  • کش دولایه: HTML رندرشده‌ی هاب ۳۰ روز نگه داشته می‌شود، داده‌ی قیمت و تعداد هر ۲۴ ساعت تازه می‌شود، و رویدادهای ساخت، ویرایش و حذف ترم لایه‌ی ساختاری را باطل می‌کنند.
  • جست‌وجوی برند، فیلتر حرف الفبا و فیلتر قیمت روی صفحه‌ی هاب، به‌علاوه‌ی یک resolver که هر برند را در صورت وجود به مقاله‌ی تاریخچه‌اش لینک می‌کند.
  • کنترل‌های ادمین به شکل query string: یکی برای اسنپ‌شات، یکی برای بازسازی کامل، و یک اندپوینت JSON که متریک‌های روزانه را نشان می‌دهد.

رویکرد فنی

  • داده و نمایش روی ساعت‌های متفاوتی منقضی می‌شوند؛ همین یک تصمیم است که صفحه را ارزان نگه می‌دارد در حالی که اعداد قابل‌اعتماد می‌مانند.
  • افزونه‌های MU هوک فعال‌سازی ندارند، پس زمان‌بندی کرون روی init بررسی و هر وقت غایب باشد دوباره ساخته می‌شود.
  • اسنپ‌شات به‌جای ترنزینت به‌ازای هر ترم در یک آپشن زندگی می‌کند، که رندر یک هاب را در حد یک خواندن اضافه نگه می‌دارد.
  • باطل‌سازی کش به created_term، edited_term و delete_term گوش می‌دهد تا بازساختاردهی دسته‌ها هیچ‌وقت برند شبح روی صفحه جا نگذارد.

نتیجه و شواهد

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

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

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

خلاصه-اجرایی-پروژه

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

خلاصه_اجرایی {
  پروژه: "A2 Brand Hubs"
  فایل: "mu-plugins/a2-brand-hubs-mu.php (v2.3.5)"
  دامنه: "دسته‌های فرزند swiss-watches / japanese-watches"
  کش: { html: "۳۰ روز"، قیمت_و_تعداد: "اسنپ‌شات ۲۴ساعته" }
  ذخیره: "آپشن اسنپ‌شات روزانه + آپشن قفل"
  کرون: "بازآوری روزانه روی یک زمان‌بندی سفارشی"
  ادمین: "کوئری‌استرینگ برای اسنپ‌شات، بازسازی کامل و JSON"
  وضعیت: "در پروداکشن؛ اثر ترافیکی جداگانه اندازه‌گیری نشده"
}

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

تصمیمی که ارزش دیدن دارد جداکردن عمر کش داده از عمر کش نمایش است. این تنها راهی بود که هم صفحه ارزان بماند و هم عددها دروغ نگویند.

بررسی زمان‌بندی کرون روی init به‌جای اتکا به هوک فعال‌سازی، همان جزئیاتی است که تفاوت بین جابی که کار می‌کند و جابی که یک روز بی‌صدا متوقف می‌شود را می‌سازد.