Toor
Ну видимо твоя кодерша "Настоящий программист"! Ибо:
1) Отступы - выделяете ли вы структуру программы?
Зачем? Каждый отступ, это 1 символ (Tab), или, 4 пробела, на которые некоторые редакторы заменяют знак табуляции! Это увеличивает размер файла, замедляя его загрузку в память!
2) Комментарии к собственному коду?
Конечно, PHP парсер вырезает коментарии, но он же не выполняет предкомпиляцию, как Java, а значит он выполняет это снова и снова при каждой загрузки файла, что явно сказывается на производительности кода!
3) SQL - select * from table where... или SELECT * FROM table WHERE... ?
Вообщето, в классике, ведущей свои корни из голого C, ничего кроме констант не должно быть в коде заглавными буквами. Если взять любой старый файлец на C, даже от тогоже Oracle, то там было все именно в виде "select * from ..."
4) Выносите код в include или всё подряд в одном файле?
На include и любые другие похожие операции тратитятся драгоценные милисекунды выполнения кода. Для повышения производительности лучше избегать их использования.
5) Объектно-ориентированное или структурное?
ООП - это просто модная игрушка, жрущая ресурсы в непомерных обьемах. Каждый обьект без свойств съедает несколько драгоценных байт памяти. А память - это ваши деньги! Настоящий программист всегда экономит память - экономит ваши деньги!
6) MVC это просто модно или действительно удобно?
Тесты оптимизаторов показали, что код, находящийся в одном большом файле выполняется PHP в несколько раз быстрее, чем в нескольких маленьких. Особенно, если используются акселераторы типа APC. По этому разбивать файлы еще и на Модель-Вью-Контроллер является не целесообразным. Кроме того, базовое правило программирования - "Бритва оккама" гласит - "Не надо плодить сущности без необходимости".
Кстати, имена переменных больше 4 символов, требуют больше памяти на каждые следующие 4 символа. Так что лучше написат $i =, чем $productLoopIndexBasicIterator =
Так что могу смело заключить, что твоя кодерша - ну настоящий программист! Остается лишь удивляться ее непризнанному гению, позволяющему ей разбираться в настолько оптимизированном коде. Кстасти, такой стиль кодинга называется "Индусские письмена" - это все равно, что Почерк Леонардо! ;)
arachnO
сделаю проще
просто кусок кода приведу мной самим написанного
а вы уж решайте
Код:
#!/usr/bin/perl
use WWW::Mechanize;
use threads;
use threads::shared;
use Mysql;
$_host = "localhost";
$_db = "xxxxx";
$_ua = "xxxxx";
$_pw = "xxxxx";
my $myconn;
$myconn = Mysql->connect ($_host, $_db, $_ua, $_pw) or die ('Cannot connect');
$myconn->selectdb ($_db) or die ('cannot select db');
$select_sql = "SELECT url FROM urlb ORDER BY RAND() LIMIT 5";
$select_ex = $myconn->query ($select_sql);
my @page_urls;
while (@result = $select_ex->fetchrow())
{
push (@page_urls, $result [0]);
}
undef $myconn;
my %total_images:shared;
my %total_urls;
my $mech = WWW::Mechanize->new();
foreach $page_url (@page_urls)
{
$mech->get ($page_url);
@page_links = $mech->find_all_links ();
my $thread_cnt = 0;
foreach $page_link (@page_links)
{
next if $page_link->url_abs =~ /\.ico$/i;
next if $page_link->url_abs =~ /\.gif$/i;
next if $page_link->url_abs =~ /\.jpg$/i;
next if $page_link->url_abs =~ /\.png$/i;
next if $page_link->url_abs =~ /javascript/i;
next if $page_link->url_abs =~ /mailto\:/i;
next if exists ($total_urls {$page_link->url_abs});
$total_urls {$page_link->url_abs} = 1;
$thread = threads->new (\&image_parser, $page_link->url_abs, $thread_cnt);
$thread_cnt++;
}
$_->join for threads->list;
}
$myconn = Mysql->connect ($_host, $_db, $_ua, $_pw) or die ('Cannot connect');
$myconn->selectdb ($_db) or die ('cannot select db');
foreach $page_url (keys %total_urls)
{
$check_sql = "SELECT * FROM urlb WHERE url = " . $myconn->quote ($page_url);
$execute = $myconn->query ($check_sql);
$rownumber = $execute->numrows();
if ($rownumber == 0)
{
$insert_sql = "INSERT INTO urlb (url, lastaccess, lastcode, codecount, disabled) VALUES (" . $myconn->quote ($page_url) . ", NOW(), 200, 0, false)";
$myconn->query ($insert_sql);
}
}
foreach $image_url (keys %total_images)
{
($image_alt, $image_source_url) = split (/\#\$\#/, $total_images{$image_url});
$check_sql = "SELECT * FROM imageb WHERE imageurl = " . $myconn->quote ($image_url);
$execute = $myconn->query ($check_sql);
$rownumber = $execute->numrows();
if ($rownumber == 0)
{
$insert_sql = "INSERT INTO imageb (imageurl, imagedesc, imagehit, imagelh, sourceurl) VALUES (" . $myconn->quote ($image_url) . ", " . $myconn->quote ($image_alt) . ", 0, 0, " . $myconn->quote ($image_source_url) . ")";
$myconn->query ($insert_sql);
}
}
sub image_parser
{
my $page_url = @_[0];
my $thread_number = @_[1];
my $mech = WWW::Mechanize->new();
$mech->get ($page_url);
if ($mech->content_type ne "text/html")
{
return (0);
}
my @page_images = $mech->find_all_images ();
foreach $page_image (@page_images)
{
if (
$page_image->alt ne "" && $page_image->alt !~ /^http/ && $page_image->alt !~ /cannot be displayed/ && !exists($total_images{$page_image->url_abs}) && \
$page_image->width > 200
)
{
$total_images{$page_image->url_abs} = $page_image->alt . "\#\$\#" . $page_url;
}
}
}