Будет ли включение XDebug на производственном сервере замедлять работу PHP?

Я придумал свое решение. Используйте этот метод, передайте любой документ ( dict , list , ObjectId и т. Д.) Для сериализации.

def getSerializable(doc):
    # check if it's a list
    if isinstance(doc, list):
        for i, val in enumerate(doc):
            doc[i] = getSerializable(doc[i])
        return doc

    # check if it's a dict
    if isinstance(doc, dict):
        for key in doc.keys():
            doc[key] = getSerializable(doc[key])
        return doc

    # Process ObjectId
    if isinstance(doc, ObjectId):
        doc = str(doc)
        return doc

    # Use any other custom serializting stuff here...

    # For the rest of stuff
    return doc
30
задан Andrei 19 August 2010 в 13:38
поделиться

4 ответа

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

Во-первых, когда вы добавляете отладочное поведение на свой сервер, механизм отладки «подключается» к процессу PHP и получает сообщения механизма об остановке в точках останова, и это ПЛОХО, потому что это снижает производительность иметь другой процесс, останавливающий или "удерживающий" синтаксический анализатор PHP.

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

Если вам нужно иметь отладку в вашем коде, то в вашем приложении внедрите систему отладки, если она недоступна, поскольку она встроена в большинство фреймворков. Установите значение конфигурации, скажем DEBUG_ENABLED, и при выдаче исключений, если это не включен, перенаправить на мелкую страницу, иначе на уродливую страницу с отладочной информацией, но хорошо позаботьтесь о том, какую отладочную информацию вы отображаете на своем сервере. Надеюсь, это все проясняет.

РЕДАКТИРОВАТЬ Поскольку, очевидно, мой ответ недостаточно документирован, вам следует проверить эти источники

Наконец, есть одна вещь Я не сказал, поскольку думал, что это было неявно: здравый смысл не делает этого! Вы не размещаете инструменты отладки на своем производственном сервере по той же причине, по которой вы храните их в другой среде, потому что вам нужно хранить ненужные вещи подальше от него. Любой процесс, запущенный на сервере, каким бы легким он ни был, повлияет на вашу производительность.

39
ответ дан 27 November 2019 в 22:04
поделиться

Зачем вам такое? Отлаживайте перед развертыванием в производственной среде. Это замедлит работу приложения.

4
ответ дан 27 November 2019 в 22:04
поделиться

Вы никогда не должны держать это на производстве.

Вашему приложению никогда не нужно выводить "эти милые отладочные сообщения", поскольку они совсем не милы для ваших пользователей. Они являются признаком плохого тестирования и убивают доверие пользователей, особенно в среде предприятия/коммерции.

Во-вторых, чем более подробную техническую информацию вы раскрываете, тем больше вероятность того, что вас взломают (особенно если вы уже раскрываете, что в вашем коде есть проблемы!). Производственные серверы должны записывать ошибки в файлы и никогда не показывать их.

Скорость выполнения - это наименьшая забота для вас, в любом случае она будет затронута, как и память.

1
ответ дан 27 November 2019 в 22:04
поделиться

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

0
ответ дан 27 November 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: