PDA

View Full Version : نحوه اجرای while



trasilver
سه شنبه 05 آذر 1392, 21:22 عصر
سلام خدمت دوستان.

دوستان ما مثلا فرض بر این میگیریم در دیتابیس ما 3000 تا سطر (row) هستش.
حالا ما با یک دستور while می خوایم همه این رو نمایش بدیم.
توی کد ساده ای که من نوشتم، متاسفانه در حدود 10 ثانیه مکث می کنه همه رو که لود کرد بعد یک دفعه همه رو نشون میده !!!! :متفکر:
ولی توی چندین سایت دیدم مثلا 3000 تا سطر (row) رو بخواد echo بکنه صفحه سریع برات میاد بعد مثلا 10 تا رو لود کرد اونارو نوشن میده بعد همین جوری هرچقدر رو که لود می کنه لحظه ای نشون میده :متعجب::متعجب:
حالا خواستم بگم چی کار بکنیم برای ما هم این جور بشه :لبخند::بوس:
ممنون.

Veteran
سه شنبه 05 آذر 1392, 21:30 عصر
از تکنیک صفحه بندی استفاده کنید تا مشکل برطرف بشه
مثلا همین تالار PHP بیش از 5000 تاپیک داره،اما میبینید فقط 20 تاشون رو در هر صفحه نشون میده

trasilver
سه شنبه 05 آذر 1392, 21:39 عصر
خوب می دونم چی میگید. ولی مشکل اینجاست که لازمه همه رو توی اون صفحه نشون بده وگرنه همین کارو زود تر می کردم :لبخند:

Veteran
سه شنبه 05 آذر 1392, 21:45 عصر
میتونید از کش کردن اطلاعات هم استفاده کنید
(http://barnamenevis.org/showthread.php?419979-%D9%85%D8%B4%DA%A9%D9%84-%D9%81%D8%B4%D8%A7%D8%B1-%D8%A8%D9%87-%D8%B3%D8%B1%D9%88%D8%B1)

trasilver
سه شنبه 05 آذر 1392, 22:07 عصر
ممنون داداش. استفاده شد ولی متاسفانه با همون تایم باز می کنه.

MMSHFE
سه شنبه 05 آذر 1392, 22:20 عصر
1- آخر حلقه خودتون دستور flush رو بگذارین.
2- سایز output_buffering رو توی php.ini کم درنظر بگیرین تا اگه output_buffering فعال بود، به محض پر شدن، بافر برای کلاینت ارسال بشه و دوباره خالی بشه برای اطلاعات جدید

trasilver
چهارشنبه 06 آذر 1392, 04:21 صبح
ممنون بابت پاسخ شما هم .
output_buffering رو به 10 تغییر دادم و flush هم گذاشتم آخر while ولی نمی دونم چرا با سرعت قبلی باز اجرا میشه!
با تشکر.

smksmk
چهارشنبه 06 آذر 1392, 08:28 صبح
به جای while از for استفاده کنید کمی سریعتره ولی در کل باید همون صفحه بندی انجام بشه یا همونی که مدیر فرمودن .
برای مقایسه سرعت دستورات برای دوستانی که منبع دوست دارن ! http://www.phpbench.com
موفق باشین .

MMSHFE
چهارشنبه 06 آذر 1392, 08:36 صبح
ممنون بابت پاسخ شما هم .
output_buffering رو به 10 تغییر دادم و flush هم گذاشتم آخر while ولی نمی دونم چرا با سرعت قبلی باز اجرا میشه!
با تشکر.
10 یعنی 10 تا کارکتر ها! خیلی کوچک گرفتینش. خوب یک مرتبه Off بگذارین خیالتون رو راحت کنید. بهرحال چون داره از بافر توی سیستمتون استفاده میشه، بهتره از ob_flush هم همراه با flush استفاده کنید.

MMSHFE
چهارشنبه 06 آذر 1392, 08:37 صبح
این کاری که شما میخواین رو میشه با Performance بهتر توسط AJAX انجام داد.

trasilver
پنج شنبه 07 آذر 1392, 22:48 عصر
اگه بخوایم همین رو با php اجرا بکنیم هیچ راه حلی نداره که مثلا 10 ثانیه صفحه در حال لود نباشه (صفحه سفید) بعدش یه دفعه کل صفحه نیاد بلکه کم کم این 3000 تارو نمایش بده تا به آخر می رسه؟
با foreach هم نوشتم ولی همین طوری بود متاسفانه...