بهبود جستجوی گوگل با دیکشنری های فشرده

منتشر شده: ۱۴ مه ۲۰۲۵

فشرده‌سازی دیکشنری انتقال (Compression Dictionary Transport ) استاندارد جدیدی است که به ما امکان می‌دهد محتوای تکراری را در درخواست‌های مختلف فشرده کنیم و در اواخر سال ۲۰۲۴ در کروم ۱۳۰ منتشر شد. جستجوی گوگل این فناوری جدید را به کار گرفته و پیشرفت‌های چشمگیری را تجربه کرده است.

فرصت

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

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

صفحه نتایج جستجوی گوگل معمولی با نوار جستجو در بالا، نتایج در ستون اصلی سمت چپ و اطلاعات تکمیلی در سمت راست
صفحه نتایج جستجوی گوگل

در نهایت در پایین، گزینه‌های صفحه‌بندی و پاورقی استاندارد را داریم. این فقط چیزی است که از نظر بصری در دسترس است - در پشت صحنه کد زیادی (HTML، CSS و جاوا اسکریپت) برای تولید این صفحه وجود دارد. بخش زیادی از این کد به عنوان بهینه‌سازی عملکرد، مستقیماً در HTML صفحه قرار داده شده است. اگرچه این امر باعث بارگذاری سریع‌تر صفحه می‌شود، اما هزینه عدم اشتراک‌گذاری آن کد بین صفحات نتایج مختلف را نیز به همراه دارد - مانند یک منبع ذخیره‌شده خارجی که این امکان را فراهم می‌کند.

فشرده‌سازی در وب

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

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

فرهنگ لغت فشرده سازی حمل و نقل به نجات!

Browser Support

  • کروم: ۱۳۰.
  • لبه: ۱۳۰.
  • پیش‌نمایش فناوری فایرفاکس: پشتیبانی می‌شود.
  • سافاری: پشتیبانی نمی‌شود.

Source

فشرده‌سازی دیکشنری انتقال (Compression Dictionary Transport) استاندارد جدیدی است که امکان فشرده‌سازی بین منابع را با استفاده از «دیکشنری‌های» مشترک فراهم می‌کند. این «دیکشنری‌ها» امکان جایگزینی سری‌های مشترک بایت‌ها با ارجاعاتی از آن دیکشنری مشترک را فراهم می‌کنند.

الگوریتم‌های فشرده‌سازی مدرن مانند Brotli و Zstandard از استفاده از فرهنگ لغت اصطلاحات رایج پشتیبانی می‌کنند که با جایگزینی آن اصطلاحات با ارجاع کوچکتر به فرهنگ لغت، امکان فشرده‌سازی بیشتر را فراهم می‌کند. Brotli حتی با یک فرهنگ لغت داخلی از اصطلاحات رایج وب ارائه می‌شود. Compression Dictionary Transport با ارائه راه‌هایی برای سرور و مرورگر برای اشتراک‌گذاری فرهنگ لغت‌های سفارشی، بر این اساس عمل می‌کند.

دیکشنری‌های سفارشی می‌توانند منبعی باشند که از قبل در سایت استفاده می‌شوند. برای مثال، می‌توانید هنگام دانلود app.v1.js از app.v2.js به عنوان دیکشنری استفاده کنید تا اساساً فقط تفاوت را دانلود کنید (که اغلب به عنوان "delta-compression" شناخته می‌شود). به عنوان یک روش جایگزین، می‌توان یک منبع دیکشنری جداگانه را با برچسب <link rel="compression-dictionary"> (یا معادل آن در هدر Link HTTP) مشخص کرد.

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

استفاده جستجوی گوگل از دیکشنری‌های فشرده‌سازی

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

جستجو از فشرده‌سازی اشتراکی Brotli برای صفحات نتیجه خود با یک فایل دیکشنری جداگانه که از یک نمونه نماینده از نتایج جستجو ساخته شده است، استفاده می‌کند. یک خط لوله خودکار قوی تضمین می‌کند که دیکشنری به‌روز می‌ماند و با محتوای SRP که مرتباً تغییر می‌کند و چندین بار در روز منتشر می‌شود، همگام است. می‌توانید از DevTools برای مشاهده دقیق نحوه کار این روش استفاده کنید.

وقتی یک کلاینت برای اولین بار صفحه نتایج جستجو را بارگذاری می‌کند، سرور با استفاده از Link: HTTP با نوع rel=compression-dictionary لینکی به دیکشنری ارائه می‌دهد:

هدرهای HTTP پاسخ در Chrome DevTools با هدر Link rel=compression-dictionary هایلایت شده
ابزارهای توسعه کروم، هدر Link را در تب شبکه نشان می‌دهند

اگر کلاینت از فشرده‌سازی دیکشنری Brotli پشتیبانی کند، اما هنوز دیکشنری مشترک را ذخیره نکرده باشد، مرورگر این دیکشنری را در زمان بیکاری دانلود می‌کند. پاسخ دیکشنری شامل هدر پاسخ Use-As-Dictionary است که به مرورگر می‌گوید از این دیکشنری برای چه منابعی می‌تواند استفاده کند:

