پادشاهِ کُدنویسا شو!
کینگتو - آموزش برنامه نویسی تخصصصی - دات نت - سی شارپ - بانک اطلاعاتی و امنیت

زبان برنامه‌نویسی تلگرام برای ویندوز چیست؟ و چرا این‌قدر سبک و سریع اجرا می‌شود؟

11 بازدید 0 نظر ۱۴۰۵/۰۶/۲۳
سوال اصلی این است: راز پشت این کارایی شگفت‌انگیز چیست؟ تلگرام دسکتاپ با چه زبان و معماری توسعه یافته و چه تدابیر مهندسی در زیرکاپوت (Under the Hood) آن به کار رفته است؟

یکی از حواشی و رقابت‌های همیشگی در دنیای توسعه نرم‌افزار، مقایسه کارایی (Performance) برنامه‌های دسکتاپ است. در روزگاری که اکثر پیام‌رسان‌ها و نرم‌افزارهای مدرن دسکتاپ (مانند واتساپ، اسلک، دیسکورد و تایپسکریپت/VS Code) حافظه رم (RAM) سیستم را ببلعند و حتی در قوی‌ترین سخت‌افزارها تاخیرهای ریز (Lag) نشان دهند، نسخه دسکتاپ تلگرام (Telegram Desktop) مثل یک معجزه مهندسی عمل می‌کند: اجرای آنی، مصرف حافظه رم در حد چند ده مگابایت، سرعت اسکرول ۶۰/۱۲۰ فریم بر ثانیه و واکنش‌گرایی بدون وقفه حتی هنگام جابه‌جایی هزاران پیام و فایل چندرسانه‌ای.

 

زبان برنامه‌نویسی اصلی: ++C (ویژوال سی‌پلاس‌پلاس)

پاسخ کوتاه و مستقیم به سوال اول این است: نسخه دسکتاپ تلگرام (از جمله نسخه ویندوز) کاملاً به زبان ++C نوشته شده است.

برخلاف تصور بسیاری از کاربران که فکر می‌کنند تلگرام از فریم‌ورک‌های وب محور استفاده می‌کند، سورس‌کد پروژه Telegram Desktop (TDESK) بر پایه استاندارد مدرن ++C17 و ++C20 بنا شده است.

چرا ++C؟

  1. کنترل مستقیم بر مدیریت حافظه (Manual Memory Management): در ++C هیچ سیستم Garbage Collector (GC) وجود ندارد که به طور ناگهانی اجرای برنامه را برای پاکسازی حافظه متوقف کند (مفهوم GC Pause). همه چیز به‌صورت دستی و با الگوی RAII (Resource Acquisition Is Initialization) و اشاره‌گرهای هوشمند (std::unique_ptr و std::shared_ptr) مدیریت می‌شود.
  2. کامپایل به کد نیتیو (Native Machine Code): کد ++C مستقیماً به دستورات معماری پردازنده (x86 یا x64) کامپایل می‌شود و هیچ لایه واسطی مانند مرورگر داخلی، مجازی‌ساز یا Virtual Machine (مانند JVM یا CLR) بین برنامه و سیستم‌عامل وجود ندارد.
  3. دسترسی مستقیم به APIهای ویندوز (Win32 / Direct2D): کدهای ++C می‌توانند مستقیماً و بدون لایه‌های ترجمه (Abstraction Overhead) با زیرسیستم‌های گرافیكی و شبکه‌ای ویندوز ارتباط برقرار کنند.

 

فریم‌ورک گرافیکی: Qt Framework (اما با دستکاری و بهینه‌سازی سنگین!)

تلگرام دسکتاپ برای مدیریت پنجره‌ها، Event Loop و اجزای پایه رابط کاربری (UI) از فریم‌ورک قدرتمند و چندپلتفرمی Qt (کیوت) استفاده می‌کند. اما نکته کلیدی اینجاست: تلگرام از رندرینگ استاندارد و سنگین Qt Widgets یا Qt Quick/QML استفاده نمی‌کند!

تیم توسعه تلگرام به رهبری جان پاکر (John Seamons / John Veitch - سازنده اصلی Telegram Desktop)، بخش رندرینگ گرافیکی Qt را تقریباً بازنویسی کرده‌اند.

