1masoud
5 سال پیش توسط 1masoud مطرح شد
19 پاسخ

طول کشیدن اجرای این کد

@code2code
من یک فایل دارم که وقتی اجرا میکنم ۱۴ دقیقه طول میکشه که کامل اجرا بشه در صورتی که نباید این قدر طول بکشه من یک فایل دارم که ۲۰۰ تا لینک داره و میره اطلاعاتی رو از این ۲۰۰ لینک میکشه بیرون و در دیتابیس ذخیره میکنه میشه بگید دلیل این لود طولانی چیه؟
اینم لینک فایل
https://mega.nz/#!REpCDKxR!g20JvChoFYTj3lsKTHJRbcewe_NovDz5XWJIaY2BgGs


ثبت پرسش جدید
سجاد
تخصص : برنامه نویس
@sajaddp 5 سال پیش آپدیت شد
1

سلام
باتوجه به اینکه اسم گذاری متغیرهاتون و کامنت های درون کد شفاف نیست کمک دقیق نمیتونم انجام بدم اما به صورت عمومی سعی کنید که

  • order کدتون رو کاهش بدید.
  • دستورات مربوط به باز کردن فایل ها رو تا حد ممکن از حلقه ها بیرون بیارید.
  • روند استفاده از curl رو هم بهینه کنید.
  • در کل اگر شرایط سرور شما اجازه میده کد رو به جای php با nodeJs پیاده کنید چون php برای کاری که قصد انجامش رو دارید بهینه نیست. ( هرچند که شدنی هست. )

1masoud
تخصص : php,laravel
@masoudproton 5 سال پیش آپدیت شد
1

@sajaddp

شما کلی گفتید میشه بگید
order کدتون رو کاهش بدید.
دستورات مربوط به باز کردن حلقه ها رو تا حد ممکن از حلقه ها بیرون بیارید.
روند استفاده از curl رو هم بهینه کنید.
یعنی چی؟


سجاد
تخصص : برنامه نویس
@sajaddp 5 سال پیش مطرح شد
1

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


محمد فلاحپور
تخصص : php backend developer
@fallahpour 5 سال پیش آپدیت شد
1

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

بگذریم...

متد details دقیق چه کاری باید انجام بده..؟ چرا اینقدر فانکشن های سنگین در اون بکار رفته..؟ بهتر نبود مرحله به مرحله تفکیک انجام می کردید ..؟


1masoud
تخصص : php,laravel
@masoudproton 5 سال پیش مطرح شد
1

@fallahpour
متد details یک فایل هست که لینک ها داخل اون قرار گرفته
مگه تو سرعت تاثیر داره


محمد فلاحپور
تخصص : php backend developer
@fallahpour 5 سال پیش مطرح شد
1

واقعا متوجه منظورت نمیشم.. کار این متد چیه..؟ ورودی متد چیه..؟ و خروجی اون چیه..؟

کل این متد فقط برای خواندن یک فایله..؟؟؟


1masoud
تخصص : php,laravel
@masoudproton 5 سال پیش مطرح شد
1

@fallahpour

