راهنمای کش کردن پاسخ و ادغام CDN

بهینه‌سازی عملکرد Smart Money API با استراتژی‌های هوشمند کش کردن. یادگیری هدرهای کش HTTP، اعتبارسنجی ETag، ادغام CDN و الگوهای کش کردن سمت کلاینت برای کاهش تاخیر و هزینه‌های پهنای باند.

منتشر شده در ۲۱ مارس ۲۰۲۶ ۱۶ دقیقه زمان مطالعه عملکرد

مرور کلی کش کردن

نقاط پایانی Smart Money API داده‌های بازار ارزهای دیجیتال را ارائه می‌دهند که با فرکانس‌های مختلف تغییر می‌کنند. برخی داده‌ها (آدرس‌های نهنگ، نرخ‌های تامین مالی) هر چند ثانیه به‌روز می‌شوند، در حالی که داده‌های دیگر (تحلیل‌های تاریخی، محتوای آموزشی) برای ساعت‌ها ثابت می‌مانند. کش کردن هوشمند به طور چشمگیری عملکرد را بهبود می‌بخشد و هزینه‌ها را کاهش می‌دهد.

Smart Money API یک استراتژی کش کردن سه‌لایه را پیاده‌سازی می‌کند:

  • کش لبه CDN — تحویل محتوای جهانی با ابطال خودکار کش
  • کش مرورگر HTTP — کش کردن سمت کلاینت با استفاده از هدرهای استاندارد HTTP
  • کش برنامه — کش کردن در حافظه برای مجموعه‌داده‌های پر دسترسی

بینش عملکرد: پاسخ‌های کش شده ۵۰ تا ۱۰۰ برابر سریع‌تر از درخواست‌های API تازه عمل می‌کنند و به طور قابل توجهی پهنای باند را ذخیره می‌کنند. یک ادغام به درستی کش شده می‌تواند انتقال داده را تا ۷۰ تا ۸۵ درصد کاهش دهد.

هر پاسخ Smart Money API شامل دستورات کش است که به کلاینت‌ها و CDN‌ها می‌گوید داده‌ها تا چه زمانی معتبر هستند. درک این دستورات و پیاده‌سازی صحیح آن‌ها برای عملکرد بهینه ضروری است.

مبانی کش کردن

کش کردن HTTP بر اساس هدرهای پاسخ عمل می‌کند که نشان می‌دهند آیا محتوا می‌تواند کش شود و برای چه مدت.

هدر Cache-Control

مکانیزم اصلی برای کنترل رفتار کش. هر پاسخ Smart Money API شامل یک هدر Cache-Control است که مشخص می‌کند:

  • max-age — مدت زمان به ثانیه که پاسخ معتبر می‌ماند
  • public/private — آیا کش‌های واسط می‌توانند آن را ذخیره کنند
  • must-revalidate — آیا قبل از سرو باید تازگی بررسی شود
  • no-store — داده‌های حساس را کش نکنید

مثال‌هایی از هدرهای کش

نقاط پایانی مختلف نیازمندی‌های کش متفاوتی دارند:

هدرهای پاسخ
// داده‌های آدرس نهنگ (هر ۵ دقیقه به‌روز می‌شود)
Cache-Control: public, max-age=300
ETag: "abc123def456"
// نرخ‌های تامین مالی بلادرنگ (هر ثانیه به‌روز می‌شود)
Cache-Control: public, max-age=1
ETag: "xyz789abc123"
// داده‌های تاریخی (تغییر نمی‌کند)
Cache-Control: public, max-age=86400, immutable
ETag: "static-content-v1"

مدت زمان کش بر اساس نوع نقطه پایانی

نوع داده مدت زمان کش موارد استفاده
تامین مالی بلادرنگ ۱-۵ ثانیه معامله زنده، اندازه‌گیری موقعیت
حرکات نهنگ ۵ دقیقه تایید سیگنال، هشدارها
OHLCV روزانه ۱ ساعت تحلیل فنی، نمودارها
تحلیل تاریخی ۲۴ ساعت بک‌تست، تحقیق
محتوا ثابت ۷ روز مستندات API، راهنماها، پیکربندی
کلید API خود را در ۳۰ ثانیه دریافت کنید

آماده ساخت هستید؟ یک کلید API رایگان دریافت کنید (۵۰ درخواست در روز، بدون نیاز به کارت) و شروع به دریافت داده‌های زنده نهنگ، تامین مالی و زنجیره‌ای کنید.

کلید API خود را دریافت کنید →

هدرهای کش HTTP

پاسخ‌های Smart Money API شامل چندین هدر مرتبط با کش هستند که با هم کار می‌کنند تا عملکرد را به حداکثر برسانند و در عین حال تازگی داده‌ها را حفظ کنند.

