За последние 24 часа нас посетили 18184 программиста и 1811 роботов. Сейчас ищут 1122 программиста ...

eval для плагинов - насколько он ресурсоемок?

Тема в разделе "PHP для новичков", создана пользователем Ruzzz, 13 дек 2009.

  1. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    eval используется для плагинов в одном движке. Я использую всего пару плагинов. Хочу немного оптимизировать. Подскажите стоит ли плагины внедрить в скрип и отказаться от eval?
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    include, по сути, тот же eval.
     
  3. sorteros

    sorteros Активный пользователь

    С нами с:
    28 авг 2009
    Сообщения:
    54
    Симпатии:
    0
    eval лучше не использовать, т.к. php не интерпретирует исходный код, а интерпретирует какой-то "свой" байт-код, следовательно, встречая функцию eval, запускает заново комилятор. Это плачевно сказывется на скорости работы.
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    При include происходит то же самое. Чтобы файлы подключались до запуска компилятора, следует использовать require.
     
  5. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    Ну а насколько это критично для сегодняшнего хостинга?
     
  6. sorteros

    sorteros Активный пользователь

    С нами с:
    28 авг 2009
    Сообщения:
    54
    Симпатии:
    0
    А если так?)
    PHP:
    1. <? require($x == 1 ? '1.php' : '2.php');
    Ruzzz, не критично совершенно. Eval - просто не слишком хороший тон.
     
  7. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Не совсем. Насколько мне помнится eval не кешируется опкодкешерами.
     
  8. Ruzzz

    Ruzzz Активный пользователь

    С нами с:
    11 фев 2008
    Сообщения:
    148
    Симпатии:
    1
    Вообще речь идет о PunBB, решаю какую версию использовать. В 1.3 ввели плагины на eval и слышал что в общем «потяжелел» движок. Вот пытаюсь для себя решить будет ли это ощутимо.
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Попробуй.
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Только потому, что они не парсят eval'ы.
     
  11. sorteros

    sorteros Активный пользователь

    С нами с:
    28 авг 2009
    Сообщения:
    54
    Симпатии:
    0
    Что значит "попробуй"? Если файл подключается до компиляции, его имя по определению не может быть переменной.
     
  12. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    sorteros
    по-про-буй.
     
  13. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    И что ты предлагаешь? Переписать опкодкешеры? Или все же не писать с использованием eval?

    У eval есть один огромный минус - с таким кодом крайне хреново заниматься отладкой. Это даже много важнее чем то, что он не кешируется.
     
  14. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Simpliest
    у него есть ещё один минут, это потенциальная бага при кривом использовании
     
  15. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    А у include?
     
  16. sorteros

    sorteros Активный пользователь

    С нами с:
    28 авг 2009
    Сообщения:
    54
    Симпатии:
    0
    [vs], DarkElf, подключите-ка мне ДО запуска компилятора вот этот файл:
    PHP:
    1.  
    2. <?
    3. $str = '';
    4. $str .= $obj->Method1($obj->A, $obj->A->B($obj))->Method2($obj);
    5. $str .= chr(mt_rand(97, 122));
    6. if(ord($str[1]) > 100)
    7. {
    8.   while(mt_rand(0, 9))
    9.   {
    10.     $str .= "_";
    11.   }
    12. }
    13. else
    14. {
    15.   $str .= substr(md5(time() . microtime()), 0, 6);
    16. }
    17. $str .= '.php';
    18. require($str);
    19. ?>
    20.  
     
  17. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
  18. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Не понял. Что именно по ссылке изменилось?
     
  19. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Всё, разобрался. Это аж до версии 4.0.2 функцией require файлы подключались до выполнения скрипта. Теперь же
     
  20. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    почти нет