برای دههها، توسعهدهندگان بکاند از ابزارهای قدرتمندی برای نظارت، اشکالزدایی و بهینهسازی برنامههای خود بهرهمند بودهاند. مفاهیمی مانند لاگها، متریکها و ردیابی توزیعشده (distributed tracing) ستونهای اصلی «قابلیت مشاهده» یا Observability هستند. اما در دنیای فرانتاند، ما اغلب در تاریکی به سر میبریم و با مشکلات عملکردی دست و پنجه نرم میکنیم که ردیابی علت اصلی آنها دشوار است. خوشبختانه، با استفاده از ابزارهایی مانند OpenTelemetry (OTel)، میتوانیم همان سطح از شفافیت و کنترل را به رابط کاربری (UI) بیاوریم.
وقتی یک برنامه کند است، اولین جایی که کاربر متوجه آن میشود، رابط کاربری است. کلیکهای با تأخیر، انیمیشنهای کند و زمان بارگذاری طولانی، همگی تجربه کاربری را خدشهدار میکنند. مشکل اینجاست که تعیین منشأ این کندی دشوار است. آیا مشکل از رندر شدن کامپوننت در مرورگر است؟ آیا یک فراخوانی API به بکاند کند است؟ یا شاید مشکل از شبکه باشد؟ بدون داشتن یک دید کامل از کل فرآیند، اشکالزدایی به یک بازی حدس و گمان تبدیل میشود. اینجاست که ردیابی فرانتاند (frontend tracing) وارد میدان میشود.
ردیابی یا Tracing، فرآیند دنبال کردن یک درخواست از ابتدا تا انتها در یک سیستم توزیعشده است. هر سفر کامل یک «Trace» نامیده میشود و هر مرحله یا عملیات در طول این سفر یک «Span» است. به طور سنتی، این مفهوم برای ردیابی یک درخواست در میان چندین میکروسرویس در بکاند استفاده میشد.
اکنون میتوانیم این مفهوم را به فرانتاند گسترش دهیم. وقتی کاربر روی یک دکمه کلیک میکند، یک Trace جدید آغاز میشود. خود عمل کلیک یک Span والد ایجاد میکند. اگر این کلیک منجر به یک درخواست شبکه (API call) شود، آن درخواست به یک Span فرزند تبدیل میشود. مهمترین بخش این است که یک شناسه منحصربهفرد (Trace ID) از فرانتاند به هدرهای درخواست HTTP اضافه شده و به بکاند ارسال میشود. این کار به ما اجازه میدهد تا تعامل کاربر در مرورگر را مستقیماً به پردازشهای سمت سرور و حتی کوئریهای پایگاه داده متصل کنیم.
OpenTelemetry یا به اختصار OTel، یک پروژه متنباز و استاندارد صنعتی برای جمعآوری دادههای تلهمتری (متریکها، لاگها و تریسها) است. OTel مجموعهای غنی از کتابخانهها و SDKها را برای زبانهای مختلف، از جمله جاوا اسکریپت، فراهم میکند که پیادهسازی قابلیت مشاهده را در برنامههای وب بسیار سادهتر میکند. با استفاده از OTel، دیگر به یک فروشنده خاص وابسته نخواهید بود و میتوانید دادههای خود را به هر پلتفرم تحلیلگری که از این استاندارد پشتیبانی میکند، ارسال کنید.
راهاندازی اولیه OTel در یک برنامه فرانتاند بسیار ساده است. در اینجا یک نمونه کد برای شروع آورده شده است. این کد یک ردیاب اولیه را پیکربندی میکند که به طور خودکار تعاملات کاربر و درخواستهای `fetch` را ردیابی میکند.
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';const provider = new WebTracerProvider();
// دادهها را به یک Collector یا پلتفرم تحلیل ارسال کنید
const exporter = new OTLPTraceExporter({
url: 'YOUR_OTEL_COLLECTOR_URL',
});provider.addSpanProcessor(new BatchSpanProcessor(exporter));
provider.register({
// پیکربندی برای انتشار context در میان دامنههای مختلف
contextManager: new ZoneContextManager(),
propagator: new B3Propagator(),
});registerInstrumentations({
instrumentations: [
getWebAutoInstrumentations({
// فعالسازی ابزارهای خودکار برای ردیابی تعاملات
'@opentelemetry/instrumentation-document-load': {},
'@opentelemetry/instrumentation-user-interaction': {},
'@opentelemetry/instrumentation-fetch': {},
}),
],
});
اتصال ردیابی فرانتاند و بکاند، دیدی جامع و یکپارچه از سلامت برنامه شما فراهم میکند که مزایای متعددی دارد:
ردیابی در UI دیگر یک ویژگی لوکس نیست، بلکه یک ضرورت برای ساخت برنامههای وب مدرن، قابل اعتماد و با کارایی بالاست. با ادغام ابزارهایی مانند OpenTelemetry در فرانتاند، توسعهدهندگان میتوانند به قابلیت مشاهده کامل (full-stack observability) دست یابند، مشکلات را سریعتر حل کنند و در نهایت محصول بهتری را به کاربران خود ارائه دهند. وقت آن است که به حدس و گمان پایان دهیم و با دادههای دقیق، عملکرد برنامههای خود را به سطح بالاتری ببریم.