Возвратите значение от События — там Хорошая Практика для этого?

Одна разумная техника, которая может легко быть осуществлена полка, кэшируется. Огромное количество времени имеет тенденцию входить в генерацию ресурсов для клиентов, которые распространены между запросами (и даже через клиенты); устранение этой работы во время выполнения может привести к поразительным увеличениям скорости. Можно вывести сгенерированный ресурс (или фрагмент ресурса) в файл вне веб-дерева, и затем читать, это въезжает задним ходом при необходимости. Очевидно, некоторое профилирование будет необходимо, чтобы гарантировать, что это на самом деле быстрее, чем регенерация - сдерживание веб-сервера к диску регулярно может быть вредным, таким образом, ресурс действительно должен иметь тяжелое повторное использование.

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

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

39
задан Picrofo Software 4 November 2012 в 12:47
поделиться

3 ответа

Часто бывает неудобно возвращать значения из событий. На практике мне было намного проще включить свойство с возможностью записи в набор настраиваемых EventArgs, которые передаются событию и затем проверяются после срабатывания события - аналогично свойству Cancel события WinForms FormClosing.

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

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

28
ответ дан 27 November 2019 в 02:09
поделиться

Ближайший пример, который я могу придумать, - это событие FormClosing в WinForms. Он позволяет форме отменить событие, задав для свойства eventArgs.Cancel значение true. Чтобы сделать что-то подобное, вы должны определить свой собственный класс аргументов события с возвращаемым значением в качестве свойства этого класса. Затем передавайте объект args события всякий раз, когда вы вызываете событие. Тот, кто вызвал событие, может проверить объект args события на предмет возвращаемого значения. Другие, получающие событие, также могут проверить или изменить объект args события.

Обновление: Я только что наткнулся на событие AppDomain.AssemblyResolve , и оно похоже на событие, которое возвращает ценность. Кажется, вам просто нужно объявить тип делегата, который возвращает значение, а затем определить свое событие с этим типом делегата. Я не пробовал создать собственное мероприятие, подобное этому, хотя. Одним из преимуществ использования свойства в аргументе события является то, что все подписчики на событие могут видеть, что вернули предыдущие подписчики.

16
ответ дан 27 November 2019 в 02:09
поделиться
Другие вопросы по тегам:

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