ФорумПрограммированиеPHP для идиотов → Оптимизация кода рекламной площадки от MobileADS

Оптимизация кода рекламной площадки от MobileADS

  • yugran

    Сообщения: 22 Репутация: N Группа: Кто попало

    Spritz 10 июля 2008 г. 3:35

    Есть у меня сайт на котором размещена рекламная площадка MobileADS
    Так вот, она сильно долго грузится. К примеру вся сраница, учитывая время генерации площадки, сгенерирована за  0.082 сек., из которых на этот блок было потрачено 0.042 сек. %) или 0.976 из 1.019…

    вот собсна сам код
    $mad_socketTimeout = 2; // таймаут соединения с сервером mobileads.ru 
    ini_set("default_socket_timeout",$mad_socketTimeout);
    $mad_siteId = 0000;
    $mad_pageEncoding = "UTF-8"; // устанавливаем кодировку страницы

    $mad_ua = urlencode(@$_SERVER['HTTP_USER_AGENT']);
    $mad_ip = urlencode(@$_SERVER['REMOTE_ADDR']);
    $mad_xip = urlencode(@$_SERVER['HTTP_X_FORWARDED_FOR']);
    $mad_ref = urlencode(@$_SERVER['SERVER_NAME'].@$_SERVER['REQUEST_URI']);

    $mad_lines = "";
    $mad_fp = @fsockopen ("mobileads.ru", 80, $mad_errno, $mad_errstr, $mad_socketTimeout);
    if($mad_fp) {
    // переменная $mad_lines будет содержать массив, непарные элементы которого будут ссылками, парные - названием
    $mad_lines = @file("http://mobileads.ru/links?id=$mad_siteId&ip=$mad_ip&xip=$mad_xip&ua=$mad_ua&ref=$mad_ref");
    }
    @fclose($mad_fp); // вывод ссылок
    for($malCount=0; $malCount < count($mad_lines); $malCount+=2){
    $linkURL = trim($mad_lines[$malCount]);
    $linkName = iconv("Windows-1251", $mad_pageEncoding, $mad_lines[$malCount+1]);
    echo "<a href=\"".$linkURL."\">".$linkName."</a><br />";
    }

    в среднем выполняется за 0.045 сек.

    Подскажите. Как можно его оптимизировать?
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 10 июля 2008 г. 8:21, спустя 4 часа 46 минут 50 секунд

    В отдельный скрипт и в iframe.
  • yugran

    Сообщения: 22 Репутация: N Группа: Кто попало

    Spritz 10 июля 2008 г. 9:05, спустя 43 минуты 7 секунд


    В отдельный скрипт и в iframe.

    это ж мобильный сайт, тут с iframe не получется…
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 10 июля 2008 г. 10:47, спустя 1 час 42 минуты 54 секунды

    я думаю основное время у тебя теряеться тут

    $mad_lines = @file("http://mobileads.ru/links?id=$mad_siteId&ip=$mad_ip&xip=$mad_xip&ua=$mad_ua&ref=$mad_ref");


    врядли ты сумеешь тут чтото закешировать или оптимизировать

    кстати



    $mad_fp = @fsockopen ("mobileads.ru", 80, $mad_errno, $mad_errstr, $mad_socketTimeout);
    if($mad_fp) {
    // переменная $mad_lines будет содержать массив, непарные элементы которого будут ссылками, парные - названием
    $mad_lines = @file("http://mobileads.ru/links?id=$mad_siteId&ip=$mad_ip&xip=$mad_xip&ua=$mad_ua&ref=$mad_ref");
    }
    @fclose($mad_fp); // вывод ссылок


    никто не заметил что это бред?
    fsockopen и file между собой не связаны
    надо либо


    $fp = fsockopen($host, $port, $errno, $errstr, $ttl);
    $text = fread($fp,1024);
    fclose($fp);


    либо

    $lines = file($url);


    а ты сначала открываешь соединение, потом открываешь второе, вычитываешь из второго, закрываешь его, а потом закрываешь первое
  • yugran

    Сообщения: 22 Репутация: N Группа: Кто попало

    Spritz 11 июля 2008 г. 0:39, спустя 13 часов 51 минуту 41 секунду

    Можете пожалуйста разьяснить, как получить содержимое файла
    http://mobileads.ru/links?id=$mad_siteId&ip=$mad_ip&xip=$mad_xip&ua=$mad_ua&ref=$mad_ref
    при помощи этого кода?


    $fp = fsockopen($host, $port, $errno, $errstr, $ttl);
    $text = fread($fp,1024);
    fclose($fp);

  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 11 июля 2008 г. 12:36, спустя 11 часов 57 минут 6 секунд

    мануал открыть не пробовал?!



    $fp = fsockopen("mobileads.ru", 80, $errno, $errstr, 30);
    $out = "GET links?id=$mad_siteId&ip=$mad_ip&xip=$mad_xip&ua=$mad_ua&ref=$mad_ref HTTP/1.1\r\n";
    $out .= "Host: mobileads.ru\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    $response = "";
    while (!feof($fp)) {
    $response .= fgets($fp, 1024);
    }
    fclose($fp);


    в результате у тебя в $response будет ответ ввиде строки а не ввиде массива как после file()
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz 11 июля 2008 г. 12:40, спустя 3 минуты 53 секунды

    А еще, если хостинг позволяет, можно все это заменить одним file_get_contents.
    Только проблемы скорости все это не решает, ибо тупит не скрипт, а удаленный сервер …
    Вообще обычно вся эта хрень формируется через JS, а не на стороне сервера.
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 11 июля 2008 г. 12:43, спустя 2 минуты 50 секунд

    AlexB, да не проблема можно я через курл сделать))) но все-таки одно соединенеи сервером тупит меньше чем два)))
  • yugran

    Сообщения: 22 Репутация: N Группа: Кто попало

    Spritz 11 июля 2008 г. 17:35, спустя 4 часа 52 минуты 21 секунду

    я пробовал, но в ответ не только файл приходит. а еще и не нужные мне заголовки которые. вот я и спросил. как же можно получить содержимое файла?


    А еще, если хостинг позволяет, можно все это заменить одним file_get_contents.
    Только проблемы скорости все это не решает, ибо тупит не скрипт, а удаленный сервер …
    Вообще обычно вся эта хрень формируется через JS, а не на стороне сервера.

    В данном случие JS нельзя использовать :(


    AlexB, да не проблема можно я через курл сделать))) но все-таки одно соединенеи сервером тупит меньше чем два)))

    а вот с 2 соеденениями это жесть. так как это стандартный код который запускается примерно ~ 4 000 000 раз в день (со всех сайтов) %) вот наверно по этому так сервак и тупит…
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 11 июля 2008 г. 18:46, спустя 1 час 10 минут 21 секунду

    не нужные мне заголовки

    заголовки отделяються от текста двойным обрывом строки

    можно сделать

    substr($response,strpos("\r\n\r\n", $response))


    стандартный код

    пришли мне этот мануал
  • yugran

    Сообщения: 22 Репутация: N Группа: Кто попало

    Spritz 11 июля 2008 г. 20:27, спустя 1 час 41 минуту 52 секунды


    стандартный код

    пришли мне этот мануал


    я прекрепил его к посту

    substr($response,strpos($response, "\r\n\r\n"))

    всеравно оставляет два обзаца
  • yugran

    Сообщения: 22 Репутация: N Группа: Кто попало

    Spritz 11 июля 2008 г. 23:04, спустя 2 часа 36 минут 44 секунды

    Если делать через fsockopen то, как убрать ненужнуе http заголовки и это все поместить в масив?
    Если использовать file то, как установить время за которое долже прийти ответ?

    Видимо те кто написали код, который я разместил в первом посте, тоже не знали ответ не на первый не на второй вопрос! Здесь есть кто может ответить хотябы на один из них?
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 11 июля 2008 г. 23:14, спустя 9 минут 49 секунд

    Да через file_get_contents сделай, так проще…

    Ну замени
    for($malCount=0; $malCount < count($mad_lines); $malCount+=2){ 


    на
    $mad_lines_count = count($mad_lines);
    for($malCount=0; $malCount < $mad_lines_count; $malCount+=2){


    Типа немножко «оптимизируй» xD
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 12 июля 2008 г. 0:50, спустя 1 час 36 минут 10 секунд

    как убрать ненужнуе http заголовки

    блин да сделай сам чтонибудь! совсем обленился…

    всеравно оставляет два обзаца

    ну значит надо еще 4 символа убрать

    substr($response,strpos($response, "\r\n\r\n")+4)


    поместить в масив

    $massive = explode("\r\n",$response)

    тока тебе это нах не надо

    Видимо те кто написали код

    php видят первый раз

    как установить время за которое долже прийти ответ

    смотри настройки php
  • yugran

    Сообщения: 22 Репутация: N Группа: Кто попало

    Spritz 12 июля 2008 г. 3:52, спустя 3 часа 1 минуту 52 секунды

    CTAPbIu_MABP, большое пасибо!

    вот что получилось
    $mad_siteId = 0000;

    $mad_ua = urlencode(@$_SERVER['HTTP_USER_AGENT']);
    $mad_ip = urlencode(@$_SERVER['REMOTE_ADDR']);
    $mad_xip = urlencode(@$_SERVER['HTTP_X_FORWARDED_FOR']);
    $mad_ref = urlencode(@$_SERVER['SERVER_NAME'].@$_SERVER['REQUEST_URI']);

    $mad_lines = '';
    $mad_fp = @fsockopen ('mobileads.ru', 80, $mad_errno, $mad_errstr, 2);
    if($mad_fp) {

    $out = "GET /links?id=$mad_siteId&ip=$mad_ip&xip=$mad_xip&ua=$mad_ua&ref=$mad_ref HTTP/1.1\r\n";
    $out .= "Host: mobileads.ru\r\n";
    $out .= "Connection: Close\r\n\r\n";

    fwrite($mad_fp, $out);

    while (!feof($mad_fp)) {
    $mad_lines .= fgets($mad_fp);
    }
    $mad_lines = substr($mad_lines, strrpos($mad_lines, "\r\n\r\n")+4);
    $mad_lines = explode("\r\n",$mad_lines);
    fclose($mad_fp);
    }

    $mad_lines_count = count($mad_lines);
    for($malCount=0; $malCount < $mad_lines_count; $malCount+=2){
    $linkURL = trim($mad_lines[$malCount]);
    $linkName = iconv("Windows-1251", "UTF-8", $mad_lines[$malCount+1]);
    echo '<a href="'.$linkURL.'">'.$linkName.'</a><br />';
    }



    И вот меня заинтересовал еще один вопросы.
    Какая разница между использыванием одинарных(') и двойных(") кавычек? Какие использывать лучше?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!