Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Оптимизация под FCGI


Автор: frenkys 20.3.2006, 23:26
Код

#!/usr/bin/perl -w

require 'cont3.pl';

print header(-charset=>'Windows-1251');

#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

$url = $ENV{'SCRIPT_NAME'};    

print "<html><head><meta http-equiv=REFRESH content=60; URL=$url></head>";

db_connect();

$sth = $dbh->prepare ("SELECT count(name) FROM fd_online");
$sth->execute() || quit();
   
    while (@data = $sth->fetchrow_array()) {
          $l=$data[0] || 0;
          print "<body><center><FONT face=Verdana, Arial, Helvetica, sans-serif size=1>online:$l</font></center>";
            
    }
    
@data=();
$dbh->disconnect;
print "</body></html>";



Покажите плиз на примере этого кода как рационально оптимизировать под FCGI

Автор: nitr 20.3.2006, 23:29
а где use smile

Автор: frenkys 20.3.2006, 23:40
cont3.pl
Код

use CGI qw(:standard);
use DBI;
use Compress::Zlib;
use Fcntl qw(:flock);
 
$|=1;


#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sub get_lock {
my $name=shift || 'default';
open($name, ">$name.sem") ;
flock($name,LOCK_EX) || "Cant block the file $name:$!";

sub relase_lock {
$name=shift || 'default';
close($name);
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sub quit
{
my $url = $ENV{'SCRIPT_NAME'};
my $erorr="$DBI::errstr <br>\n";

  get_lock('litlelog.txt');
   open(AD ,">>litlelog.txt") || die "open file error";
   
   print AD "$url\n";
   print AD @_,"\n" if @_;
   print AD "$erorr\n";
   
   close(AD);
   relase_lock('litlelog.txt');
 }
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sub db_connect
{
$dbh = DBI->connect("DBI:mysql:ddd:localhost","ddd","ddd") || die "ccc";
    return $dbh;
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
sub block_write  
{
my($word)=@_;
my $abnbanner;
$abnbanner=<<PAGE_HERE;  
<body background=../../img/color0.gif>
<table width=120 border=0 cellspacing=0 cellpadding=0 align=center>
<tr><td ><img src=../../img/error.gif width=120 height=10></td></tr>
<tr>
<td bgcolor=white height=50><div align=center>
<FONT face="Verdana, Arial, Helvetica, sans-serif" size=1>$word</font>
<a href=addevents.pl><FONT face=Verdana, Arial, Helvetica, sans-serif size=1 color=blue> эрчрф</font></a><br>
</div>
<br></td></tr><br></tr>
<tr><td ><img src=../img/niz.gif width=120 height=10></td></tr>
</table><br><br>
</body>
PAGE_HERE
return($abnbanner);
}
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@222
sub bwrite  
{
my($word)=@_;
my $abnbanner;
$abnbanner=header(-charset=>'Windows-1251');
$abnbanner.="<FONT face=Verdana, Arial, Helvetica, sans-serif size=1>$word</font>";
return($abnbanner);
}
#@@@@@@@@@@@@@@@@@@@@@22
sub bwrite2  
{my($word)=@_;

my $abnbanner;
print header(-charset=>'Windows-1251');

print "<link rel=\"stylesheet\" type=\"text/css\" href=\"../../css.css\">$word";
exit 0;
}


#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@22
sub gzip
{

if(($ENV{HTTP_ACCEPT_ENCODING} || '') =~ /gzip/){
        
        
                $a = Compress::Zlib::memGzip($a);
                print "Content-Encoding: gzip\n";}

print header(-charset=>'Windows-1251')
}

1;

Автор: nitr 21.3.2006, 00:15
Обзови по-другому smile процедура gzip в модуле Compress::Zlib уже есть

Автор: frenkys 21.3.2006, 00:28
это понятно но вопрос не в этом.


Есть ли какето основные приемы при написании FCGI ?


например
1) коннект и дисконнект к базе надо делать в цикле "while (FCGI::accept >= 0) {}" (далее просто цикл) или вне его как будет оптимальней?
2) процедурки писать в цикле или вне его?


И вообще все что до цикла оно каждый раз компилиться или висит тоже в памяти?

Автор: sharq 21.3.2006, 12:57
frenkys, попробуй, поэкспериментируй.

Функции выноси из цикла, а вызовы, должны быть в цикле.
Про коннект - посмотри есть метод connect_cached.

smile

Автор: nitr 21.3.2006, 13:04
Русская дока по FCGI есть smile ?

Автор: sharq 22.3.2006, 11:45
Есть англо-русский словарик! smile
И вообще на русском очень мало, переводов нет, поэтому я предложил вести в совместном проекте - раздел как документация!

smile

Автор: frenkys 25.3.2006, 00:53
А как параметры передавать?

Автор: frenkys 25.3.2006, 12:55
Вобщем результат таков : ЛЮДИ не ставьте себе FCGI он глючный просто мама дорогая а вот последнюю версию CGI::Fast можно с чистой совестью ставить - там исправлен прикол с параметрами тоесть они теперь работают как и в обчном цги.


Автор: sharq 25.3.2006, 20:57
frenkys, с таким стилем написанием скриптов, тяжело что-то оптимизировать, чтобы это работало быстро!
Прочитай perldoc perlstyle, полистай пару книг по perl, только не "самиздат", не используй require, если тебе нужно подключить функции, use strict - всегда, не смотри чужие бесплатные скрипты, они сбивают с толку и т. д.
И только потом подумай о fcgi.

smile

Автор: frenkys 25.3.2006, 22:21
В баране написано что лучше использовать require чем do

Автор: sharq 26.3.2006, 15:18
frenkys,
Цитата(frenkys @ 25.3.2006, 23:21 Найти цитируемый пост)
В баране написано что лучше использовать require чем do

для каких целей? разбирись почему?

используй модули или пакеты и подключай их через use.
а если тебе нужна какая-нибудь доп. инфа, например, конфигурационные данные, то тут уж использую require или do!

smile

Автор: frenkys 26.3.2006, 22:34
А где можно читнуть про это?

Автор: sharq 27.3.2006, 10:26
frenkys, самый простой и верный способ - это стандартная документация и никакие книги не нужны smile

smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)