از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
بهینه سازی عملکرد برای وب سایت های جنگو روی هاست اشتراکی
سرفصلهای مطلب
راه اندازی سایت جنگو روی میزبانی مشترک می تواند واقعا عذاب آور باشد. مطمئناً مقرون به صرفه است، اما با رشتههایی همراه است: زمان پاسخدهی کند و سکتههای غیرمنتظره سرور. به نوعی باعث می شود که بخواهید تسلیم شوید.
خوشبختانه، با چند اصلاح اینجا و آنجا، می توانید سایت خود را روان تر کنید. ممکن است کامل نباشد، اما کار را انجام می دهد. برای ارتقای سطح سایت خود آماده اید؟ بیایید به این ترفندهای ساده بپردازیم که تفاوت زیادی ایجاد می کند.
محدودیت های خود را بشناسید، نقاط قوت خود را بازی کنید
اما قبل از غواصی عمیق تر، اجازه دهید یک معرفی سریع از جنگو انجام دهیم. وب سایتی که ساخته شده است روی فریم ورک وب جنگو یک وب سایت با قدرت جنگو نامیده می شود.
جنگو یک چارچوب متن باز است که به زبان پایتون نوشته شده است. به راحتی می تواند جهش های ترافیک و حجم زیادی از داده ها را مدیریت کند. پلتفرم هایی مانند نتفلیکس، اسپاتیفای و اینستاگرام دارای پایگاه کاربران گسترده ای هستند و جنگو را در هسته خود دارند.
هاست اشتراکی انتخاب محبوبی در بین کاربران در مورد وب سایت های جنگو است، بیشتر به این دلیل که مقرون به صرفه است و راه اندازی آن آسان است. اما از آنجایی که شما منابع را با وب سایت های دیگر به اشتراک می گذارید، احتمالاً با مشکلات زیر دست و پنجه نرم می کنید:
- منابع محدود (CPU، ذخیره سازی و غیره)
- اثر همسایه پر سر و صدا
با این حال، این پایان جهان نیست. شما می توانید به اجرای نرم تری دست پیدا کنید –
- کاهش بار سرور
- نظارت منظم
- با ارائه دهنده هاست خود تماس بگیرید
این ترفندها کمک زیادی به شما می کند، اما میزبانی مشترک تنها می تواند کارهای زیادی را انجام دهد. اگر سایت شما هنوز کند است، ممکن است وقت آن باشد که در مورد آن فکر کنید برنامه های هاست اختصاصی ارزان قیمت.
اما قبل از اینکه به دنبال یک برنامه میزبانی جدید باشید، مطمئن شوید که راهاندازی فعلی شما هیچ پایانی ندارد.
کلید Debug را بچرخانید (خاموش!)
هنگامی که سایت جنگو شما راه اندازی شد، اولین کاری که باید انجام دهید این است که بچرخید DEBUG
خاموش این تنظیم متون خطای دقیق را نشان می دهد و عیب یابی را بسیار آسان تر می کند.
این نکته برای توسعه وب مفید است، اما در طول تولید نتیجه معکوس میدهد، زیرا میتواند اطلاعات حساس را برای هر کسی که متوجه خطا میشود فاش کند.
برای چرخاندن DEBUG
خاموش، به سادگی آن را تنظیم کنید False
در شما settings.py
فایل
DEBUG = False
بعد، پیکربندی را فراموش نکنید ALLOWED_HOSTS
. این تنظیم کنترل می کند که کدام دامنه ها می توانند به سایت جنگو شما دسترسی داشته باشند. بدون آن، سایت شما ممکن است در برابر ترافیک ناخواسته آسیب پذیر باشد. نام دامنه خود را به این صورت به لیست اضافه کنید:
ALLOWED_HOSTS =('yourdomain.com', 'www.yourdomain.com')
با DEBUG
خاموش و ALLOWED_HOSTS
قفل شده است، سایت جنگو شما در حال حاضر امن تر و کارآمدتر است. اما یک ترفند دیگر وجود دارد که می تواند عملکرد شما را به سطح بالاتری برساند.
کش! کش! کش!
تصور کنید هر بار که شخصی از سایت شما بازدید می کند، جنگو درخواست را پردازش می کند و پاسخی را ارائه می دهد. اگر بتوانید آن نتایج را ذخیره کنید و به جای آن فوراً آنها را ارائه دهید چه؟ اینجاست که کش وارد می شود.
حافظه پنهان مانند قرار دادن پرکاربردترین داده های سایت شما است روی خط سریع شما می توانید از ابزارهایی مانند Redis برای نگهداری اطلاعات خود در RAM استفاده کنید. اگر فقط مربوط به پاسخهای API یا نتایج جستجوی پایگاه داده است، کش در حافظه میتواند برای شما تغییر کند.
برای دقیق تر، کش داخلی جنگو نیز وجود دارد:
- ذخیره سازی Queryset: اگر سیستم شما به طور مکرر پرس و جوهای پایگاه داده را اجرا می کند، نتایج پرس و جو را نگه دارید.
- ذخیره قطعه الگو: این ویژگی قسمت های شما را کش می کند page که تقریباً همیشه یکسان باقی می مانند (سرصفحه ها، ستون های فرعی و غیره) تا از رندرهای غیر ضروری جلوگیری شود.
سوالات خود را بهینه کنید
پایگاه داده شما ستون فقرات سایت جنگو شما است. جنگو تعاملات پایگاه داده را با ORM (نقشه برداری شی-رابطه ای) خود آسان می کند. اما اگر مراقب نباشید، این سوالات می توانند استخوانی در کباب شما شوند.
- استفاده کنید
.select_related()
و.prefetch_related()
جنگو هنگام جستجوی اشیاء مرتبط میتواند چندین تماس با پایگاه داده را بدون اینکه شما متوجه شوید برقرار کند. اینها می توانند سایت شما را انباشته و کند کنند.
به جای این:
posts = Post.objects.all()
for post in posts:
print(post.author.name)
از این استفاده کنید:
posts = Post.objects.select_related('author')
for post in posts:
print(post.author.name)
- اجتناب از مشکل پرس و جو N+1: مشکل پرس و جو N+1 زمانی اتفاق می افتد که شما ناخودآگاه یک پرس و جو برای داده های اولیه و یک پرس و جو اضافی برای هر شی مرتبط اجرا کنید. همیشه سوالات خود را با استفاده از ابزارهایی مانند Django Debug Toolbar برای شناسایی و رفع این ناکارآمدی ها.
- پایگاه داده خود را فهرست کنید:
ایندکس ها به پایگاه داده شما کمک می کنند تا داده ها را سریعتر پیدا کند. فیلدهای مکرر جستجو شده را شناسایی کنید و مطمئن شوید که فهرست شده اند. در جنگو، میتوانید ایندکسهایی مانند زیر اضافه کنید:
class Post(models.Model):
title = models.CharField(max_length=200, db_index=True)
- فقط آنچه را که نیاز دارید پرس و جو کنید:
واکشی داده های غیر ضروری زمان و حافظه را تلف می کند. استفاده کنید.only()
یا.values()
برای بازیابی فقط فیلدهایی که واقعاً به آنها نیاز دارید.
فایل های استاتیک؟ تخلیه و استراحت
فایلهای استاتیک (تصاویر، CSS و جاوا اسکریپت) میتوانند بار سنگینی ایجاد کنند روی سرور شما اما آیا تا به حال به این فکر کرده اید که آنها را در یک شبکه تحویل محتوا (CDN) بارگذاری کنید؟ CDN یک سرویس ذخیره سازی اختصاصی است. مراحل به شرح زیر است:
- یک CDN را تنظیم کنید (به عنوان مثال، Cloudflare، AWS CloudFront):
یک CDN فایلهای استاتیک شما را کش میکند و آنها را از نزدیکترین مکانها به مشتریانتان ارائه میکند. - از حافظه اختصاصی استفاده کنید (مانند AWS S3، Google Cloud Storage):
فایل های خود را در سرویسی که برای محتوای ثابت طراحی شده است ذخیره کنید. از جنگو استفاده کنیدstorages
کتابخانه - فشرده سازی و بهینه سازی فایل ها:
فایل های CSS و جاوا اسکریپت خود را کوچک کنید و تصاویر را فشرده کنید تا اندازه فایل ها کاهش یابد. از ابزارهایی مانندdjango-compressor
برای خودکار کردن این process.
با بارگذاری فایل های ثابت، فضای ذخیره سازی سرور را آزاد کرده و سرعت سایت خود را بهبود می بخشید. این یک چیز دیگر از بشقاب شما!
میان افزار سبک وزن، تاثیر سنگین
میان افزار بین سرور و برنامه شما قرار می گیرد. هر درخواست و پاسخی را پردازش می کند.
خود را بررسی کنید MIDDLEWARE
هر چیزی را که نیاز ندارید را تنظیم و حذف کنید. هر زمان که می توانید از میان افزار داخلی جنگو استفاده کنید زیرا سریعتر و قابل اعتمادتر است. اگر میانافزار سفارشی ایجاد میکنید، مطمئن شوید که ساده است و فقط کارهایی را که واقعاً ضروری است انجام میدهد. سبک نگه داشتن میان افزار فشار سرور را کاهش می دهد و از منابع کمتری استفاده می کند.
کمک های اولیه Frontend
ظاهر شما اولین چیزی است که کاربران می بینند، بنابراین یک رابط کاربری کند و درهم می تواند تاثیر بدی بر جای بگذارد. استفاده درست از frontend می تواند تجربه کاربری را به طرز چشمگیری بهبود بخشد.
-
به حداقل رساندن درخواست های HTTP: فایل های CSS و جاوا اسکریپت را برای کاهش تعداد درخواست ها ترکیب کنید.
-
بهینه سازی تصاویر: از ابزارهایی مانند TinyPNG یا ImageOptim برای فشرده سازی تصاویر بدون افت کیفیت استفاده کنید.
-
محتوای بارگذاری تنبل: بارگیری تصاویر یا ویدیوها را تا زمانی که نیاز باشد به تأخیر بیندازید روی صفحه نمایش
-
فشرده سازی Gzip را فعال کنید: فشرده سازی فایل های ارسال شده به مرورگر برای کاهش زمان بارگذاری.
نظارت، اندازه گیری، استاد
در پایان، کلید حفظ یک سایت جنگو، نظارت مداوم است. با استفاده از ابزارهایی مانند Django Debug Toolbar یا Sentry، می توانید به سرعت مشکلات عملکرد را شناسایی کنید.
هنگامی که تصویر واضحی از آنچه در زیر رادار اتفاق می افتد دارید، عملکرد سایت خود را اندازه گیری کنید. از ابزارهایی مانند یادگار جدید یا فانوس دریایی گوگل. این ابزارها به شما کمک میکنند تا مکانهایی را که میتوانید پیشرفت کنید، اولویتبندی کنید. با این دانش، می توانید کد خود را بهینه کنید، تنظیمات را تغییر دهید و اطمینان حاصل کنید که سایت شما به خوبی اجرا می شود.
منتشر شده در 1403-12-22 11:00:11