Кибер-знахарь
В наш компьютерный век даже всякие знахари и целители мало-помалу пытаются приобщиться к цифровой технике. Ну а как же? Ведь компьютеров все больше, а значит и людей с компьютерными проблемами хватает. Вот и появляются "специалисты", которые лечат вычислительную технику заговорами и молитвами.
Не могу удержаться, чтоб не запостить этот скан страницы из книжки одного такого кибер-целителя.
А вдруг кому-нибудь поможет? :)
Microsoft намеренно занижала системные требования Vista
Ходатайство Microsoft о снятии статуса группового иска с дела о 'Vista Capable' отклонено. В ходе рассмотрения дела были обнародованы данные, изъятые из электронной переписки служащих компании. В своей апелляции компания приводит тот довод, что продолжение судебного процесса, возможно, приведет к очередному обнародованию данных электронной почты, а это в свою очередь, может подвергнуть риску репутацию компании Microsoft и разорвать отношения компании с ее бизнес-партнерами.
Напомним, что дело о рекламной компании "Vista Capable" выявило факт намеренного занижения системных требований, предъявляемые к компьютерам с логотипом "Vista Capable", для того, чтобы Intel смогла продавать системы на базе 915. В конце февраля 2008 года суд обнародовал 158 страниц из внутренних документов компании Microsoft. Среди прочих писем было обнаружено письмо служащего компании Microsoft Джона Калкмана (John Kalkman). «Мы занизили требования специально, чтобы помочь Intel повысить квартальные показатели прибыли. Таким образом, они могли бы продолжать продавать материнские платы с 915 чипсетом» - написал Джон Калкман.
Учитывая, как много интересного уже всплыло при изучении довольно откровенной внутренней переписки работников компании, в ходе продолжающегося судебного разбирательства можно ожидать новых интересных сведений.
Оптимизация PHP-кода
Блуждая по просторам сети, набрел на такой интересный документ:
40 Tips for optimizing your php code
- Если метод может быть статическим, сделайте его статическим.
- echo быстрее, чем print.
- Передавайте в echo несколько параметров, вместо использования конкатенацию строк.
- Устанавливайте максимальное количество повторений ваших циклов for до цикла, а не во время его выполнения.
- Удаляйте свои переменные для освобождения памяти, особенно если это большие массивы.
- Остерегайтесь волшебных методов, таких как __set, __get, __autoload.
- require_once дорого обходится.
- Указывайте полные пути в командах include/require, поиск файла будет идти быстрее.
- Если вам необходимо определить время, когда скрипт был запущен, лучше используйте $_SERVER[’REQUEST_TIME’] вместо time().
- Старайтесь применять strncasecmp, strpbrk и stripos вместо регулярных выражений.
- str_replace быстрее, чем preg_replace, но strtr быстрее, чем str_replace.
- Если функции замены строк, может принимать в качестве аргументов как массивы, так и одиночные символы, и если ваш список аргументов не слишком длинный, подумайте над тем, чтобы записать несколько одинаковых выражений замены, проходя один символ за раз, вместо одной строки кода, которая принимает массив поиска и замены
- Лучше использовать конструкции else if, чем несколько конструкций if.
- Подавление кодов ошибок при использовании @ работает очень медленно.
- Используйте модуль Apache mod_deflate.
- Прерывайте свои соединения с БД, когда закончите работать с ними.
- $row["id"] в семь раз быстрее, чем $row[id].
- Сообщения об ошибках дорого стоят
- Не используйте функции внутри условия цикла for, например как здесь: for ($x=0; $x < count($array); $x). Здесь функция count() будет вызываться при каждом проходе цикла.
- Инкремент локальной переменной в методе - самый быстрый. Почти также работает инкремент локальной переменной в функции.
- Инкремент глобальной переменной в 2 раза медленее, чем локальной.
- Инкремент свойства объекта (т.е. $this->prop++) в 3 раза медленнее, чем локальной переменной.
- Инкремент неопределённой переменной в 9-10 раз медленнее, чем заранее инициализированной.
- Объявление глобальной переменной, без использования её в функции, также замедляет работу (примерно на ту же величину, что и инкремент локальной переменной). Вероятно, PHP выполняет проверку на существование этой переменной.
- Скорость вызовов метода, не зависит от количества методов в классе. Я добавил 10 методов в тестовый класс (до и после тестового метода) и производительность не изменилась.
- Методы в производных классах работают быстрее, чем они же, определённые в базовом классе.
- Вызов функции с одним параметром и пустым телом функции в среднем равняется 7-8 инкрементам локальной переменной ($localvar++). Вызов похожего метода - примерно равен 15 инкрементам.
- Ваши строки, определённые при помощи апострофа, а не двойной кавычки, будут интерпретироваться чуть быстрее, т.к. PHP ищет переменные внутри текста в двойных кавычках. Конечно, вы можете использовать это только тогда, когда в вашей строке нет переменных.
- Строки, разделённые запятыми, выводятся быстрее, чем строки, разделённые точкой. Примечание: это работает только с функцией echo, которая может принимать несколько строк в качестве аргументов.
- PHP-скрипты будут обрабатываться, как минимум, в 2-10 раз медленнее, чем статические HTML-страницы. Попробуйте использовать больше статических HTML-страниц и меньше скриптов.
- Ваши PHP-скрипты компилируются каждый раз, если скрипты они не кэшируются. Кэширование обычно увеличивает производительность на 25-100% за счёт экономии времени на компиляцию.
- Кэшируйте, насколько это возможно. Используйте memcached — это высокопроизводительная система кэширования объектов в памяти, которая повышает скорость веб-приложений за счёт уменьшения времени загрузки БД. Кэшированный микрокод полезен тем, что позволяет вашему скрипту не перекомпилироваться заново для каждого запроса.
- При работе со строками, для определения длины строки, вы, разумеется, захотите использовать функцию strlen(). Эта функция работает очень быстро, ведь она не выполняет каких-либо вычислений, а лишь возвращает уже известную длину строки, доступную в zval-структуре (внутренняя структура C, используемая при работе с переменными в PHP). Однако потому, что strlen() — функция, она будет работать медленно за счёт вызова некоторых операций, таких как приведение строки в нижний регистр и поиска в хэш-таблице, только после которых будут выполнены основные действия функции. В некоторых случаях вы сможете ускорить свой код за счёт использования хитрости с isset().
Было: if (strlen($foo) < 5) { echo "Foo is too short"; }
Стало: if (!isset($foo{5})) { echo "Foo is too short"; }
Вызов isset() быстрее, чем strlen() потому, что isset() - не функция, а языковая конструкция. За счёт этого isset() не имеет практически никаких накладных расходов на определение длины строки.
- Инкремент или декремент переменной при помощи $i++ происходит немного медленнее, чем ++$i. Это особая специфика PHP, и не нужно таким образом модифицировать свой C и Java-код думая, что он будет работать быстрее, этого не произойдёт. ++$i будет быстрее в PHP потому, что вместо четырёх команд, как в случае с $i++, вам понадобится только три. Пост-инкремент обычно используется при создании временных переменных, которые затем увеличиваются. В то время, как пре-инкремент увеличивает значение оригинальной переменной. Это один из вариантов оптимизации PHP-кода в байт-код утилитой Zend Optimizer. Тем не менее, это хорошая идея, поскольку не все байткод-оптимизаторы оптимизируют это, также остаётся немало скриптов, работающих без оптимизации.
- Не всё должно быть написано с использованием ООП. Часто это излишне, поскольку методы и объекты занимают много памяти.
- Не определяйте каждую структуру данных в виде класса - массивы бывают намного полезнее.
- Не слишком разбивайте методы. Думайте, что вы действительно будете повторно использовать.
- Вы всегда можете разбить код на методы позже, если возникнет такая необходимость.
- Используйте сколько угодно предопределённых функций.
- Если в вашем коде есть функции, работающие очень долго, может стоит их переписать на C в виде расширения?
- Профилируйте свой код. Профилирование покажет вам, сколько времени выполняются части вашего кода.
- mod_gzip — модуль Apache, который позволяет сжимать ваши данные на лету и может существенно уменьшить объем передаваемых клиенту данных.
Автор: Reinhold Weber.