پرش به محتوا
آرش حاتمی

hatamiarash7/ pingsx-overview

سال توسعه: ۱۴۰۴ متن‌باز

خلاصه و مقایسهٔ تأخیر شبکه در ping.sx

افزونهٔ مرورگر برای جمع‌بندی نتایج ping.sx؛ با نمایش میانگین تأخیر موقعیت‌ها و امکانات تحلیل زنده، مقایسهٔ اجراها و خروجی CSV و JSON در نسخهٔ توسعه.

وقتی نتیجهٔ Ping از موقعیت‌های مختلف را در ping.sx بررسی می‌کنید، خواندن تک‌تک ردیف‌ها برای رسیدن به یک تصویر کلی زمان می‌برد. افزونهٔ Ping.Sx Overview داده‌های همان صفحه را می‌خواند و خلاصه‌ای از تأخیرها را در پنجرهٔ افزونه نشان می‌دهد؛ ابزاری برای دیدن وضعیت کلی و پیدا کردن موقعیت‌هایی که تأخیر بیشتری دارند.

خود افزونه آزمون شبکه اجرا نمی‌کند. اندازه‌گیری‌ها را ping.sx انجام می‌دهد و افزونه، جدول نتیجهٔ تب فعال را پردازش می‌کند. بنابراین برای استفاده باید صفحهٔ آزمون باز باشد و داده‌های آن بارگذاری شده باشند.

نصب و شروع استفاده

برای نصب نسخهٔ منتشرشده، در Firefox به صفحهٔ افزونه بروید و آن را به مرورگر اضافه کنید. سپس:

۱. یک صفحهٔ آزمون، مانند Ping برای آدرس 1.1.1.1، باز کنید.

۲. صبر کنید نتایج موقعیت‌ها در جدول ظاهر شوند.

۳. در حالی که همان تب فعال است، روی آیکون افزونه در نوار ابزار یا فهرست افزونه‌ها کلیک کنید.

نسخهٔ منتشرشده، میانگین ستون‌های آخرین، متوسط، بهترین و بدترین تأخیر را نمایش می‌دهد و فهرستی پنج‌تایی از موقعیت‌ها دارد.

تفاوت نسخهٔ فروشگاه و کد مخزن: در بررسی ۱ آبان ۱۴۰۵، نسخهٔ موجود در فروشگاه Firefox برابر با 1.0.0 است؛ امکاناتی مانند آمار زنده، میانه و صدک، مقایسه و خروجی فایل در شاخهٔ main پیاده‌سازی شده‌اند، اما در تاریخچهٔ تغییرات هنوز زیر عنوان Unreleased قرار دارند. بخش‌های بعدی این امکانات نسخهٔ توسعه را توضیح می‌دهند و نباید انتظار داشت همگی در نسخهٔ فروشگاه موجود باشند.

آمار نسخهٔ توسعه چه معنایی دارد؟

خلاصهٔ اصلی، میانگین مقدار avg موقعیت‌های دارای دادهٔ معتبر است. کنار آن، میانه و صدک ۹۵ همین مقادیر نمایش داده می‌شود. این تفاوت مهم است: صدک ۹۵ از میانگین تأخیر هر موقعیت محاسبه می‌شود، نه از تک‌تک بسته‌های Ping در تمام موقعیت‌ها.

برای نمونه، اگر مقدار avg سه موقعیت به‌ترتیب ۲۰، ۴۰ و ۹۰ میلی‌ثانیه باشد، میانگین آن‌ها ۵۰، میانه ۴۰ و صدک ۹۵ با روش درون‌یابی خطی این پیاده‌سازی، ۸۵ میلی‌ثانیه خواهد بود. هر موقعیت در میانگین وزن یکسانی دارد.

امکانات دیگر عبارت‌اند از:

  • میانگین آخرین، بهترین و بدترین تأخیر: برای مرور ستون‌های last، best و worst در یک نگاه.
  • فهرست بیشترین تأخیر: نمایش ۵، ۱۰ یا ۱۵ موقعیت با مرتب‌سازی نزولی بر اساس avg و نوار بصری تأخیر. مقدار پیش‌فرض ۵ است و انتخاب کاربر ذخیره می‌شود.
  • به‌روزرسانی زنده: با رسیدن نتایج و تغییر جدول، آمار دوباره محاسبه می‌شود. دکمهٔ Refresh نیز برای خواندن دستی داده‌ها وجود دارد.
  • نمایش وضعیت: اگر صفحهٔ فعال مربوط به ping.sx نباشد یا هنوز داده‌ای نرسیده باشد، به‌جای آمار نامعتبر پیام راهنما نشان داده می‌شود.

