سلام دوستان و اساتید محترم
صفحه ای داریم با چند بخش که قرار است محتوای هر بخش هر چند ثانیه به صورت ایجکس آپدیت بشود.
امکانات فعلی ما jquery است برای ارسال درخواست و دریافت و درج دیتا.
از تابع setInterval در هر بخش (مثلا 10 بخش یا بلوک با تایم 60 ثانیه) استفاده کردیم که اگر سمت سرور (php) دیتایی آماده داشت در صفحه وارد کنیم.
مشکل اول این بود که میزان حافظه کمی بالا میرفت و راه حسابی هم برای کنترل این در جاوااسکریپت بلد نیستیم و الان که صفحه 75 مگابایت رم مصرف میکنه مشکل کند شدن فعالیت در صفحه رو داره مثلا میری روی لینک چند ثانیه گیر میکنه بعد رنگش عوض میشه یا اسکرول کردن با وقفه..
صفحه یا مرورگر بسته نمیشه فقط به شدت کند میشه.
درخواست من از شما اینه که ترفندی برای کنترل این اوضاع بهم یاد بدید یا کد کار راه اندازی بهم بدید از جیکوئری یا فریم ورک دیگه که بتونه به فرض مثال مانند سایت tgju.org به نرمی نتایج رو به صورت ناهمزمان نمایش بده.
ممنون میشم راهنمایی کنید
نگاه کنید شما میتونید داده ها را تجمیع کنید و به جای ست کردن تعداد زیادی setinterval کلا یکدونه بزنید.
سمت سرور هم کمتر فشار میاد.
شما یک set interval بزنید تمام داده های بروز بگیرید و تمام بخش ها را هر بار که داده میاد بروز کنید.
خیلی ممنون از اینکه پاسخ دادید.
در حقیقت این کارو کردم که سمت سرور یکجا کلی url رو نخواد دانلود کنه. چون صفحه برای نمایش نرخ های دو سایته و برنامه در واقع scraping هست و صفحات رو دانلود میکنه و مقایسه.. میخواستم همه لیست رو یکجا سمت سرور پردازش کنم که اونم فکر کنم مشکل ساز بود.
حالا دنبال راهی هستم یا سمت سرور اینا رو پردازش کنم طوری که نه فشار بیاد به هر دو سرور و یا سمت کاربر اینقدر گیر نکنه.. میدونید interval ها وقتی return null دارن مشکل کند شدن صفحه رو نداریم وقتی دیتا با ایجکس مبادله میشه صفحه کند میشه.
ممنون از پاسخ
socket.io و نود کار نکردم. بر پایه node.js هست؟ هزینه بر هست؟ vps میخواد؟
چطوریه نمونه کدش؟
دوست عزیز؛
کند شدن صفحه و مثال هایی که اشاره کردید نشون دهنده درگیر شدن رم و CPU سمت کاربر هست و از داستان سرور مجازاست. ممکنه دلایل مختلفی داشته باشه یکیش هم استفاده از setinterval ها و درخواست Ajax متعدد که خودتون شاره کردید.
ولی با توجه به نیازی که می فرمایید به نظرم بهترین گزینه استفاده از web socket هست.
الان شما مجبورید هر چند وقت یکبار یک ریکوئست سمت سرور ارسال کنید. حالا ممکنه داده ی جدید برای آپدیت وجود داشته باشه ممکنه هم وجود نداشته باشه. ضمن اینکه هر فرایند ریکوئست و ریسپانس علاوه بر انقال داده های پایه ثابتی مثل اطلاعات header ها و کوکی ها یک هزینه ثابتی رو به سرور تحمیل می کنه که قابل ملاحظه هست.
یعنی اینکه هر چقدر هم حجم پردازش اطلاعات مورد نیازتون کم باشه صرف دریافت ریکوئست و برگردوندن ریسپانس سرور رو درگیر میکنه و اگر این رو ضرب کنید در تعداد کاربران میبینم که در نهایت حجم زیادی از فشار سرور برای هیچ هست.
به همین خاطر اومدند webscoket ها رو معرفی کردند. به این شکل که یکبار در ابتدا یک ارتباط دو طرفه بین شما و سرور برقرار میشه و از این به بعد صرفا زمانی که اتفاق جدیدی بیافته (مثلا داده ها آپدیت بشوند) داده های آپدیت شده از طریق همون کانکشن دو طرفه ارسال میشه و اگر هم اتفاقی نیافتاد که هیچ. اینجوری منطقی تر نیست؟
خیلی ممنون از توضیح خوبتون
چرا همینطوره ولی امکانات ما یک هاست اشتراکی لینوکسه فعلا! قیمت vps بالاست.
راه ساده و کم خرجی برای استفاده از وب سوکت وجود داره؟
@mhyeganeh
اولا برای استفاده از وب سوکت مجبور به استفاده از VPS نیستید و اگر سرویس های ثالثی مثل pusher.com استفاده کنید با همون هاست اشتراکی لینوکسی هم شدنی هست.
و در ثانی به نظرم اگر سرویس هایی با خصوصیت Pay-As-You-Go برای تهیه VPS استفاده کنید، تفاوت قیمت خیلی زیادی وجود نخواهد داشت بین هاست و VPS. یک سر به ArvanCloud بزنید به نظرم و قیمت هاش رو یک نگاهی بندازید اگر ندیدید تا الان.
دقیقا سوکت برای همین کار هست و استفاده از interval اشتباه هست چون یک بدی که interval داره اینه که مدام به سمت سرور شما request میزنه و باعث اشغال شدن شدید سرور یا هاست شما میشه و اگه تعداد کاربراتون هم بره بالا سرور down میشه کلا
با همون هاست میشه این کار رو کرد زمانی vps بدرتون میخوره که تعداد درخواست های ساییتون بالا بره و یک هاست نیاز شمارو برطرف نکنه
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