ببین دوست عزیز شما از while شروع به تحلیل کن
یکسری کدها که برای دیتابیس شما با اونا کار نداشته باش خط ۱۹ میاد لینک ها رو از فایل میخونه(یکی رو میخونه میره کار رو انجام میده دوباره میاد لینک بعدی رو میخونه ...)این فایل details حداکثر ۵ تا لینک داره خوبه که هر کدوم از این ۵ لینک خودشون چندین لینک دارند که در خط ۳۹ این لینک ها رو میگیریم و قبلش آدرس سایت رو بهش اضافه میکنیم از خط ۶۸ تا ۹۴ رو شما کار نداشته باشید میام خط۹۵ از خط ۹۵ ما این چندین لینک رو که در خط ۳۹ گرفتیم رو دونه به دونه کرل می کنیم و وارد صفحش میشیم تادر خط ۱۱۴ ببینیم لینک کیفیت ۷۲۰ داره یا نه تا hd بودنشو مشخص کنیم اگر ای باشه میریزیم در فایل 1hd اگر نباشد میریزیم در فایل hd2
در آپارات اگر توجه کرده باشین با اسکرول کردن صفحه در مواردی ویدیو های بیشتری رو نمایش میده این موارد بیشتر یک لینک هست که با در خط۱۳۹ میگیم که با این کد $this->preg($url)که تابع هست برو اون لینکه رو پیدا کن بعد که پیدا کرد میگیم دوباره کاری که در خط ۱۱۴ انجام دادی در اینجا که خط ۱۴۴ هست رو تا ۲۳۷انجام بده بعد بیا داخل دیتابیس ذخیره کن .
اقا محمد خواهشند کمک کن


1masoud
تخصص : php,laravel
@masoudproton 5 سال پیش مطرح شد
1

اگر تابع sleepاستفاده کنم بنظرتون درست میشه یا نه


مهدی
@code2code 5 سال پیش آپدیت شد
1

یا حضرت ادل چه کد ناخوانایی ...
نگاه توی قسمتای مختلف کدت که حس میکنی زمان بره یه متغییر تعریف کن و چک کن ببین چقدر زمان میبره
واسه این کار مث زیر عمل کن و زمان اجرای هر بخش رو تخمین بزن اگه نتونستی مشکل زمان رو حل کنی بهم بگو کدوم بخشش زمان بر بود تا راه حل بدم

$start = time();
// your codes
$end = time() - $start;
echo 'first code time: '. $end;

در آخر هم فورزا میلان


1masoud
تخصص : php,laravel
@masoudproton 5 سال پیش مطرح شد
1

@code2code
زمانی که داخل curl میره تایم بیشتری طول میکشه برای این قسمت چیکار کنم و حتی موری بیشتری هم میبره برای هر لینک ۲ mb حافظه میبره

راستی یک چیز دیگه من الان فرم رو اجرا کردم خوب یک سری اطلاعات رو در دیتابیس ذخیره کرد وسط کار اینترنت قطع شد بعپ وصل شدن اینترنت دوباره از اول شروع به ذخیره کردن میکنه نمیشه بگیم ادامه کار رو ذخیره کن


مهدی
@code2code 5 سال پیش مطرح شد
1

والا من کدتو باز کردم دیدم خیلی شلوغه اصلا نگاش نکردم
نمیدونم تو چجوری نوشتی فقط به نظرم توی یه مرحله رو برو صفحه به صفحه لینکا رو بخون بعد که لینکا رو ذخیره کردی توی دیتابیس بعد شروع کن اطلاعاتشونو بگیر
حالا اگه به این منوال جلو بری هرجا برق بره مهم نیست دیگه
فقط به نظرم توی option curl این رو ست کن شاید سرعتت بره بالا

            CURLOPT_ENCODING       => "",

1masoud
تخصص : php,laravel
@masoudproton 5 سال پیش آپدیت شد
1

@code2code
این که برای نمایش فارسی هست ربطی به سرعت نداره

بعدش بابت کدی که میگم یک موقع اینترنت قطع شد بخاطر این میگم که ما باید هر دو روز این اطلاعات رو آپدیت کنیم پس دوباره نیاز است کد اجرا بشه به خاطر این میگم که چطوری بهش بگیم اطلاعات رو از اونجایی که قطع شد بگیر


مهدی
@code2code 5 سال پیش مطرح شد
1

نمایش چی فارسی هست ؟
فک نکنم ربطی به این چیزا داشته باشه
این آپشن رو ست کردی؟؟؟؟؟؟؟؟؟؟


1masoud
تخصص : php,laravel
@masoudproton 5 سال پیش آپدیت شد
1

