Здесь есть (по крайней мере) две категории «эффективности», о которых следует упомянуть:
приложений пользовательского интерфейса (и их зависимостей), где наиболее важной мерой является время отклика для пользователя .
Пакетная обработка, где основным показателем является общее время работы .
В первом случае существуют хорошо документированные правила относительно времени ответа . Если вы заботитесь о качестве продукта, вам необходимо сократить время ответа. Чем короче, тем лучше, но переломные моменты примерно такие:
100 мс для «немедленного» ответа; анимация и другие действия в режиме реального времени должны происходить, по крайней мере, так быстро;
1 секунда для «непрерывного» ответа. Больше, чем это, и пользователи будут разочарованы; вам также нужно подумать о том, чтобы показать экран прогресса после этой точки.
10 секунд для сохранения фокуса пользователя. Хуже, чем этот, и ваши пользователи будут разозлены .
Если вы обнаружите, что некоторые операции занимают более 10 секунд, и вы можете исправить проблемы с производительностью с помощью вменяемого усилия (я не думаю, что есть жесткое ограничение, но лично я Я бы точно сказал что-нибудь до 1 человеко-месяца и, возможно, что-нибудь до 3-4 месяцев), тогда вы должны определенно приложить усилия для его исправления.
Точно так же, если вы обнаружите, что проползаете мимо этого 1-секундного порога, вы должны очень стараться сделать его быстрее. Как минимум, сравните время, которое потребуется для повышения производительности вашего приложения, со временем, которое потребуется для повторения каждого медленного экрана с диалоговыми окнами прогресса и фоновыми потоками, которые пользователь может отменить - потому что это равно вашему ответственность как дизайнера за обеспечение того, что приложение работает слишком медленно.
Но не принимайте решение исключительно на этой основе - опыт пользователя также имеет значение. Если вам потребуется 1 неделя, чтобы придерживаться некоторых диалогов асинхронного прогресса, и 3 недели, чтобы получить время выполнения менее 1 секунды, я все равно остановлюсь на последнем. ИМО, все, что меньше человеко-месяца, оправданно, если проблема касается всего приложения если это всего лишь один отчет, который запускается относительно редко, я бы, наверное, его отпустил.
Если ваше приложение работает в режиме реального времени - например, в графике - тогда я бы классифицировал его так же, как 10-секундную отметку для приложений не в реальном времени. То есть вам нужно сделать все возможное, чтобы ускорить его. Мерцание недопустимо в игре или в графическом редакторе. Заикания и глюки недопустимы при обработке звука. Даже для чего-то такого базового, как ввод текста, задержка в 500 мс между нажатием клавиши и появлением символа совершенно неприемлема, если вы не подключены через удаленный рабочий стол или что-то еще. Для решения подобных проблем не требуется слишком много усилий.
Теперь о втором случае, который, я думаю, в основном очевиден. Если вы выполняете пакетную обработку, то у вас обычно есть проблема масштабируемость . Пока партия может работать в отведенное время, вам не нужно ее улучшать. Но если ваши данные растут, если пакет должен работать в одночасье, и вы начинаете видеть, как он ползет в первые часы утра и прерывает работу людей в 9:15, тогда, очевидно, вам нужно работать над производительностью.
На самом деле, вы действительно не можете ждать так долго; как только он не завершится в нужное время, у вас могут возникнуть большие проблемы. Вы должны активно отслеживать ситуацию и поддерживать некоторый запас прочности - скажем, максимальное время работы 5 часов из доступных 6, прежде чем вы начнете беспокоиться.
Таким образом, ответ для пакетных процессов очевиден. У вас есть хард требование, чтобы баст должен закончиться в течение определенного времени. Поэтому, если вы приближаетесь к краю, производительность должна быть улучшена, независимо от того, насколько это трудно / дорого. Тогда возникает вопрос , что является наиболее экономичным средством улучшения процесса?
Если стоит просто добавить больше оборудования для решения проблемы (и вы точно знаете, что проблема действительно масштабируется вместе с оборудованием), не тратьте время на оптимизацию, просто купите новое оборудование. В противном случае, выясните, какая комбинация оптимизации дизайна и модернизации оборудования обеспечит вам наилучшую рентабельность инвестиций. На данный момент это почти чисто решение о стоимости.
Это все, что я должен сказать по этому вопросу. Позор людям, которые отвечают на это "ЯГНИ". Это ваша профессиональная ответственность, чтобы знать или хотя бы выяснить , действительно ли вам это "нужно". Предположение, что что-либо приемлемо до тех пор, пока клиенты не пожалуются, является отречением от этой ответственности.
То, что ваши клиенты не требуют, не означает, что вам не нужно это учитывать. Ваши клиенты не требуют модульных тестов или даже достаточно хорошего / поддерживаемого кода, но вы все равно предоставляете эти вещи, потому что это часть вашей профессии. И, в конце концов, ваши клиенты будут намного счастливее с гладким и быстрым продуктом, чем с любыми другими вещами, ориентированными на разработчиков.