Cache-Control: هدر اصلی

رفتار کش کردن را برای مرورگرها و کش‌های واسط کنترل می‌کند:

دستورات Cache-Control
// داده‌های عمومی، کش برای ۵ دقیقه
Cache-Control: public, max-age=300
// داده‌های خصوصی، فقط در مرورگر کش شود
Cache-Control: private, max-age=3600
// محتوای تغییرناپذیر، برای همیشه کش شود
Cache-Control: public, max-age=31536000, immutable
// همیشه قبل از سرو اعتبارسنجی کنید
Cache-Control: public, max-age=0, must-revalidate
// داده‌های حساس را کش نکنید
Cache-Control: private, no-store, no-cache

هدر Expires (قدیمی)

برای کلاینت‌های قدیمی، Smart Money همچنین هدر Expires را ارائه می‌دهد (HTTP/1.0):

هدر Expires
// زمان انقضای مطلق
Expires: Wed, 22 Mar 2026 14:30:00 GMT
// max-age در Cache-Control در HTTP/1.1 اولویت دارد

هدر Last-Modified

نشان می‌دهد که محتوا آخرین بار چه زمانی به‌روز شده است، که امکان درخواست‌های شرطی را فراهم می‌کند:

استفاده از Last-Modified
// پاسخ شامل Last-Modified است
Last-Modified: Wed, 21 Mar 2026 10:15:30 GMT
// کلاینت با If-Modified-Since اعتبارسنجی می‌کند
If-Modified-Since: Wed, 21 Mar 2026 10:15:30 GMT
// اگر تغییر نکرده باشد، سرور با 304 Not Modified پاسخ می‌دهد
HTTP/1.1 304 Not Modified

هدر Vary

به کش‌ها می‌گوید که کدام هدرهای درخواست بر پاسخ تأثیر می‌گذارند (احراز هویت، پارامترها):

هدر Vary
// پاسخ بر اساس احراز هویت و نمادها متفاوت است
Vary: Authorization, X-Symbols
// کش‌ها نسخه‌های جداگانه برای مقادیر مختلف ذخیره می‌کنند

ETag و درخواست‌های شرطی

ETagها (برچسب‌های موجودیت) راهی کارآمد برای اعتبارسنجی محتوای کش شده بدون دانلود کامل بدنه پاسخ ارائه می‌دهند.

ETagها چگونه کار می‌کنند

  1. درخواست اولیه — کلاینت درخواست داده می‌کند، سرور با ETag پاسخ می‌دهد
  2. ذخیره کش — کلاینت پاسخ را با ETag کش می‌کند
  3. درخواست بعدی — کلاینت هدر If-None-Match را با ETag کش‌شده ارسال می‌کند
  4. اعتبارسنجی — اگر داده تغییر نکرده باشد، سرور 304 Not Modified برمی‌گرداند
  5. پهنای باند ذخیره شده — بدنه پاسخ ارسال نمی‌شود، صرفه‌جویی قابل توجه در پهنای باند

پیاده‌سازی ETag

درخواست و پاسخ اولیه
// اولین درخواست
GET /v1/whales/btc HTTP/1.1
// پاسخ شامل ETag است
HTTP/1.1 200 OK
ETag: "8a3b9c2d"
Cache-Control: public, max-age=300
Content-Type: application/json
{...response body...}
اعتبارسنجی شرطی
// پس از انقضای کش، If-None-Match ارسال می‌شود
GET /v1/whales/btc HTTP/1.1
If-None-Match: "8a3b9c2d"
// اگر تغییر نکرده باشد، سرور 304 پاسخ می‌دهد
HTTP/1.1 304 Not Modified
ETag: "8a3b9c2d"
Cache-Control: public, max-age=300
// بدنه ارسال نمی‌شود! پهنای باند ذخیره شد

قدرت ETag

ETagها می‌توانند قوی یا ضعیف باشند:

نوع فرمت مورد استفاده
ETag قوی "8a3b9c2d" یکسان بایت به بایت، برای اعتبارسنجی استفاده می‌شود
ETag ضعیف W/"8a3b9c2d" معادل معنایی، برای تغییرات نمایشی

دستورات کنترل کش

درک دستورات Cache-Control به شما امکان می‌دهد استراتژی‌های کش بهینه‌ای برای برنامه خود بسازید.

مرجع دستورات