@code2code
CURLOPT_ENCODING => "UTF8", برای نمایش فارسی هست حالا تو میگی خالی چاپ کنم نمیدونم چون قسمت encoding برای نمایش زبان مورد نظر است


مهدی
@code2code 5 سال پیش مطرح شد
1

آقا تو زبانو چیکار داری مگه نمیخوای لینک بکشی بیرون؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
اصلا تو نیاز به این کار نداری

The contents of the "Accept-Encoding: " header. This enables decoding of the response. Supported encodings are "identity", "deflate", and "gzip". If an empty string, "", is set, a header containing all supported encoding types is sent. 

سید محمد حسین موسوی
تخصص : FullStack Developer
@SeyedMH.Mosavi 5 سال پیش مطرح شد
1

من با php کار نکردم ولی چون پیام دادی که جوابی بدم، این متن رو دارم اینجا ارسال می کنم
حتما در اینده این موارد رو رعایت کن!
اول اینکه یه method انقدر نباید توش کد باشه
دوم اینکه بهتره اسم ها رو درست انتخاب کنی
کدهات نباید انقدر تو رفتگی داشته باشند و چنتا if تو در تو یا چنتا حلقه و if و ... باشه.
اگر قراره چنتا کار انجام بدی، چنتا متد بنویس و هر متد رو برای یک کار و وظیفه تعیین کن. نه اینکه یه متد داشته باشی و 10 تا کار انجام بده و 1000 خط کد
اینهمه حلقه تو در تو نشون می ده که منطق کدنویسی ات اشتباهه و قطعا کدت بشدت کند خواهد شد!

اما مسئله اصلی شما این نیست. بنده کدت رو وقت نکردم کامل بخونم و در یک نگاه اگر بخوام بهت بگم این کندی بخاطر اینه که درخواست های شما باید به سمت سایت مقصد بره و یه کاری کنه و دوباره برگرده داخل سایت شما و شما هم یه کاری روش انجام بدی و و دوباره همین قضیه از ابتدا
همین که نتیجه کار شما وابسته است به یک منبع دیگه (سایت |پارات) باعث کندی می شه.
منطقی هم هست. شما تا درخواست رو بفرستی و بخواد بره داخل سایت اپارات و برگرده و نتیجه رو برگردونه یه زمانی می بره. حالا این وسط شما داری مثلا 100 تا درخواست رو "پشت سر هم" و به صورت "سریال" می فرستی. تا نتیحه اولی برنگرده، برنامه ات صبر می کنه و هیچ کاری نمی کنه و بعد می ره سراغ دومی و دوباره منتظر جواب می مونه و تا اخر.
برای رفع این مشکل باید به جای درخواست های پشت سر هم، به صورت "موازی" و به جای یدونه درخواست، چنتا درخواست رو بصورت همزمان ارسال کنی.
برای اینکار ببین اصلا امکانش هست که این درخواست ها رو بصورت موازی ارسال کنی؟
مثلا یه همچین چیزی تو گوگل سرچ کن ببین چیزی به کارت می یاد:
php curl parallel
php async curl


مهدی
@code2code 5 سال پیش مطرح شد
1

@SeyedMH.Mosavi
توی پی اچ پی async با وصله زدن درست میشه که هزار جور ایراد داره واسه همین هیچ وقت توصیه نمیشه
بهتره کدش اصلاح بشه (که خیلی عجیب نوشته شده) و مثلا چنین آپشنی قرار نگیره CURLOPT_ENCODING => UTF۸
و اگه میخواد همزمان چندین درخواست بفرسته کامندلاین ران کنه


1masoud
تخصص : php,laravel
@masoudproton 5 سال پیش مطرح شد
1

@code2code
آقا مهدی CURLOPT_ENCODING => "", قرار دادم اما تغییری نکرد


مهدی
@code2code 5 سال پیش مطرح شد
1

نگاه به نظرم کدتو باز نویسی کن کلا ....
خیلی بد نوشته شده یه ریفکتورش کن


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

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