Еще одна галерея
http://devkick.com/lab/galleria/ - прикольная галерея на jquery. Буду сегодня тестить
Да уж, ожидал немного большего. Сама по себе данная галерея прикольная, но я столкнулся с трудностью интегрироват в нее слайдшоу. При чем с дозагрузкой картинок с сервера. Вообщем я пытался сделать из нее php+jquery галерею. Увы, или я балбес или не все так просто как мне казалось. В итоге я переписал эту галерею посвоему, все старые эффекты остались, но еще добавилось слайдшоу. Фотки для слайдов подгружаются с сервера.
А пока можете посмотреть на сайте tvoynet.com. Там моя галерея в связке с hightslides
Выложу скрипты как только оформлю нормально демку.
Оптимизация сценариев на php
Оптимизация
«Преждевременная оптимизация – корень всех зол».
Дональд Кнут «Искусство программирования»
данная статья взята из книги «Профессиональное программирование на PHP, авторы LArgerich, W.Choi, J.Coggeshall, и другие
Иногда, написав приложение веб-сайта на РНР, разработчики обнаруживают, что это приложение работает недостаточно быстро. Поэтому приходится оптимизировать код, чтобы сократить время выполнения сценариев. Несмотря нато что РНР, в целом, быстрый язык выполнения сценариев, существует ряд
технологий, рекомендаций и приемов, позволяющих оптимизировать код.
Выбор правильного языка
Первый вопрос, который возникает, когда производительность приложения оказывается неудовлетворительной, — это правильно ли выбран язык программирования. Возможно, медлительность обусловлена интерпретатором языка, и тогда нет смысла оптимизировать код – лучших результатов это не даст. Проводилось тестирование нескольких языков программирования, чтобысравнить их быстродействие с РНР. Измерения проводились по многим различным типам сценариев, включающих различные операции; результаты представляют собой усреднение величин, полученных во всех тестах.
Тестировались следующие языки:
• Сценарии CGI Perl
Обычный способ написания кода для веб-сайтов и приложений 1-2 года назад
Выбор правильного языка 913
• Сценарии FastCGI Perl
Механизм повышения производительности сценариев CGI
• Сценарии Python CGI
Использование Python для написания сценариев CGI
• Сценарии mod_python Python
Модуль Apache, позволяющий ему выполнять код Python, не обращаясь
к интерпретатору Python
• Сценарии С CGI
Компилированные сценарии С, выполняющиеся как программы CGI
• Сценарии mod_perl Perl
Модуль Apache, позволяющий выполнять сценарии Perl без вызова интерпретатора Perl
• PHP
Для сравнения те же сценарии программировались на РНР и выполнялись. После нескольких оценок производительности, включающих различные типы сценариев и загрузки серверов, был сделан вывод, что mod_perl, FastCGi и РНР дают самые быстрые результаты, мало различаясь между собой. Таким образом, если сайт или сценарий РНР работают медленно, то надо анализировать код, а не менять язык.
Оптимизация кода РНР
Говоря о задачах предварительной оптимизации (preoptimization), программисты рассуждают так: «Я заменю этот вектор хеш-таблицей и повышу скорость» или «Я заменю эту функцию ereg() несколькими функциями str_rep1асе(), это, повысит скорость». Они весьма заблуждаются. Во-первых, при такого рода оптимизации время выполнения сценария
обычно сокращается не более чем на 0,01 секунды, а потому польза невелика, зато легкость чтения кода может значительно пострадать. Во-вторых, предварительная оптимизация очень часто является непроизводительной тратой драгоценного времени программиста. Оптимизацией стоит заниматься, только убедившись в действительной ее необходимости. Профессиональным подходом к повышению производительности будет следующий:
• Профилировать код и найти узкие места
• Классифицировать узкие места
• Ликвидировать узкие места, оптимизировав код
Профилирование кода
Если скорость выполнения кода неудовлетворительна, то первым делом необходимо его профилировать и измерить время, которое сценарий тратит на выполнение различных задач и функций. На основе этой информации можно выяснить, на что сценарий расходует больше всего времени. Эти функции называются узкими местами (bottlenecks). Профилирование может преподнести сюрпризы. Например, может оказаться, что 99% времени сценарий тратит на запросы к базе данных, либо выявятся другие узкие места, такие как дисковый ввод/вывод при чтении больших файлов или журналов. Оптимизация не может быть эффективной без предварительного профилирования. Для того чтобы профилировать сценарий РНР, надо снабдить таймерами некоторые функции и задачи сценария и измерить продолжительность их выполнения.
Классификация узких мест
Профилирование осуществляется для поиска узких мест, а когда они обнаружены, их следует классифицировать по нескольким параметрам. Во-первых, надо оценить степень серьезности каждого узкого места. Во-вторых, следует оценить сложность оптимизации каждого из них. С учетом этих факторов принимается решение о том, какие функции, участки кода или методы сценария должны быть оптимизированы.
Техника оптимизации
Рассмотрим теперь различные способы оптимизации времени выполнения сценария в зависимости от происхождения узкого места:
• Оптимизация кода
Можно оптимизировать время выполнения интенсивных вычислений (плохо построенные циклы for() или while() или просто медленные команды).
• Буферизация и сжатие вывода
Этот прием полезен, если фактором замедления является сложность вывода в броузер, когда выводимо содержимое генерируется множеством функций.
• Оптимизация базы данных
Применяется, когда замедление обусловлено выполнением запросов к базе данных или интенсивным использованием соединений и функций баз данных.
• Кэширование
Применяется, когда замедление обусловлено временем генерации страницы, которое не может быть сокращено, либо запросы к базе данных невозможно оптимизировать. Другим основанием для кэширования может быть частое обращение к относительно статичным данным.
Продолжение следует…
Pagination class (нумерация страниц на php)
<?php class pagination { var $page = 1; // Current Page var $perPage = 10; // Items on each page, defaulted to 10 var $showFirstAndLast = true; // if you would like the first and last page options. function generate($array, $perPage = 10) { // Assign the items per page variable if (!empty($perPage)) $this->perPage = $perPage; // Assign the page variable if (!empty($_GET['page'])) { $this->page = $_GET['page']; // using the get method } else { $this->page = 1; // if we don't have a page number then assume we are on the first page } // Take the length of the array $this->length = count($array); // Get the number of pages $this->pages = ceil($this->length / $this->perPage); // Calculate the starting point $this->start = ceil(($this->page - 1) * $this->perPage); // Return the part of the array we have requested return array_slice($array, $this->start, $this->perPage); } function links() { // Initiate the links array $plinks = array(); $links = array(); $slinks = array(); // Concatenate the get variables to add to the page numbering string if (count($_GET)) { $queryURL = ''; foreach ($_GET as $key => $value) { if ($key != 'page') { $queryURL .= '&'.$key.'='.$value; } } } // If we have more then one pages if (($this->pages) > 1) { // Assign the 'previous page' link into the array if we are not on the first page if ($this->page != 1) { if ($this->showFirstAndLast) { $plinks[] = ' <a href="?page=1'.$queryURL.'">&laquo;&laquo; First </a> '; } $plinks[] = ' <a href="?page='.($this->page - 1).$queryURL.'">&laquo; Prev</a> '; } if(($this->page-5)<=0&&($this->pages + 1)>10) { $start=1; $end=11; } elseif(($this->page-5)<=0&&($this->pages + 1)<=10) { $start=1; $end=$this->pages + 1; } elseif(($this->page-5)>0&&($this->pages + 1)<=10) { $start=1; $end=$this->pages + 1; } elseif(($this->page-5)>0&&($this->pages + 1)>10) { if(($this->page+5)>=($this->pages)) { $start=$this->pages-10; $end=$this->pages+1; } else { $start=$this->page-4; $end=$this->page+6; } } // Assign all the page numbers & links to the array for ($j=$start; $j < $end; $j++) { if ($this->page == $j) { $links[] = ' <a class="selected">'.$j.'</a> '; // If we are on the same page as the current item } else { $links[] = ' <a href="?page='.$j.$queryURL.'">'.$j.'</a> '; // add the link to the array } } // Assign the 'next page' if we are not on the last page if ($this->page < $this->pages) { $slinks[] = ' <a href="?page='.($this->page + 1).$queryURL.'"> Next &raquo; </a> '; if ($this->showFirstAndLast) { $slinks[] = ' <a href="?page='.($this->pages).$queryURL.'"> Last &raquo;&raquo; </a> '; } } // Push the array into a string using any some glue return implode(' ', $plinks).implode($this->implodeBy, $links).implode(' ', $slinks); } return; } } ?> |
Проверка email на php
Скрипт проверки валидности email на php:
function valide_email($email){ if (strpos($email,"@")){ //проверяем есть ли знак @ $email_array=explode("@",$email); if (sizeof($email_array)!=2) return true; // проверяем сколько знаков @, если больше одного, то ошибка if (!empty($email_array[1])){ if (strpos($email_array[1],".")){ проверяем доменную часть $domain_array=explode (".", $email_array[1]); while (list($k, $v)= each ($domain_array)){ if (empty($v)) return true; } } else return true;//true если неправильный email } if (!empty($email_array[0])){ if (strpos($email_array[0],".")){ $address_array=explode (".", $email_array[0]); while (list($k, $v)= each ($address_array)){ if (empty($v)) return true; } } } else return true;//true если неправильный email } else return true; //true если неправильный email return false; // false усли email правильный } |
Данный скрипт проверяет только правильность формата email, но не проверяет доменное имя и сам адрес на корректность символов.
Позже допишу правила для проверки последних.