درود دوستان 👋

بعضی وقتا، در واقع بیشتر وقتا «یادگیری» زمانی اتفاق میوفته که با یک مسئله توی دنیای واقعی مواجه می‌شیم و باید اون رو حل کنیم. من تقریباً اکثر چیزهایی که یاد گرفتم به همین طریق بوده. یعنی تجربه کردن توی دنیای واقعی. و نکتهٔ جالب‌تر (و تاریک 🥲) اینه که چیزهایی که تلاش کردم تئوری یاد بگیرم (مثلاً از روی کنجکاوری جستجو کردم که فلان متد جاوااسکریپتی چیه) تقریباً هیچ‌وقت یادم نموند. به‌هر حال چند روز پیش دنیا من رو به مسیری هل داد که (به‌اجبار) و توی عمل بتونم کاربرد هدر Cache-Control با مقدار no-cache رو درک کنم. این در حالی بود که با این موضوع خیلی زیاد برخورد داشتم و چند بار هم تلاش کردم یاد بگیرم، اما نشد. بریم سراغ داستان.

توی یک پروژه داشتیم روی یک کد جاوااسکریپتی کار می‌کردیم. این کد جاوااسکریپتی قرار بود توی سایت‌های مشتری‌ها قرار بگیره. در واقع مشتری‌ها این اسکریپت رو از ما می‌گرفتن و به سایت خودشون اضافه می‌کردن (یه چت‌بات.) ورژن اولیه این اسکریپت رو ساختیم. و یه چیزی شبیه به این رو دادیم به مشتری‌ها و گفتیم که بذارن توی وبسایتشون تا چت‌بات لود بشه:

<script src="http://example.com/script.js"></script>

همه چی داشت خوب پیش می‌رفت، تا اینکه قرار شد یه قابلیت جدید به برنامه اضافه کنیم. قابلیت رو اضافه کردیم. دکمهٔ انتشار رو هم زدیم و رفت بالا. ولی یه مشکلی بود. دیدیم که مشتری‌ها هنوز این قابلیت جدید رو ندارن. بعد از تحقیق فراوان و بررسی لاگ‌ها توی Datadog متوجه شدیم که اسکریپتی که ساختیم روی مرورگر کاربرا کش شده بود، و در نتیجه کدهای جدید ما در دسترس نبود، مگر برای کاربرایی که اولین بار سایت رو می‌دیدن 🤦‍♂️ تا حدی که بعضی از کاربرا ویژگی جدید ما رو یک ماه بعد تونستن دریافت کنن، بعد از اینکه مرورگرشون تصمیم گرفت اسکریپت کش‌شده رو مجدد دریافت کنه!

باید دنبال راه حلی می‌بودیم که اسکریپت رو همیشه تازه نگه داریم. چون مدام داشتیم قابلیت اضافه می‌کردیم، یا پروژه رو تغییر می‌دادیم (باگ‌فیکس و ...). راه حلی که توی ذهن خودم بود این بود که قابلیتی پیاده‌سازی کنیم اسکریپت وقتی تغییر می‌کنه، خودش خودش رو Invalidate کنه. نمی‌دونستم پیاده‌سازیش قرار بود چطوری بشه. ولی یکم که بیشتر روی این راه حل متمرکز شدم متوجه شدم که پیچیدگی زیادی داره.

 

 چرا راه حل معمول جواب نمیداد؟

یه راه حل خیلی رایج اینه که ورژن اضافه کنیم به آخر اسکریپت:

<script src="http://example.com/script.js<<?v=1.1>>"></script>

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

 

بعدش چی

بعدش رفتم سراغ هوش مصنوعی کلاود. یه نکته رو بگم قبلش: