В последнее время я много думал об оптимизации. Я разрабатываю приложение, которое заставляет меня думать, где мне следует обрабатывать данные, учитывая балансировку нагрузки на сервер, память, клиент, загрузку, скорость, размер и т. Д.
Я хочу лучше понять, как опытные программисты оптимизируют свой код, думая об обработке. Возьмите следующие 3 варианта:
Какие парни вы бы предпочли, в каких случаях и почему? Извините за широкий вопрос, я также был бы благодарен, если бы кто-то мог порекомендовать мне хорошие источники для чтения по этому вопросу.
База данных — это сердце любого приложения, поэтому вы должны максимально облегчить загрузку базы данных. Вот некоторые предложения
Две мысли: компьютеры должны работать, люди должны думать. (Реклама IBM 1960-х гг.)
«Преждевременная оптимизация — корень всего зла (или, по крайней мере, большей части) в программировании». —Дональд Кнут
Если вы не планируете или станете Google, Amazon или Facebook, вам следует сосредоточиться на функциональности. «Заставь это работать, прежде чем сделать это быстро». если ты являются планируя расти до такого размера, делайте то, что они делали: бросайте оборудование в проблему. Это дешевле и с большей вероятностью будет эффективным.
Отредактировано, чтобы добавить: Поскольку вы управляете вычислительной мощностью на сервере, но, вероятно, не на клиенте, обычно лучше ставить интенсивные задачи на сервере, особенно если клиенты, вероятно, будут мобильными устройствами. Однако следует учитывать задержку в сети, требования к пропускной способности и время отклика. Если вы можете улучшить время отклика путем обработки на клиенте, подумайте об этом. Итак, оптимизируйте пользовательский интерфейс, а не циклы процессора; Вы можете купить больше циклов процессора, когда они вам нужны.
Наконец, помните, что клиенту нельзя доверять. По этой причине некоторые вещи должен быть на сервере.
Так что, как правило, обрабатывайте как можно больше данных в базе данных. Стоимость создания нового соединения с запросом очень высока, поэтому вы хотите максимально ограничить его. Даже если вам придется написать какой-то очень некрасивый SQL, выполните JOIN
почти всегда будет быстрее, чем выполнять 2 SELECT
заявления.
PHP действительно должен использоваться только для форматирования и кэширования данных. Если вы выполняете тонну операций с данными после каждого запроса, вы, вероятно, храните свои данные в формате, который не очень практичен. Вы хотите кэшировать все, что часто не изменяется в состоянии почти готовности к серверу, используя что-то вроде Redis или APCu.
Наконец, клиент никогда не должен выполнять операции с данными над несколькими объектами. Вы никогда не знаете о доступности клиентских ресурсов, поэтому всегда держите данные клиента в тонусе. Выполните разбиение на страницы и сортировку для любых наборов данных, размер которых превышает несколько десятков в фоновом режиме. AJAX-запрос с использованием AngularJS обычно выполняется так же быстро, как и сортировка более 100 элементов на iPad 2.
Если вы хотите получить дополнительную информацию по любому аспекту этого ответа, пожалуйста, спросите, и я сделаю все возможное, чтобы предоставить примеры или дополнительную информацию.