|
|
|
| Широко известен следующий текст (он растиражирован в двух толстенных книжках...:-)
$browser = 'none';
if(strpos($useragent, "MSIE") !== false)
if(strpos($useragent, "Opera") == null) $browser = 'msie';
if(strpos($useragent, "Opera") !== false) $browser = 'opera';
if(strpos($useragent, "Netscape")!== false) $browser = 'netscape';
// Выясняем операционную систему
$os = 'none';
if(strpos($useragent, "Win") !== false) $os = 'windows';
if(strpos($useragent, "Linux") !== false
|| strpos($useragent, "Lynx") !== false
|| strpos($useragent, "Unix") !== false) $os = 'unix';
if(strpos($useragent, "Macintosh")!== false) $os = 'macintosh';
// Выясняем принадлежность к поисковым роботам
if(substr($useragent, 0, 12) == "StackRambler") $os = 'robot_rambler';
if(substr($useragent, 0, 9) == "Googlebot") $os = 'robot_google';
if(substr($useragent, 0, 6) == "Yandex") $os = 'robot_yandex';
if(substr($useragent, 0, 5) == "Aport") $os = 'robot_aport';
if(substr($useragent, 0, 6) == "msnbot") $os = 'robot_msnbot';
$search = 'none';
// Выясняем принадлежность к поисковым системам
if(strpos($reff,"yandex")) $search = 'yandex';
if(strpos($reff,"rambler")) $search = 'rambler';
if(strpos($reff,"google")) $search = 'google';
if(strpos($reff,"aport")) $search = 'aport';
if(strpos($reff,"mail") && strpos($reff,"search")) $search = 'mail';
if(strpos($reff,"msn") && strpos($reff,"results")) $search = 'msn';
if(strpos($reff,$_SERVER["SERVER_NAME"])) $search = 'own_site';
|
На первый взгляд - все замечательно. Более того, этот текст многократно проверен
сотнями (или тысячами) людей на работоспособность.
Но... За формальную логику (и здравый смысл) - обидно. Скажите, зачем заставлять
этот скрипт делать много ненужной и бесполезной работы ?
А ведь это влияет (хотя и несущественно) на скорость работы.
Ведь если операционная система - Windows, то она не может быть одновременно Unix'ом
Точно также как и Rambler не может быть одновременно Yandex'ом и т.д.
А если учесть, что по статистике подавляющее большинство броузеров - это IE,
а OS - это Windows, то понятно, что после выполнения первого поиска подстроки,
остальные поиски работают вхолостую.
Более разумным этот текст мог бы выглядеть, например, так:
$browser = 'none';
if(strpos($useragent, "MSIE") !== false $browser = 'msie';
else if(strpos($useragent, "Opera") !== false) $browser = 'opera';
else if(strpos($useragent, "Netscape")!== false) $browser = 'netscape';
// Выясняем операционную систему
$os = 'none';
if(strpos($useragent, "Win") !== false) $os = 'windows';
else if(strpos($useragent, "Linux") !== false
|| strpos($useragent, "Lynx") !== false
|| strpos($useragent, "Unix") !== false) $os = 'unix';
else if(strpos($useragent, "Macintosh")!== false) $os = 'macintosh';
// Выясняем принадлежность к поисковым роботам
if(substr($useragent, 0, 12) == "StackRambler") $os = 'robot_rambler';
else if(substr($useragent, 0, 9) == "Googlebot") $os = 'robot_google';
else if(substr($useragent, 0, 6) == "Yandex") $os = 'robot_yandex';
else if(substr($useragent, 0, 5) == "Aport") $os = 'robot_aport';
else if(substr($useragent, 0, 6) == "msnbot") $os = 'robot_msnbot';
else $search = 'none';
// Выясняем принадлежность к поисковым системам
if(strpos($reff,"yandex")) $search = 'yandex';
else if(strpos($reff,"rambler")) $search = 'rambler';
else if(strpos($reff,"google")) $search = 'google';
else if(strpos($reff,"aport")) $search = 'aport';
else if(strpos($reff,"mail") && strpos($reff,"search")) $search = 'mail';
else if(strpos($reff,"msn") && strpos($reff,"results")) $search = 'msn';
else if(strpos($reff,$_SERVER["SERVER_NAME"])) $search = 'own_site';
|
Этим примером мне хотелось сказать только об одном:
почувствуйте разницу между if - if и if - else if | |
|
|
|
|
|
|
|
для: human
(16.11.2005 в 13:54)
| | 1) Снижается читабельность
2) Работа всё равно будет выполняться точно такая же, так как в 95%, а в ряде случаев и 99%
<?php
$search = 'none';
$search = 'own_site';
?>
|
т.е. будут пропахиваться все условия - роботы и поисковики встречаются не так часто, как остальной народ, а отдельно взятый робот скажем StackRambler или отдельный поисковик, скажем yandex встречается ещё реже. Т.е. большую часть времени цепочки условий будут разворачиваться на полную катушку. | |
|
|
|
|
|
|
|
для: cheops
(16.11.2005 в 14:16)
| | Не буду спорить - авторам виднее. Кроме того, понятно, что написанное пером - топориком не вырубишь...:-)
Но тем не менее - с улучшением читабельности согласиться трудно (трудно, когда при чтении
спотыкаешься об алогизмы, вызывающие недоумение).
Со статистикой по операционкам и броузерам тоже не соглашаться довольно трудно (против фактов - не попрешь).
А что касается поисковиков и роботов, то у MICROSOFT, YANDEX, GOOGLE и нашего RTCOMMа активность очень высокая (реагируют на каждый чих)
и гораздо выше, чем у обычных посетителей.
Хотя, разумеется, это сильно зависит от конкретного сайта. | |
|
|
|
|