راهی بهتر برای به‌روزرسانی برنامه‌های وب شما

دن مورفی
Dan Murphy
دیبیاجیوتی پال
Dibyajyoti Pal

منتشر شده: ۲۱ ژانویه ۲۰۲۶

از کروم ۱۴۴، فرآیند به‌روزرسانی برای برنامه‌های وب قابل نصب که دارای مانیفست برنامه وب هستند، ساده‌تر شده و آن را قطعی‌تر، قابل پیش‌بینی‌تر و کارآمدتر کرده است. این پست رویکرد فعلی و تغییراتی را که برای بهبود آن ایجاد کرده‌ایم، توضیح می‌دهد.

رویکرد قبلی (قبل از کروم ۱۴۴)

قبل از کروم ۱۴۴، برنامه‌های وب فاقد یک رویداد خاص برای شروع به‌روزرسانی‌های پیشگیرانه بودند. در عوض، به‌روزرسانی‌ها می‌توانند زمانی رخ دهند که توسعه‌دهندگان مانیفست برنامه یا آیکون‌های مرتبط با آن را تغییر دهند. فرآیند به‌روزرسانی زمانی آغاز می‌شود که یک عامل کاربر با استفاده از یک لینک مانیفست، مانیفست را بازیابی می‌کند، که معمولاً زمانی اتفاق می‌افتد که کاربر از یک سایت بازدید می‌کند یا یک برنامه را (با آن مانیفست لینک شده) راه‌اندازی می‌کند. برای تعیین اینکه آیا به‌روزرسانی لازم است یا خیر، سیستم مانیفست فعلی و آیکون‌ها را با وضعیت ثبت شده قبلی مقایسه می‌کند. این روش منابع زیادی مصرف می‌کرد زیرا همیشه برای انجام مقایسه بیت‌مپ نیاز به دانلود آیکون‌ها از شبکه داشت.

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

با این رویکرد، توسعه‌دهندگان هنگام اجرای تغییرات حساس به امنیت ، مانند به‌روزرسانی نام یا آیکون یک برنامه، که اغلب تغییرات هویت برنامه نامیده می‌شود، مجبور بودند پیچیدگی‌هایی را پشت سر بگذارند. از آنجا که برنامه‌های وب فاقد یک مرجع مرکزی مانند Google Play برای بررسی به‌روزرسانی‌ها هستند، این تغییرات باید به وضوح برای تأیید به کاربران ارائه شوند. با این حال، تعیین مناسب‌ترین زمان برای درخواست این تغییرات از کاربران، همچنان یک چالش بود.

نسخه‌های قبلی پنجره‌ی به‌روزرسانی نیز اغلب با ادعای تغییر آیکون‌ها در حالی که از نظر بصری برای کاربر یکسان به نظر می‌رسیدند، باعث سردرگمی می‌شدند. این مشکل ناشی از تکیه بر مقایسه‌های مستقیم پیکسل بود که اغلب تفاوت‌های ناچیز را نشان می‌داد. در حالی که برخی از تغییرات ناشی از اصلاحات عمدی توسعه‌دهندگان بود، بسیاری از آنها ناشی از کدگذاری مجدد پویای تصاویر توسط CDNها بود. این فعال شدن بیش از حد و مکرر پنجره‌ی تأیید در نهایت منجر به غیرفعال شدن به‌روزرسانی آیکون‌ها در کروم ۹۱ شد.

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

یک هشدار که تغییر آیکون را نشان می‌دهد و یک پیام که به کاربر هشدار می‌دهد تا تغییر را تأیید کند یا برنامه را حذف نصب کند.
دسکتاپ (نسخه‌های منتشر نشده کروم ۹۱ به بعد)
یک هشدار موبایل که تغییر آیکون را نشان می‌دهد و پیامی که به کاربر هشدار می‌دهد تا تغییر را تأیید کند یا برنامه را حذف نصب کند.
اندروید (فعلی)

محدودیت‌ها و اهداف برای تغییرات در به‌روزرسانی‌های برنامه‌های وب

اهداف زیر، توسعه فرآیند به‌روزرسانی جدید را هدایت کردند:

  • انتظارات کاربر را حفظ کنید: از آنجا که هویت یک برنامه ذاتاً با منشأ آن مرتبط است، نام و نماد آن نباید بدون تأیید صریح کاربر تغییر کند.
  • تضمین ثبات عملکردی: برنامه‌ها باید تا حد امکان برای همه کاربران به‌روز باشند تا از عملکرد پایدار آنها اطمینان حاصل شود.
  • ارائه تجربه کاربری و دیالوگ‌های قابل پیش‌بینی: توسعه‌دهندگان باید بتوانند به راحتی پیش‌بینی کنند که کاربران چه زمانی با پیام‌های رابط کاربری در مورد به‌روزرسانی نام یا آیکون‌های برنامه مواجه می‌شوند.
  • بهینه‌سازی مصرف شبکه: مکانیزم به‌روزرسانی باید ترافیک داده‌های غیرضروری را به حداقل برساند.

چه چیزی در کروم ۱۴۴ تغییر کرده است؟

به‌روزرسانی‌های نام و آیکون اکنون اختیاری هستند

در گذشته، کاربران با یک پنجره‌ی محاوره‌ای مزاحم مواجه می‌شدند که از آنها می‌خواست یا برنامه را حذف نصب کنند یا فوراً تغییرات آیکون و نام را بپذیرند. این پنجره با یک پیشنهاد کاربرپسندتر که از طریق یک منوی سه‌نقطه‌ای گسترده قابل دسترسی است، جایگزین شده است. پس از انتخاب، کاربران اکنون می‌توانند در صورت تمایل، این تغییرات هویت را به طور کامل نادیده بگیرند.

در حالی که اکثر به‌روزرسانی‌های مانیفست بلافاصله اعمال می‌شوند، آیکون‌ها و نام‌های برنامه‌ها - که به عنوان اعضای حساس امنیتی در نظر گرفته می‌شوند - به طور جداگانه ذخیره می‌شوند. این به کاربران اجازه می‌دهد تا این تغییرات خاص را به راحتی بررسی و اعمال کنند.

منویی که گزینه «بررسی به‌روزرسانی برنامه» را نشان می‌دهد.

با کلیک بر روی «بررسی به‌روزرسانی برنامه»، کادر محاوره‌ای اصلاح‌شده نمایش داده می‌شود. عنوان بر اساس اینکه کدام عناصر به‌روزرسانی می‌شوند، تغییر می‌کند.

پنجره‌ی دسکتاپ از کاربر می‌خواهد که آیکون و نام کاربری مربوط به دیدگاهش را به‌روزرسانی کند.

اگر فیلد آیکون‌ها هیچ تغییری نداشته باشد، آیکون‌ها دانلود نمی‌شوند.

اگر فیلد icons در مانیفست مشابه آخرین نسخه اعمال شده باقی بماند، آیکون‌ها اکنون بدون تغییر در نظر گرفته می‌شوند. تحت این منطق جدید، کروم از دانلود آیکون‌ها برای مقایسه بصری اجتناب می‌کند و عملاً URLهای آیکون را به عنوان Cache-Control:immutable در نظر می‌گیرد. برای فعال کردن به‌روزرسانی آیکون، توسعه‌دهندگان اکنون ملزم به تغییر یا ابرداده یا URL آیکون هستند.

حذف دریچه گاز به‌روزرسانی

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

مدیریت تغییرات جزئی آیکون در پلتفرم‌های مختلف

برای بهبود تجربه کاربری، کروم اکنون به‌طور خودکار به‌روزرسانی‌های آیکونی را اعمال می‌کند که در مقایسه پیکسل به پیکسل، کمتر از ۱۰٪ تفاوت را نشان می‌دهند. این تضمین می‌کند که تغییرات جزئی، مانند مواردی که ناشی از کدگذاری مجدد CDN هستند، باعث ایجاد یک پنجره به‌روزرسانی گیج‌کننده برای کاربر نشوند.

این مقدار مجاز برای جلوگیری از سوءاستفاده‌های احتمالی به یک بار در روز محدود شده است. اگر تغییرات بیشتری در آن پنجره رخ دهد، آیکون به عنوان یک به‌روزرسانی استاندارد در نظر گرفته می‌شود و از کاربر خواسته می‌شود که تغییر را تأیید کند.

مثال به‌روزرسانی آیکون و نام

{
  "name": "Example App",
  "short_name": "App",
  "id": "https://www.example-app.com/",
  "start_url": "https://www.example-app.com/index.html",
  "scope": "https://www.example-app.com/",
  "icons": [
    {
      "src": "https://www.example-app.com/img/app.png",
      "sizes": "512x512",
      "type": "image/png",
      "purpose": "any"
    }
  ],

  ... other attributes omitted ...
}

تغییر آدرس اینترنتی آیکون تضمین می‌کند که کاربر یک کادر محاوره‌ای به‌روزرسانی برای تغییر آیکون مشاهده خواهد کرد.

{
  "name": "Example App",
  "short_name": "App",
  "id": "https://www.example-app.com/",
  "start_url": "https://www.example-app.com/index.html",
  "scope": "https://www.example-app.com/",
  "icons": [
    {
      "src": "https://www.example-app.com/img/app-NEW-URL.png",
      "sizes": "512x512",
      "type": "image/png",
      "purpose": "any"
    }
  ],

  ... other attributes omitted ...
}