سلام وقت بخیر ، سال نو مبارک
یه پلتفرم تحت وب با PHP بالا اوردم و در حال کار کردن هست. حدود 50 نوع گزارش دارم و اکثر موارد سرعت لود خوبی دارند
بعضی از گزارش ها با توجه به حجم دیتا و وابستگی های داده ها سرعت لود خیلی سنگینی دارند و اصلا بعضی از گزارش ها بالا نمیان و خطای تایم اوت میده!
سرور دست خودم هست و می تونم متغیرهای PHP رو از php.ini دستکاری کنم و بالا ببرم
اما چه راه های دیگه ای وجود داره؟
معمولا برای چنین گزارشهایی چطوری رفتار میشه اصولا؟
سلام
1) تایماوت یه چیز قابل تنظیمه و میتونید در فایل php.ini مقدار max_execution_time رو تغییر بدید یا اینکه توی خود اسکریپت از فانکشن set_time_limit استفاده کنید.
2) این طور کارها رو توی صف هندل کنید و هر وقت آماده شد به کاربر تحویل بدید.
3) اگه گزارشات قابل تفکیک هستند، به تکههای مختلفی تقسیمشون کنید و هر تکه رو جداگانه پردازش کنید.
4) اگه گزارشها بخش بزرگی از سیستم هستند و منابع زیادی مصرف میکنند، از سیستم اصلی به عنوان یک سرویس جدا کنید و اینجا میتونید از زبان مناسبتری استفاده کنید (دو مورد اخیر بستگی به ماهیت گزارشات شما دارن و من نمیدونم دارید چیکار میکنید)
سلام اگر شما از php و یا لاراول استفاده می کنید می تونید از lazy collection استفاده کنید.
علاوه بر مواردی که بالا اشاره شد، یک راهکار رایج و خیلی تاثیر گذار دیگه این هست که بسته به نوع اطلاعاتتون اگر امکانش مهیاست، میتونید از کش کردن (Cache) اطلاعات استفاده کنید.
مثلا فرض کنید گزارش فروش و درآمد و سود یک فروشگاه بزرگ رو در یک بازه زمانی میخواهیم حساب کنیم. اگر هر سری خواسته باشیم تک به تک تراکنش های اون بازه زمانی رو مورد محاسبه قرار بدیم و حساب و کتاب کنیم احتمال داره پردازشش سنگین بشه.
ولی میشه مثلا در پایان هر ماه با یک بار و حساب و کتاب ها رو انجام بدیم و جمع تجمیعی یا میانگین یا ... رو حساب کنیم و به نحوی ذخیره کنیم و از این به بعد هر وقت نیاز شد بجای محاسبه مجدد اطلاعاتی که مطمئنیم تغییر جدیدی نداشتند، از اطلاعات پردازش شده آماده استفاده کنیم.
همین مثال رو میشه گسترشش داد در خصوص خیلی از موضوعات دیگه. البته باز هم بستگی به نوع اطلاعات و گزارشگیری داره و شاید همه جا بکار نیاد. اگر واقعا میبینید چارهای نیست و هر سری باید این محاسبات انجام بشوند، غیر از تقویت سخت افزاری منابع، مهمترین کار شاید این باشه که نباید بصورت معمولی اجرا بشوند. بلکه باید یک job ایجاد بشه و کار پشت صحنه به worker ها سپرده بشه. اینجوری در همون لحظه اول response به کاربر بر میگرده و مشکل Timeout هم پیش نمیاد. هر وقت گزارش آماده شد به نحوی صفحه بروزرسانی بشه یا فایل دانلود بشه یا .... از نظر تجربه کاربری هم اینجوری خیلی منطقی تر به نظر میرسه.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