هدرهای HTTP پاسخ در Chrome DevTools با هدر Use-As-Dictionary هایلایت شده
ابزارهای توسعه کروم (Chrome DevTools) در تب شبکه، هدر Use-As-Dictionary را نشان می‌دهند.

این دیکشنری از معانی استاندارد cache-control پنهان استفاده خواهد کرد و برای هر منبعی که با قوانین تعریف شده در آن هدر مطابقت داشته باشد، در دسترس خواهد بود - در این مثال صفحاتی که با /search شروع شده‌اند.

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

هدرهای HTTP پاسخ در Chrome DevTools با هدر Available-Dictionary هایلایت شده
ابزارهای توسعه کروم، سربرگ Available-Dictionary را در تب Network نشان می‌دهند

با فعال کردن کادر انتخاب Preserve log و فیلتر کردن آن، می‌توانیم دو پاسخ را با هم مقایسه کنیم:

مقایسه دو دانلود از یک منبع مشابه که حجم اولی ۱۰۷ کیلوبایت و دومی ۶۰ کیلوبایت است
تب شبکه Chrome DevTools

در این مثال، درخواست اول، پاسخ کامل ۱۰۷ کیلوبایتی است و از فشرده‌سازی Brotli ( br ) استفاده می‌کند، در حالی که درخواست بارگذاری مجدد دوم تقریباً نصف اندازه ۶۰ کیلوبایت است و از فشرده‌سازی Dictionary-Compressed Brotli ( dcb ) استفاده می‌کند که منجر به زمان دانلود سریع‌تر می‌شود.

در کروم، می‌توانید صفحه chrome://net-internals/#sharedDictionary را برای مشاهده Shared Dictionaries مشاهده کنید و اگر می‌خواهید این مثال را از ابتدا تکرار کنید، آنها را پاک کنید.

صفحه فرهنگ لغت مشترک که یک فرهنگ لغت مشترک را نشان می‌دهد
صفحه #sharedDictionary

نتایج

این تغییر در بهار ۲۰۲۵ برای کاربران جستجو، و در ابتدا برای کاربران کروم، اعمال شد. این تغییر، میانگین اندازه‌ی بار HTML را در بین تمام کاربران کروم در مقایسه با فشرده‌سازی استاندارد Brotli، ۲۳٪ کاهش داد. این میانگین کلی شامل نتایج غیر فشرده‌شده با دیکشنری (برای مثال کاربرانی که برای اولین بار بدون دیکشنری جستجو می‌کنند) و نتایج جستجوی فشرده‌شده با دیکشنری می‌شود. برای نتایج فشرده‌شده با دیکشنری، صرفه‌جویی‌ها حتی بیشتر هم می‌شود - همانطور که در مثال قبلی که بررسی کردیم، با بهبود تقریباً ۵۰٪ مشاهده کردیم.

این منجر به بهبود کلی ۱.۷ درصدی در بزرگترین رنگ محتوا (LCP) و تا ۹ درصد در شبکه‌های با تأخیر بالا شد. این ممکن است کوچک به نظر برسد، اما جستجوی گوگل یک سایت فوق‌العاده بهینه شده است، بنابراین دستاوردهایی به این بزرگی بسیار زیاد است. سایت‌های دیگر ممکن است با این فناوری شاهد بهبودهای حتی بزرگتری باشند.

آن را در سایت خود امتحان کنید!

Compression Dictionary Transport اکنون در تمام مرورگرهای مبتنی بر کرومیوم (کروم، اج، اپرا و غیره) آماده استفاده است. این یک پیشرفت تدریجی است که توسط مرورگرهای غیرپشتیبان نادیده گرفته می‌شود، اما با پشتیبانی مرورگرهای بیشتر، آنها نیز می‌توانند از آن بهره‌مند شوند.

چالش‌هایی که این فناوری به آن‌ها می‌پردازد، مختص جستجوی گوگل نیستند. بسیاری از سایت‌ها می‌توانند از Compression Dictionary Transport بهره‌مند شوند، چه با استفاده از یک دیکشنری جداگانه مانند Search و چه با استفاده از یک منبع موجود به عنوان دیکشنری (مانند نسخه قبلی یک برنامه هنگام انتشار نسخه جدید).

برای جزئیات بیشتر در مورد نحوه‌ی کارکرد این فناوری و نحوه‌ی پیاده‌سازی آن در سایت خود، به راهنمای MDN مراجعه کنید.

این کار نیاز به تنظیماتی روی سرور یا فرآیند ساخت شما دارد تا منابع فشرده مبتنی بر دیکشنری ایجاد کرده و در صورت لزوم از آنها استفاده کند - اما نتایج از نظر عملکرد می‌توانند واقعاً چشمگیر باشند!