رندرینگ سفارشی (Custom Painting Engine)

در برنامه‌های معمولی Qt، هر دکمه یا متن یک آبجکت کامل در حافظه است که درخت کامپوننت‌ها (Component Tree) را سنگین می‌کند. اما در تلگرام:

  • تمامی انیمیشن‌ها، لیست پیام‌ها، حباب‌های چت (Chat Bubbles) و استیکرها به صورت دستی و پیکسل‌به‌پیکسل روی یک Canvas پایه‌ای نگاشته (Draw) می‌شوند.
  • از موتور رندرینگ OpenAL برای صدا و OpenGL / Direct3D / Software Rasterizer اختصاصی برای رندر گرافیک استفاده می‌شود.
  • به‌جای ایجاد صدها ویجت برای هزاران پیام درون یک چت، تلگرام تنها پیام‌های موجود در محدوده دید صفحه (Viewport) را محاسه و رندر می‌کند (تکنیک UI Virtualization در سطوح پایین حافظه).

 

چرا تلگرام دسکتاپ این‌قدر سبک و سریع است؟ (تحلیل معماری مهندسی)

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

عدم استفاده از Electron.js (بزرگ‌ترین تفاوت با رقبا)

اکثر برنامه‌های دسکتاپ امروزی (واتساپ دسکتاپ قبلی، دیسکورد، اسلیک، تلگرام وب، نوتیفیکیشن‌ها و...) بر پایه فریم‌ورک Electron ساخته شده‌اند.

الکترون در واقع یک مرورگر کامل Chromium به همراه محیط اجرای Node.js را در قالب یک فایل .exe بسته‌بندی می‌کند. یعنی وقتی دیسکورد یا واتساپ را باز می‌کنید، در واقع یک مرورگر کروم جدید باز کرده‌اید که ۲۰۰ تا ۶۰ و ۵۰۰ مگابایت رم را فقط برای بالا آمدن موتور مرورگر مصرف می‌کند!

در مقابل، تلگرام دسکتاپ یک Native Executable واقعی است:

[ Electron Apps (Discord, Slack, Whatsapp) ]
+------------------------------------------+
|  Your Application Code (JS/HTML/CSS)     |
+------------------------------------------+
|  Node.js Engine                          |
+------------------------------------------+
|  Chromium Browser Engine (V8, Blink, etc)|
+------------------------------------------+
|  Windows OS / Hardware                   |
+------------------------------------------+
  --> RAM Consumption: 500MB - 1.5GB
  --> Startup Time: 3 - 8 Seconds

[ Telegram Desktop (C++ / Custom Qt) ]
+------------------------------------------+
|  Telegram Code & Custom UI Engine (C++)  |
+------------------------------------------+
|  Native Win32 / Direct2D / OpenGL APIs   |
+------------------------------------------+
|  Windows OS / Hardware                   |
+------------------------------------------+
  --> RAM Consumption: 30MB - 80MB
  --> Startup Time: < 0.5 Seconds

 

پروتکل شبکه اختصاصی MTProto و کتابخانه TDLib

بخش عمده‌ای از سرعت تلگرام در دریافت و ارسال پیام، مربوط به پروتکل ارتباطی آن یعنی MTProto است:

  • اکثر برنامه‌ها از WebSocket یا REST APIهای پایه HTTP/JSON استفاده می‌کنند که overhead بسیار بالایی در هدرها و parsing رشته‌ها دارند.
  • تلگرام از پروتکل Binary MTProto استفاده می‌کند. داده‌ها به فشرده‌ترین شکل ممکن (Serialization بایت‌ها) تبدیل شده و روی سوکت‌های خام TCP منتقل می‌شوند.
  • منطق شبکه و همگام‌سازی (Sync) تلگرام در قالب کتابخانه‌ای فوق‌العاده بهینه به نام TDLib (Telegram Database Library) پیاده‌سازی شده که تمام عملیات دیتابیس محلی (با SQLite بهینه‌شده)، رمزنگاری و مدیریت صف‌های شبکه را در نخی مجزا (Background Thread) انجام می‌دهد.

