نیما - ش
4 سال پیش توسط نیما - ش مطرح شد
6 پاسخ

مشکل در لود رکوردهای زیاد در php

دوستان سلام
من یه گالری تصاویر ساختم که این گالری بیش از 1000 عدد عکس رو توی خودش جا داده و زمانی که کوئری میزنم و تمام داده ها رو از mysql دریافت میکنم و میخوام به ازای هر عکس یک سری تگ ساخته شود ، متاسفانه مدت زمان زیادی طول میکشه تا تمام DOM Element ها بوسیله ی php رندر بشه و گاها مرورگر هنگ میکنه!

  • دوستان این گالری تصاویر به این صورت نوشته شده که ابتدا 20 تصویر اول نمایش داده میشود و با اسکرول تصاویر بعدی لود میشن! پس ما این مشکل رو نداریم که بگیم بخاطر لود تصاویر هست! تصاویر بعدی در مقدار xrs تگ img قرار میگیرن و با اسکرول جایگزین src و سپس لود میشن (یه حورایی لیزی لود هست)
<img class="image" src="" xrs='<?php echo $gallery_item->file_name; ?>' />

مشکل اصلی ساخت DOM Element هایی هستند که بوسیله ی php ساخته میشوند و مدت زمان ساخت شون طول میکشه!
کسی تجربه ای داره در این مورد که چطور میشه این مشکل رو حل کرد؟


ثبت پرسش جدید
بهزاد عزیزان
@behzad.azizan 4 سال پیش مطرح شد
0

سلام
من الان یه همچین چیزی رو تست کردم. یه جدول به اسم گالری ساختم یه فیلد به اسم file_name داره و داخلش 1000 رکورد ایجاد کردم
یه فورایچ توی php گذاشتم و تگ های img رو توی صفحه ایجاد کردم
کل فرآیند کمتر از 200 میلی ثانیه زمان برد!
من فکر میکنم مشکل شما سمت واکشی اطلاعات از سمت دیتابیس هست . اگه تعداد رکوردهاتون زیاد هست دقت کنید که حتما ایندکس گذاری ها رو درست انجام داده باشید و اگه جدول گالریتون فیلد های زیادی داره فقط فیلد هایی رو بگیرید که توی این بخش نیاز دارید. شاید هم کانکشن دیتابیستون کند هست. چک کنید این موضوع رو هم . مثلا اگه دیتابیستون ریموت هست سرعت شبکه رو چک کنید


نیما - ش
تخصص : برنامه نویس وب
@nimageneral 4 سال پیش مطرح شد
0

ممنونم بهزاد عزیز @behzad.azizan1991
آره دقیقا اصلا از طرف php نیست ، مشکل از جی اس ای هست مه روی تمام المنت ها میخواد اجرا بشه و در قسمت onload فراخونی میشه!


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

شما باید یه تعداد تصویر رو نمایش بدید مثلا ۲۰ تا..
سپس وقتی اسکرول زدی به پایین صفحه باید یه درخواست Ajax بزنی و ۲۰ تای بعدی (با Pagination) رو بگیری

نتیجه درخواست Ajax رو که گرفتی باید اون وقت ۲۰ تصویر جدید رو به DOM اضافه کنی..
چیزی شبیه کاری که اینستگرام و خیلی سرویس های دیگه انجام میدند..

واکشی ۱۰۰۰ رکورد از دیتابیس اصلا کار جالبی نیست


نیما - ش
تخصص : برنامه نویس وب
@nimageneral 4 سال پیش مطرح شد
0

ممنونم علی جان، @ali.bayat
متاسفانه چون از Isotope js استفاده میکنم برای نمایش گالری بصورت ماسونری، امکان اینکه داده ها رو بصورت ajax بگیرم نیست و مجبور شدم که داده ها را بگیرم و فقط 20 تای اول رو نمایش بدم و متاسفانه Isptope روی گالری بیش از 1000 عکس درست جواب نمیده!


بهزاد عزیزان
@behzad.azizan 4 سال پیش مطرح شد
0

@nimageneral باز هم نباید مشکلی بوجود بیاد. حتما کدهای سمت جاوااسکریپتتون رو چک کنید
پیشنهاد میکنم برنامه رو یکبار دیگه اجرا کنید. اسکریپتی که وظیفه لیزی لود رو داره رو غیر فعال کنید. بعد صفحه رو اجرا کنید ببینید بازهم مرورگر هنگ میکنه یا نه. اگه هنگ نکرد مطمئن باشید از سمت جی اس مشکل دارید . اگه هنگ کرد مشکلتون سمت پی اچ پی هست و با دیباگ کردن مشکل رو پیدا کنید

اگه مشکل سمت کلاینت بود برنامه رو به همراه اسکریپت لیزی لودتون ران کنید. inspect elements رو باز کنید و برید تو سربرگ network . بدون اینکه اسکرول کنید ببینید چند تا رکوئست برای لود عکس میره سمت سرور.
طبق الگوریتمی که شما دارید بدون اسکرول باید یک عکس فقط لود بشه و هر بار که اسکرول میکنید باید تصاویر جدید لود بشن فقط.

در نهایت پیشنهاد میکنم از کتابخونه ی http://jquery.eisbehr.de/ استفاده کنید


imtit
@sazestan 4 سال پیش مطرح شد
0

سلام
در حالت local هم این مسئله رو دارید؟


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

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