دستور معنی مثال
max-age ثانیه‌هایی که پاسخ تازه می‌ماند max-age=300
public کش می‌تواند ذخیره و به اشتراک گذاشته شود public
private کش فقط برای گیرنده private
must-revalidate اعتبارسنجی مجدد هنگام منقضی شدن must-revalidate
no-cache قبل از استفاده باید اعتبارسنجی مجدد شود no-cache
no-store اصلاً کش نشود no-store
immutable هرگز تغییر نمی‌کند، برای همیشه کش شود immutable
s-maxage مدت زمان کش CDN s-maxage=3600

الگوهای عملی کنترل کش

الگوهای رایج
// الگوی 1: کش مرورگر، CDN برای 1 ساعت
Cache-Control: public, max-age=300, s-maxage=3600
// الگوی 2: داده‌های هر کاربر، بدون کش پروکسی
Cache-Control: private, max-age=1800
// الگوی 3: همیشه تازه، همیشه بررسی شود
Cache-Control: public, no-cache, must-revalidate
// الگوی 4: دارایی نسخه‌بندی شده تغییرناپذیر
Cache-Control: public, max-age=31536000, immutable

ادغام CDN

Smart Money API پاسخ‌ها را از طریق شبکه جهانی CDN Cloudflare ارائه می‌دهد و به طور خودکار پاسخ‌ها را در مکان‌های لبه در سراسر جهان کش می‌کند تا تأخیر به حداقل برسد.

نحوه عملکرد Smart Money CDN

  1. درخواست کاربر — درخواست به نزدیک‌ترین مکان لبه Cloudflare می‌رسد
  2. بررسی کش — لبه بررسی می‌کند که آیا پاسخ کش شده و تازه است
  3. ضربه کش — اگر کش شده باشد، بلافاصله با تأخیر کمتر از 10ms ارائه می‌شود
  4. خطای کش — اگر کش نشده باشد، از سرور اصلی دریافت می‌شود
  5. ذخیره و ارائه — پاسخ کش شده و به کاربر تحویل داده می‌شود

پیکربندی کلید کش

Cloudflare از کلیدهای کش برای شناسایی منحصر به فرد پاسخ‌های کش شده استفاده می‌کند. به طور پیش‌فرض:

  • مسیر درخواست و پارامترهای پرس‌وجو شامل می‌شوند
  • اکثر هدرها نادیده گرفته می‌شوند (برای حداکثر ضربه کش)
  • هدرهای احراز هویت شامل نمی‌شوند (بدون نشت حساب)
  • هدرهای سفارشی می‌توانند از طریق هدر Vary شامل شوند

پاکسازی CDN

Smart Money به طور خودکار کش CDN را هنگام به‌روزرسانی داده‌ها پاک می‌کند:

پاکسازی دستی کش
// پاکسازی URL خاص از CDN
curl -X POST "https://api.smartmoneyapi.com/v1/cache/purge" \
-H "Authorization: Bearer token" \
-d '{
"urls": [
"https://api.smartmoneyapi.com/v1/whales/btc"
]
}'

اندازه‌گیری عملکرد CDN

هدرهای پاسخ را بررسی کنید تا ببینید آیا درخواست از کش ارائه شده است:

هدرهای پاسخ
// ضربه کش از لبه CDN
CF-Cache-Status: HIT
CF-RAY: 8a9b7c6d5e4f3g2h
Age: 45 // ثانیه از زمان کش شدن
// خطای کش، از سرور اصلی دریافت شده است
CF-Cache-Status: MISS
Age: 0

کش سمت کلاینت

کش را در برنامه خود پیاده‌سازی کنید تا تماس‌های API بیشتر کاهش یابد و پاسخگویی بهبود یابد.

پیاده‌سازی کش مرورگر

کش جاوااسکریپت
// ایجاد ذخیره‌سازی کش
const cache = new Map();
async function fetchWithCache(url) {
// ابتدا کش را بررسی کنید
const cached = cache.get(url);
if (cached && !isCacheExpired(cached)) {
return cached.data;
}
// از API دریافت کنید
const response = await fetch(url);
const data = await response.json();
// مدت زمان کش را از هدرها استخراج کنید
const cacheControl = response.headers
get('cache-control');
const maxAge = parseMaxAge(cacheControl);
// در کش ذخیره کنید
cache.set(url, {
data,
expiry: Date.now() + (maxAge * 1000)
});
return data;
}

کش کردن با Service Worker

برای پشتیبانی آفلاین و استراتژی‌های پیشرفته کش، از Service Workers استفاده کنید:

Service Worker
// پاسخ‌های API را با Service Worker کش کنید
self.addEventListener('fetch', (event) => {
if (event.request.url.includes('api.smartmoneyapi.com')) {
// اول شبکه، در صورت عدم موفقیت از کش استفاده کنید
event.respondWith(
fetch(event.request)
then(response => {
// کش را با پاسخ تازه به‌روز کنید
caches.open('api-cache')
then(cache => cache.put(
event.request, response.clone()));
return response;
})
catch(() =>
caches.match(event.request))
);
}
});

