راکت

مشکل کند شدن صفحه به دلیل استفاده از setInterval

11 پاسخ

سلام دوستان و اساتید محترم

صفحه ای داریم با چند بخش که قرار است محتوای هر بخش هر چند ثانیه به صورت ایجکس آپدیت بشود.
امکانات فعلی ما jquery است برای ارسال درخواست و دریافت و درج دیتا.

از تابع setInterval در هر بخش (مثلا 10 بخش یا بلوک با تایم 60 ثانیه) استفاده کردیم که اگر سمت سرور (php) دیتایی آماده داشت در صفحه وارد کنیم.

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

درخواست من از شما اینه که ترفندی برای کنترل این اوضاع بهم یاد بدید یا کد کار راه اندازی بهم بدید از جی‌کوئری یا فریم ورک دیگه که بتونه به فرض مثال مانند سایت tgju.org به نرمی نتایج رو به صورت ناهمزمان نمایش بده.

ممنون میشم راهنمایی کنید

مهدی
مهدی
@mahdi313
ثبت پرسش جدید

پاسخ‌ها

11
AriaieBOY
AriaieBOY
@ariaieboy

تخصص: TALL Stack Lover

نگاه کنید شما میتونید داده ها را تجمیع کنید و به جای ست کردن تعداد زیادی setinterval کلا یکدونه بزنید.
سمت سرور هم کمتر فشار میاد.
شما یک set interval بزنید تمام داده های بروز بگیرید و تمام بخش ها را هر بار که داده میاد بروز کنید.

مهدی
مهدی
@mahdi313

خیلی ممنون از اینکه پاسخ دادید.

در حقیقت این کارو کردم که سمت سرور یکجا کلی url رو نخواد دانلود کنه. چون صفحه برای نمایش نرخ های دو سایته و برنامه در واقع scraping هست و صفحات رو دانلود میکنه و مقایسه.. میخواستم همه لیست رو یکجا سمت سرور پردازش کنم که اونم فکر کنم مشکل ساز بود.
حالا دنبال راهی هستم یا سمت سرور اینا رو پردازش کنم طوری که نه فشار بیاد به هر دو سرور و یا سمت کاربر اینقدر گیر نکنه.. میدونید interval ها وقتی return null دارن مشکل کند شدن صفحه رو نداریم وقتی دیتا با ایجکس مبادله میشه صفحه کند میشه.

شاید پاسخ شما همین‌جا باشد

مهدی
مهدی
@mahdi313

مشخص هست tgju چکار میکنه که فقط همون بخش مورد نظر رو به روز میکنه؟

اشکان نظری
اشکان نظری
@ashkannazari248

تخصص: برنامه نویس

سلام. چرا socket.io استفاده نمیکنید؟

مهدی
مهدی
@mahdi313

ممنون از پاسخ
socket.io و نود کار نکردم. بر پایه node.js هست؟ هزینه بر هست؟ vps میخواد؟
چطوریه نمونه کدش؟

مهدی
مهدی
@mahdi313
محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

دوست عزیز؛
کند شدن صفحه و مثال هایی که اشاره کردید نشون دهنده درگیر شدن رم و CPU سمت کاربر هست و از داستان سرور مجازاست. ممکنه دلایل مختلفی داشته باشه یکیش هم استفاده از setinterval ها و درخواست Ajax متعدد که خودتون شاره کردید.

ولی با توجه به نیازی که می فرمایید به نظرم بهترین گزینه استفاده از web socket هست.
الان شما مجبورید هر چند وقت یکبار یک ریکوئست سمت سرور ارسال کنید. حالا ممکنه داده ی جدید برای آپدیت وجود داشته باشه ممکنه هم وجود نداشته باشه. ضمن اینکه هر فرایند ریکوئست و ریسپانس علاوه بر انقال داده های پایه ثابتی مثل اطلاعات header ها و کوکی ها یک هزینه ثابتی رو به سرور تحمیل می کنه که قابل ملاحظه هست.
یعنی اینکه هر چقدر هم حجم پردازش اطلاعات مورد نیازتون کم باشه صرف دریافت ریکوئست و برگردوندن ریسپانس سرور رو درگیر میکنه و اگر این رو ضرب کنید در تعداد کاربران میبینم که در نهایت حجم زیادی از فشار سرور برای هیچ هست.

به همین خاطر اومدند webscoket ها رو معرفی کردند. به این شکل که یکبار در ابتدا یک ارتباط دو طرفه بین شما و سرور برقرار میشه و از این به بعد صرفا زمانی که اتفاق جدیدی بیافته (مثلا داده ها آپدیت بشوند) داده های آپدیت شده از طریق همون کانکشن دو طرفه ارسال میشه و اگر هم اتفاقی نیافتاد که هیچ. اینجوری منطقی تر نیست؟

مهدی
مهدی
@mahdi313

خیلی ممنون از توضیح خوبتون
چرا همینطوره ولی امکانات ما یک هاست اشتراکی لینوکسه فعلا! قیمت vps بالاست.

راه ساده و کم خرجی برای استفاده از وب سوکت وجود داره؟
@mhyeganeh

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

اولا برای استفاده از وب سوکت مجبور به استفاده از VPS نیستید و اگر سرویس های ثالثی مثل pusher.com استفاده کنید با همون هاست اشتراکی لینوکسی هم شدنی هست.

و در ثانی به نظرم اگر سرویس هایی با خصوصیت Pay-As-You-Go برای تهیه VPS استفاده کنید، تفاوت قیمت خیلی زیادی وجود نخواهد داشت بین هاست و VPS. یک سر به ArvanCloud بزنید به نظرم و قیمت هاش رو یک نگاهی بندازید اگر ندیدید تا الان.

سهیل حیدری
سهیل حیدری
@hbr

دقیقا سوکت برای همین کار هست و استفاده از interval اشتباه هست چون یک بدی که interval داره اینه که مدام به سمت سرور شما request میزنه و باعث اشغال شدن شدید سرور یا هاست شما میشه و اگه تعداد کاربراتون هم بره بالا سرور down میشه کلا

سهیل حیدری
سهیل حیدری
@hbr

با همون هاست میشه این کار رو کرد زمانی vps بدرتون میخوره که تعداد درخواست های ساییتون بالا بره و یک هاست نیاز شمارو برطرف نکنه

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام