Bad_Bos 0 Опубликовано: 10 ноября 2010 Рассказать Опубликовано: 10 ноября 2010 Здравствуйте, я сам не программист но мой знакомый утверждает что код который определяет смартфон у вас в движке грузит сервер больше чем код который сделал мой друг. вот собственно оба варианта: DLE 7.5 function check_smartphone() { $phone_array = array('iphone', 'pocket', 'palm', 'windows ce', 'windowsce', 'cellphone', 'opera mobi', 'ipod', 'small', 'sharp', 'sonyericsson', 'symbian', 'opera mini', 'nokia', 'htc_', 'samsung', 'motorola', 'smartphone', 'blackberry', 'playstation portable', 'tablet browser'); $agent = strtolower( $_SERVER['HTTP_USER_AGENT'] ); foreach ($phone_array as $value) { if ( strpos($agent, $value) !== false ) return true; } return false; } и вариант друга: function check_smartphone() { if(preg_match("/iphone|android|windows ce|symbian|midp|palm|mobile|skyfire|psp/i", $_SERVER['HTTP_USER_AGENT'])) return true; return false; } Какой вариант лучше? Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 081 Опубликовано: 10 ноября 2010 Рассказать Опубликовано: 10 ноября 2010 Ваш друг заблуждается, самому стало интересно и запустил проверочный тест. Первый вариант выполняется 4.6022134399414E-5 секунды, второй вариант выполняется 0.00010204315185547 секунды. Для тех кто не в курсе еще и математики 4.6022134399414E-5 это намного меньше чем 0.00010204315185547 потому что E-5 это минус пятая степень. Говоря проще простым русским языком, вариант используемый в DLE примерно в четыре раза быстрее чем вариант вашего друга. И это при том что в коде вашего друга, намного меньше базы смартфонов для проверки чем в коде DLE. Вот так вот бывает, короткий код, не значит быстрый код. Если честно сам в шоке, я конечно знал что preg_match достаточно медленная функция, но чтобы настольно, неожидал. Цитата Ссылка на сообщение Поделиться на других сайтах
zgr 72 Опубликовано: 10 ноября 2010 Рассказать Опубликовано: 10 ноября 2010 (изменено) М... интересная тема. Времени на проверки нет сейчас, но вот вдруг вспомнил, что один тип как-то на блоге доказывал, что сотню тысяч элементов в массиве отсортировать по времени столько же занимает, сколько и обычные переменные. Не помню ссыль, чтоб скинуть и самому еще почитать. Ну а что, если проверить наличие в массиве, например, типа in_array() - может, быстрее будет, чем циклом бегать, задавая переменные, нет ? П.С. Думается, не в 4 раза, а в 2: 10.2/4.6 = 2.2 Изменено 11 ноября 2010 пользователем zgr Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 081 Опубликовано: 11 ноября 2010 Рассказать Опубликовано: 11 ноября 2010 у а что, если проверить наличие в массиве, например, типа in_array() - может, быстрее будет, чем циклом бегать, задавая переменные, нет ? не получиться, т.к. проверяется не полное совпадение, а частичное вхождение в строке. Да и честно говоря заниматься оптимизацией в этой функции при таких сверхмалых величинах, глупо, функция же не тысячу раз выполняется, а всего один раз за все время работы скрипта. Я проверил лишь по причине, что самому стало просто интересно, а что быстрее, я кстати при этом подумал что второй вариант будет быстрее, а оказалось вон оно как, strpos и strtolower даже в цикле оказались намного быстраее одного preg_match, вообще preg_match нужно использовать для проверки только в том случае если искать нужно по регулярному выражению, тогда альтернативы в быстроте этой функции нет. А в данном вопросе нет регулярных выражений. Цитата Ссылка на сообщение Поделиться на других сайтах
Bad_Bos 0 Опубликовано: 15 ноября 2010 Рассказать Опубликовано: 15 ноября 2010 (изменено) Автор И это при том что в коде вашего друга, намного меньше базы смартфонов для проверки чем в коде DLE. ну а то что базы мало это уж я взял то что базирует практически всё например midp заменяет opera mini и opera mobi, ipod - есть вхождение mobile, вот вхождения smartphone - ни разу не видел а если и видел то там есть либо symbian либо windows ce, вот что у него нету это skyfire - это вообще через мак ос работает не знаю почему... PS. не думал что вас заинтересует данная тема Изменено 15 ноября 2010 пользователем Bad_Bos Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.