استراتژی‌های باطل کردن کش

گاهی اوقات نیاز دارید کلاینت‌ها را مجبور به دریافت داده‌های تازه کنید. از این تکنیک‌ها استفاده کنید:

پارامتر نسخه

یک پارامتر نسخه اضافه کنید تا هنگام تغییر داده‌ها، کش‌ها باطل شوند:

URLهای نسخه‌دار
// شامل نسخه داده یا زمان‌مهر باشد
https://api.smartmoneyapi.com/v1/whales/btc?v=1709980800
// هنگام به‌روزرسانی داده‌ها، نسخه را افزایش دهید
https://api.smartmoneyapi.com/v1/whales/btc?v=1709981000
// URL جدید = ورودی کش جدید

اجبار به اعتبارسنجی مجدد

با استفاده از Cache-Control: no-cache هنگام نیاز به داده‌های تازه، کش را لغو کنید:

داده‌های تازه اجباری
// JavaScript: درخواست تازه را اجبار کنید
fetch(url, {
cache: 'no-cache', // همیشه اعتبارسنجی مجدد
headers: {
'Cache-Control': 'max-age=0'
}
});

نظارت بر عملکرد کش

نرخ ضربه‌های کش و بهبودهای عملکرد را ردیابی کنید تا استراتژی کش خود را تأیید کنید.

معیارهای کش برای نظارت

  • نرخ ضربه — درصد درخواست‌های سرویس شده از کش (هدف: >70%)
  • زمان پاسخ — تاخیر متوسط (کش شده: <50ms, بدون کش: 100-300ms)
  • پهنای باند ذخیره شده — کاهش در انتقال داده
  • بار سرور مبدأ — کاهش درخواست در سرور مبدأ

تحلیل هدرهای کش

اسکریپت تحلیل کش
// هدرهای کش پاسخ را تحلیل کنید
async function analyzeCache(url) {
const response = await fetch(url);
return {
cacheControl: response.headers
get('cache-control'),
etag: response.headers.get('etag'),
age: response.headers.get('age'),
cfStatus: response.headers
get('cf-cache-status'),
contentLength:
response.headers.get('content-length')
};
}

بهترین روش‌های کش

1. احترام به هدرهای پاسخ

همیشه به هدرهای Cache-Control از Smart Money API احترام بگذارید. محتوای علامت‌گذاری شده با no-store یا no-cache را کش نکنید.

2. پیاده‌سازی درخواست‌های شرطی

هنگام اعتبارسنجی مجدد محتوای کش شده، هدرهای If-None-Match (ETag) و If-Modified-Since را ارسال کنید. با پاسخ‌های 304 پهنای باند ذخیره کنید.

3. کش مناسب بر اساس نوع داده

  • داده‌های بلادرنگ (نرخ‌های تأمین): حداکثر کش 1-5 ثانیه
  • سیگنال‌های زنده (حرکت نهنگ‌ها): کش 5-30 ثانیه
  • داده‌های ساعتی (OHLCV): کش 1 ساعت
  • داده‌های تاریخی: کش 24 ساعته
  • محتوای ثابت: کش 7 روزه

4. نظارت بر اثربخشی کش

نرخ ضربه و بهبودهای تاخیر را ردیابی کنید. TTLها را بر اساس نیازهای تازگی داده و عملکرد کش تنظیم کنید.

5. استفاده محتاطانه از هدرهای Vary

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

6. کش در چندین لایه

کش را در لایه‌های CDN، مرورگر و برنامه پیاده‌سازی کنید. هر لایه درخواست‌ها را قبل از رسیدن به سرور مبدأ می‌گیرد.

بهینه‌سازی عملکرد API شما

زیرساخت کش Smart Money API پاسخ‌های زیر 100ms را در مقیاس جهانی تضمین می‌کند. استراتژی‌های هوشمند کش را پیاده‌سازی کنید تا عملکرد را به حداکثر و هزینه‌ها را به حداقل برسانید.

مقایسه طرح‌ها
همه طرح‌ها شامل کش کامل CDN هستند. سطوح بالاتر کنترل کش و APIهای پاکسازی را ارائه می‌دهند.

منابع مرتبط

شروع رایگان — 100 درخواست/روز، بدون کارت

داده‌های جریان نهنگ، تأمین، سود باز و زنجیره‌ای را از 3 صرافی از یک API دریافت کنید. سطح رایگان، بدون نیاز به کارت اعتباری، هر زمان ارتقا دهید.

شروع رایگان →
کنسول API زنده را امتحان کنید → (نیاز به حساب ندارد)