مهدی
4 سال پیش توسط مهدی مطرح شد
11 پاسخ

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

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

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

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

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

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

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


ثبت پرسش جدید
AriaieBOY
تخصص : TALL Stack Lover
@ariaieboy 4 سال پیش مطرح شد
1

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


مهدی
@mahdi313 4 سال پیش مطرح شد
0

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

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


مهدی
@mahdi313 4 سال پیش مطرح شد
0

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


اشکان نظری
تخصص : برنامه نویس
@ashkannazari248 4 سال پیش مطرح شد
1

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


مهدی
@mahdi313 4 سال پیش آپدیت شد
0

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


مهدی
@mahdi313 4 سال پیش مطرح شد
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 4 سال پیش مطرح شد
1

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

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

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


مهدی
@mahdi313 4 سال پیش آپدیت شد
0

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

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


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 4 سال پیش مطرح شد
1

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

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


سهیل حیدری
@hbr 4 سال پیش مطرح شد
1

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


سهیل حیدری
@hbr 4 سال پیش مطرح شد
0

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


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

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