آپدیت برنامه
کسی میدونه کافه بازار چطوری برنامه ها رو اپدیت میکنه که حجم آپدیت انقدر کم میشه؟
وقتی پسوند فایل apk را به zip تغییر میدیم می بینیم که شامل فایل های مختلفی هست. هر فایلی رو که درون فایل apk وجود داره رو میشه به یک رشته ی hash منحصر به فرد تبدیل کرد(که طولش فقط 128 بیت هست).با ارسال رشته ی هش فایل ها به سرور و مقایسه اونها با فایل هایی که در نسخه ی جدید برنامه که روی سرور وجود داره و دانلود کردن فقط فایل های تغییر کرده یا اضافه شده و دوباره zip کردنشون و تغییر نام دادن فایل نهایی به apk میشه این الگوریتم رو پیاده سازی کرد. به الگوریتم اش هم الگوریتم "دلتا آپدیت" می گن که بازار از الگوریتم دلتا آپدیت استفاده کرده.
A delta update is an update that only requires the user to download the code that has changed, not the whole program. It can significantly save time and bandwidth. The name is drawn from the fact that the Greek letter delta, Δ or δ, is used to denote change in mathematical sciences.
اطلاعات بیشتر : http://en.wikipedia.org/wiki/Delta_update
این الگوریتم رو شما خودتون هم می تونید برای خودتون روی سرورتون و برنامه هاتون پیاده سازی کنید اگه قابلیت force update رو برای برنامه هاتون گذاشتین .
الگوریتم دلتا آپدیت رو میشه به روشهای مختلف پیاده سازی کرد. یادمه بازار به برنامه نویسها ایمیل داده بود نسخه ی آزمایشی بازار رو قبل از انتشار رسمی دانلود کنید و خلاصه این که تستش کنید. وقتی دیدم قابلیت دلتا آپدیت رو داره برام قابل تحسین بود که بازار قابلیت دلتا آپدیت داره ولی گوکل پلی نداره. پیش خودم فکر کردم که چجوری پیاده سازی کردن. اول همین فکر شما به ذهنم رسید که نسخه های برنامه ها رو روی سرورشون دارن و فقط سمت سرور یه فایلی که شامل تفاوت ها هست وجود داره و فقط همون دانلود میشه (که ظاهرا همین طوره). ولی بعد یه خلا حس کردم (یه چیز handle نشده) و فکر می کردم بازار که حالا همچین الگوریتم خوبی نوشته حتما اینم handle کرده (که الان متوجه شدم نکرده). بیاین فرض کنیم برنامه نویسی نسخه ی 1.0 برنامه اش رو در گوگل پلی منتشر میکنه بعد همین جور چند تا آپدیت میده 1.2 1.3 1.4 تا نسخه ی مثلا 1.5 رو منتشر میکنه. بعد بازار حالا دست به کار میشه تصمیم می گیره برنامه رو توی مارکت خودش منتشر کنه. نسخه ی 1.5 برنامه رو توی مارکت خودش منتشر می کنه ولی به نسخه های قبلی دسترسی نداره. حالا اگه من کاربر نسخه ی 1.4 رو از گوگل پلی قبلا دانلود و نصب کرده باشم بخوام توی بازار برنامه رو به نسخه ی 1.5 ارتقا بدم الگوریتم دلتا آپدیت به این شکل فعلی که پیاده سازی شده کارایی نداره باید کل برنامه رو دانلود کنم چون بازار که نسخه ی 1.4 برنامه رو نداره که بخواد روی سرورش فایل تفاوت ها یا همون diff که مخفف different هست رو ایجاد کنه (ولی الگوریتمی که بالا گفتم این مشکلو نداره).
حالا اینا به کنار یه مشکلی دیگه هم داره که حوصله نداشتم دیگه اینو بگم، چون توضیح دادنش به صورت شفاف یکم سخته، ولی میگم. شما برای این که تست کنی و یک باگی توی سیستم آپدیت بازار ببینی این کارو بکن (شاید از نظر خودشون باگ نباشه، ولی من اسمشو باگ میذارم). من این کارو کردم اول نسخه ی قبلی یکی از برنامه ها مو نصب کردم بعد رفتم تو بخش توضیحات برنامه توی بازار دیدم برای بروزرسانی به جای 30 مگابایت لازمه فقط 17 کیلوبایت دانلود بشه بعد توی اکلیپس ورژن کد برنامه رو از 7 آوردم رو 6 و 15 مگابایت از فایلهایی که توی پوشه ی assets برنامه بود حذف کردم و برنامه رو نصب کردم رفتم تو بازار دیدم بازم نوشته 17 کیلوبایت D: ، زدم به روزرسانی دیدم بازار اون 17 کیلوبایت رو دانلود کرد و 10 ثانیه ای ذره هنگ کرد و یک Toast نشون داد "بسته ی دانلود شده نصب نشد!" بعد بدون این که چیزی بپرسه پروگرس بار اومد اول و کل حجم برنامه رو دانلود کرد (یعنی هم اون 17 کیلوبایت و 30 مگابایت رو دانلود کرد) .حالا تصور کنین اگه اون 17 کیلوبایت برای یک برنامه ی دیگه ممکنه 5 مگابایت باشه .خوب کاربر این جا به جای این که حجم کمتری دانلود کنه 5 مگابایت هم باید اضافه دانلود کنه و کامل نسخه ی جدید برنامه هم دانلود بشه. 5 مگابایت الکی بازار پهنای باند از دست داده و پنج مگابایت کاربر از دست داده و یه سری پردازش اضافی روی سرور انجام شده و وقت کاربر هم به ازای دانلود اون 5 مگابایت تلف شده( هم هزینه اضافی برای دو طرف هم تلف شدن وقت). شاید بگین چه وقت همچین مشکلی پیش میاد؟ شاید بگین ما که نمیایم نسخه ی قبلی برنامه مون رو تغییر بدیم و یک سری فایل هم فرضا حذف کنیم و دوباره منتشرش کنیم؟ (مگه بیکاریم آغا؟ D: ) وقتی این مورد پیش میاد که من برنامه نویس، نسخه ی 6 برنامه ام در مارکت کندو، با نسخه ی 6 برنامه ام در مارکت بازار فرق داشته باشه. کاربر نسخه ی 6 رو از کندو دانلود کرده حالا میاد نسخه ی 7 رو از بازار دانلود کنه میبینه به جای 30 مگابایت نوشته 17 کیلوبایت.خیلی خوشحال میزنه دانلود، میبینه نه بابا 17 کیلو بایت دانلود شد و بازار یه خورده هنگید و دوباره 30 مگابایت هم داره دانلود میشه، اون موقع نصب میشه.( خوب اگه این 17 کیلوبایت بیشتر بود چی؟ از دست دادن پهنای باند و تلف شدن وقت
در هر صورت کار بازار هنوز برام قابل تحسینه، شاید هم بشه بهتر پیاده سازیش کرد با اون روشی که گفتم.
ویرایش: البته با یک روش میشه کاری کرد که هر بار فایل تجزیه نشه و اون عملیات هر بار انجام نشه. میشه ابتدا یک رشته ی هش از کل فایل ایجاد بشه، به سرور فرستاده بشه اگه نیاز بود یک فایل diff توی سرور ایجاد بشه دفعه های بعد همون فایل دانلود بشه و هر بار نیاز به تجزیه نباشه و این کار رو برای مارکت ها هم امکان پذیر می کنه و میشه الگوریتمی که توی پاسخ قبلی گفتم رو عملی کرد.
کار زیاد سختی نیست پیاده سازیش.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .