@code2code
من یک فایل دارم که وقتی اجرا میکنم ۱۴ دقیقه طول میکشه که کامل اجرا بشه در صورتی که نباید این قدر طول بکشه من یک فایل دارم که ۲۰۰ تا لینک داره و میره اطلاعاتی رو از این ۲۰۰ لینک میکشه بیرون و در دیتابیس ذخیره میکنه میشه بگید دلیل این لود طولانی چیه؟
اینم لینک فایل
https://mega.nz/#!REpCDKxR!g20JvChoFYTj3lsKTHJRbcewe_NovDz5XWJIaY2BgGs
سلام
باتوجه به اینکه اسم گذاری متغیرهاتون و کامنت های درون کد شفاف نیست کمک دقیق نمیتونم انجام بدم اما به صورت عمومی سعی کنید که
شما کلی گفتید میشه بگید
order کدتون رو کاهش بدید.
دستورات مربوط به باز کردن حلقه ها رو تا حد ممکن از حلقه ها بیرون بیارید.
روند استفاده از curl رو هم بهینه کنید.
یعنی چی؟
عزیز، مباحث پایه برنامه نویسی مانند نحوه محاسبه پیچیدگی زمانی و حافظه و روش های کاهش این پیچیدگی ها رو جستجو کنید بعد از مطالعه در این خصوص کدی که نوشتید رو بازنویسی کنید.
متاسفانه یک عادت بد که شما دارید مطرح کردن سوال یا مشکلتون بصورت کلی هست. این سوالتون هم از این قضییه مستثنی نیست..
بگذریم...
متد details دقیق چه کاری باید انجام بده..؟ چرا اینقدر فانکشن های سنگین در اون بکار رفته..؟ بهتر نبود مرحله به مرحله تفکیک انجام می کردید ..؟
@fallahpour
متد details یک فایل هست که لینک ها داخل اون قرار گرفته
مگه تو سرعت تاثیر داره
واقعا متوجه منظورت نمیشم.. کار این متد چیه..؟ ورودی متد چیه..؟ و خروجی اون چیه..؟
کل این متد فقط برای خواندن یک فایله..؟؟؟
ببین دوست عزیز شما از while شروع به تحلیل کن
یکسری کدها که برای دیتابیس شما با اونا کار نداشته باش خط ۱۹ میاد لینک ها رو از فایل میخونه(یکی رو میخونه میره کار رو انجام میده دوباره میاد لینک بعدی رو میخونه ...)این فایل details حداکثر ۵ تا لینک داره خوبه که هر کدوم از این ۵ لینک خودشون چندین لینک دارند که در خط ۳۹ این لینک ها رو میگیریم و قبلش آدرس سایت رو بهش اضافه میکنیم از خط ۶۸ تا ۹۴ رو شما کار نداشته باشید میام خط۹۵ از خط ۹۵ ما این چندین لینک رو که در خط ۳۹ گرفتیم رو دونه به دونه کرل می کنیم و وارد صفحش میشیم تادر خط ۱۱۴ ببینیم لینک کیفیت ۷۲۰ داره یا نه تا hd بودنشو مشخص کنیم اگر ای باشه میریزیم در فایل 1hd اگر نباشد میریزیم در فایل hd2
در آپارات اگر توجه کرده باشین با اسکرول کردن صفحه در مواردی ویدیو های بیشتری رو نمایش میده این موارد بیشتر یک لینک هست که با در خط۱۳۹ میگیم که با این کد $this->preg($url)که تابع هست برو اون لینکه رو پیدا کن بعد که پیدا کرد میگیم دوباره کاری که در خط ۱۱۴ انجام دادی در اینجا که خط ۱۴۴ هست رو تا ۲۳۷انجام بده بعد بیا داخل دیتابیس ذخیره کن .
اقا محمد خواهشند کمک کن
یا حضرت ادل چه کد ناخوانایی ...
نگاه توی قسمتای مختلف کدت که حس میکنی زمان بره یه متغییر تعریف کن و چک کن ببین چقدر زمان میبره
واسه این کار مث زیر عمل کن و زمان اجرای هر بخش رو تخمین بزن اگه نتونستی مشکل زمان رو حل کنی بهم بگو کدوم بخشش زمان بر بود تا راه حل بدم
$start = time();
// your codes
$end = time() - $start;
echo 'first code time: '. $end;
در آخر هم فورزا میلان
@code2code
زمانی که داخل curl میره تایم بیشتری طول میکشه برای این قسمت چیکار کنم و حتی موری بیشتری هم میبره برای هر لینک ۲ mb حافظه میبره
راستی یک چیز دیگه من الان فرم رو اجرا کردم خوب یک سری اطلاعات رو در دیتابیس ذخیره کرد وسط کار اینترنت قطع شد بعپ وصل شدن اینترنت دوباره از اول شروع به ذخیره کردن میکنه نمیشه بگیم ادامه کار رو ذخیره کن
والا من کدتو باز کردم دیدم خیلی شلوغه اصلا نگاش نکردم
نمیدونم تو چجوری نوشتی فقط به نظرم توی یه مرحله رو برو صفحه به صفحه لینکا رو بخون بعد که لینکا رو ذخیره کردی توی دیتابیس بعد شروع کن اطلاعاتشونو بگیر
حالا اگه به این منوال جلو بری هرجا برق بره مهم نیست دیگه
فقط به نظرم توی option curl این رو ست کن شاید سرعتت بره بالا
CURLOPT_ENCODING => "",
@code2code
این که برای نمایش فارسی هست ربطی به سرعت نداره
بعدش بابت کدی که میگم یک موقع اینترنت قطع شد بخاطر این میگم که ما باید هر دو روز این اطلاعات رو آپدیت کنیم پس دوباره نیاز است کد اجرا بشه به خاطر این میگم که چطوری بهش بگیم اطلاعات رو از اونجایی که قطع شد بگیر
@code2code
CURLOPT_ENCODING => "UTF8", برای نمایش فارسی هست حالا تو میگی خالی چاپ کنم نمیدونم چون قسمت encoding برای نمایش زبان مورد نظر است
آقا تو زبانو چیکار داری مگه نمیخوای لینک بکشی بیرون؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
اصلا تو نیاز به این کار نداری
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.
من با php کار نکردم ولی چون پیام دادی که جوابی بدم، این متن رو دارم اینجا ارسال می کنم
حتما در اینده این موارد رو رعایت کن!
اول اینکه یه method انقدر نباید توش کد باشه
دوم اینکه بهتره اسم ها رو درست انتخاب کنی
کدهات نباید انقدر تو رفتگی داشته باشند و چنتا if تو در تو یا چنتا حلقه و if و ... باشه.
اگر قراره چنتا کار انجام بدی، چنتا متد بنویس و هر متد رو برای یک کار و وظیفه تعیین کن. نه اینکه یه متد داشته باشی و 10 تا کار انجام بده و 1000 خط کد
اینهمه حلقه تو در تو نشون می ده که منطق کدنویسی ات اشتباهه و قطعا کدت بشدت کند خواهد شد!
اما مسئله اصلی شما این نیست. بنده کدت رو وقت نکردم کامل بخونم و در یک نگاه اگر بخوام بهت بگم این کندی بخاطر اینه که درخواست های شما باید به سمت سایت مقصد بره و یه کاری کنه و دوباره برگرده داخل سایت شما و شما هم یه کاری روش انجام بدی و و دوباره همین قضیه از ابتدا
همین که نتیجه کار شما وابسته است به یک منبع دیگه (سایت |پارات) باعث کندی می شه.
منطقی هم هست. شما تا درخواست رو بفرستی و بخواد بره داخل سایت اپارات و برگرده و نتیجه رو برگردونه یه زمانی می بره. حالا این وسط شما داری مثلا 100 تا درخواست رو "پشت سر هم" و به صورت "سریال" می فرستی. تا نتیحه اولی برنگرده، برنامه ات صبر می کنه و هیچ کاری نمی کنه و بعد می ره سراغ دومی و دوباره منتظر جواب می مونه و تا اخر.
برای رفع این مشکل باید به جای درخواست های پشت سر هم، به صورت "موازی" و به جای یدونه درخواست، چنتا درخواست رو بصورت همزمان ارسال کنی.
برای اینکار ببین اصلا امکانش هست که این درخواست ها رو بصورت موازی ارسال کنی؟
مثلا یه همچین چیزی تو گوگل سرچ کن ببین چیزی به کارت می یاد:
php curl parallel
php async curl
@SeyedMH.Mosavi
توی پی اچ پی async با وصله زدن درست میشه که هزار جور ایراد داره واسه همین هیچ وقت توصیه نمیشه
بهتره کدش اصلاح بشه (که خیلی عجیب نوشته شده) و مثلا چنین آپشنی قرار نگیره CURLOPT_ENCODING => UTF۸
و اگه میخواد همزمان چندین درخواست بفرسته کامندلاین ران کنه
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