مدیریت هوشمندانه حافظه و کش (Cache Management)

تلگرام دسکتاپ از حافظه رم و دیسک به شکلی تهاجمی اما هوشمندانه محافظت می‌کند:

  1. Lazy Loading و Image Decoders: تصاویر و استیکرها تا زمانی که روی صفحه اسکرول نشوند، در حافظه RAM دکد (Decode) نمی‌شوند.
  2. Custom Memory Pool Allocators: برای جلوگیری از Overhead تخصیص‌های مکرر حافظه توسط OS (malloc/free)، تلگرام از سیستم تخصیص سفارشی حافظه برای بایت‌های پیام استفاده می‌کند.
  3. فشرده‌سازی استیکرها (RLottie / TGS): استیکرهای متحرک تلگرام از فرمت انحصاری .tgs (بر پایه Lottie اما فشرده‌شده با Gzip و رندرشده با موتور C++ بسیار سبک به نام rlottie) استفاده می‌کنند. این استیکرها با نرخ ۶۰ فریم بر ثانیه رندر می‌شوند در حالی که مصرف CPU آن‌ها نزدیک به صفر است.

معماری Multi-Threading کاملاً ایزوله

در تلگرام دسکتاپ، رابط کاربری (UI Thread) به هیچ عنوان منتظر ورودی/خروجی (I/O) نمی‌ماند:

  • UI Thread: فقط مسئول رندرینگ ۶۰/۱۲۰ فریم و دریافت ورودی‌های کاربر (موس و کیبورد).
  • Network Thread Pool: دانلود و آپلود فایل‌ها به صورت تکه‌تکه (Chunking) و موازی.
  • Database Thread: درج و خواندن پیام‌ها از دیتابیس محلی SQLite بدون مسدودسازی UI.
  • Media Decoding Thread: دکد کردن ویدیوها، ویس‌ها (Opus Codec) و عکس‌ها.

نتیجه این معماری این است که حتی اگر ۵ فایل با سرعت بالا در حال دانلود باشند و دیتابیس در حال ذخیره‌سازی هزاران پیام باشد، رابط کاربری برنامه کوچک‌ترین افت فریمی (Lag) تجربه نمیکند.

 

ساختار معماری پروژه Telegram Desktop در ویندوز

اگر سورس‌کد تلگرام دسکتاپ را در گیت‌هاب (telegramdesktop/tdesktop) بررسی کنید، با سه‌لایه اصلی روبه‌رو می‌شوید:

  1. Telegram/SourceFiles/ui/: تمام کامپوننت‌های گرافیکی سفارشی، انیمیشن‌ها، افکت‌های Blur، شیشه‌ای (Acrylic) و سیستم رندرینگ اختصاصی.
  2. Telegram/SourceFiles/boxes/ و chat_helpers/: منطق مربوط به دیالوگ‌ها، پنجره‌های گفتگو، پنل استیکرها و رندر پیام‌ها.
  3. Telegram/SourceFiles/mtproto/ و data/: مدیریت پروتکل ارتباطی با سرورهای تلگرام، کلیدهای رمزنگاری و مدیریت ساختار داده‌های سری‌های زمانی.

برای کامپایل نسخه ویندوز از کامپایلر MSVC (Microsoft Visual C++) یا MinGW استفاده می‌شود که با پرچم‌های بهینه‌سازی حداکثری (/O2 یا /Ox برای کارایی حداکثری در حجم و سرعت) کامپایل می‌گردد.

 

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

در حالی که صنعت امروزی نرم‌افزار به سمت توسعه سریع با فریم‌ورک‌های وب-پایه (مثل الکترون) رفته که نتیجه آن برنامه‌های سنگین و کند است، تیم تلگرام مسیر سخت‌تر یعنی توسعه بومی (Native C++) و طراحی اختصاصی موتورهای رندر و شبکه را انتخاب کرد.

 
لینک استاندارد شده: saF

0 نظر

    هنوز نظری برای این مقاله ثبت نشده است.
جستجوی مقاله و آموزش
دوره‌ها با تخفیفات ویژه