منطق خواندن جدول و محاسبات در فایل content.js قرار دارد. تنها ردیف‌هایی وارد محاسبه می‌شوند که مقادیر عددی لازم، از جمله انحراف معیار، را داشته باشند؛ پس تعداد موقعیت‌های محاسبه‌شده ممکن است با تعداد کل ردیف‌های صفحه برابر نباشد.

ذخیرهٔ مبنا و مقایسهٔ دو اجرا

در نسخهٔ توسعه می‌توانید نتیجهٔ یک اجرا را مبنای مقایسه قرار دهید:

۱. بعد از بارگذاری نتایج، پنجرهٔ افزونه را باز کنید و Save را بزنید.

۲. آزمون را دوباره اجرا کنید؛ برای مثال پس از تغییری در تنظیمات شبکهٔ مقصد.

۳. پنجرهٔ افزونه را باز کرده و گزینهٔ Compare را فعال کنید.

اختلاف میانگین‌ها و تغییر متوسط تأخیر هر موقعیت نمایش داده می‌شود. کاهش تأخیر با رنگ سبز و افزایش آن با رنگ قرمز مشخص می‌شود. فهرست موقعیت‌ها در این حالت بر اساس بزرگی تغییر مرتب می‌شود؛ موقعیت‌های تازه یا حذف‌شده هم با برچسب‌های new و gone در انتهای فهرست قرار می‌گیرند و ممکن است خارج از تعداد انتخاب‌شده باشند.

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

خروجی گرفتن از داده‌ها

دکمه‌های CSV و JSON در نسخهٔ توسعه، دادهٔ هر موقعیت را به‌ترتیب در فایل‌های pingsx.csv و pingsx.json ذخیره می‌کنند. خروجی CSV این ستون‌ها را دارد:

location,last,avg,best,worst,stdev

خروجی JSON آرایه‌ای از ردیف‌هاست و نام فیلد بدترین تأخیر در آن wrst است، نه worst. این فایل‌ها دادهٔ موقعیت‌ها را نگه می‌دارند؛ خلاصهٔ آماری و اختلاف با مبنا جزو خروجی نیستند. جزئیات ذخیره‌سازی، مقایسه و خروجی در فایل modal.js قابل بررسی است.

آزمایش کد مخزن در Firefox

برای بررسی امکانات منتشرنشده، می‌توانید کد را با Git دریافت کنید:

git clone https://github.com/hatamiarash7/pingsx-overview.git
cd pingsx-overview

پروژه از فایل‌های JavaScript، HTML و CSS و ساختار Manifest V3 استفاده می‌کند و برای بارگذاری این کد به نصب وابستگی با npm یا مرحلهٔ ساخت نیاز ندارد. در Firefox آدرس about:debugging را باز کنید، وارد This Firefox شوید، Load Temporary Add-on را بزنید و فایل manifest.json مخزن را انتخاب کنید.

این روش مطابق راهنمای نصب موقت Mozilla برای آزمایش و توسعه است؛ نصب افزونه با بسته شدن و اجرای دوبارهٔ مرورگر باقی نمی‌ماند. برای استفادهٔ معمول، مسیر نصب از فروشگاه را انتخاب کنید.

نحوهٔ کار و محدودیت‌ها

در کد فعلی، باز کردن پنجرهٔ افزونه باعث اجرای اسکریپت خواندن داده در تب فعال می‌شود. ستون‌ها ابتدا از روی عنوانشان شناسایی می‌شوند و برای عنوان‌های ناشناخته، جایگاه‌های پیش‌فرض به کار می‌روند. سپس تغییرات ساختار صفحه با MutationObserver دنبال می‌شود. این وابستگی به جدول HTML یعنی تغییر ساختار ping.sx ممکن است به اصلاح افزونه نیاز داشته باشد.

مجوزهای نسخهٔ توسعه شامل activeTab، scripting و storage هستند: برای دسترسی به تب فعال، اجرای اسکریپت و نگه‌داری تنظیمات و مبنای مقایسه. پردازش آمار در مرورگر انجام می‌شود، اما اجرای آزمون همچنان به سرویس ping.sx وابسته است.

این خلاصه برای مقایسهٔ تأخیر موقعیت‌های دارای نتیجه مفید است؛ ردیف‌های فاقد دادهٔ عددی در آن حساب نمی‌شوند و نباید میانگین نمایش‌داده‌شده را معیاری برای دسترس‌پذیری همهٔ موقعیت‌ها در نظر گرفت. کد پروژه با مجوز MIT منتشر شده و راهنمای استفاده و تغییرات بعدی در مخزن پروژه در دسترس است.