Проблема с отправкой сгенерированного яваскрипта

  • Автор темы Wingely Dog
  • Дата начала

Wingely Dog

Guest
Проблема с отправкой сгенерированного яваскрипта

Задача общем такая.

Есть некий движок с системой интернационализации.
Необходимо организовать интернационализацию подгружаемого яваскрипта. Причем нельзя писать сами скрипты в основной текст страницы, скрипты можно только подключать.

----------------------------------------------------
Для начала делаю так, есть некая страница которая содержит такую строчку

<script src='/js_loader.php?f=file_name'></script>

где file_name имя файла содержащего чистый яваскрипт

скрипт подгружающий броузеру указанный файл

PHP:
--- js_loader.php ---
 // бла бла, проверки

// отправляем неоходимые хидеры 
header (".... ");
header ("Content-type: text/js");

if ($f = @fopen( $_GET['f'], "rb") ){
    fpassthru( $f );
    fclose ( $f );
}
все работает замечательно, так как и ожидалось.

далее я пытаюсь задействовать систему интернационализации используемую в самом движке сайта. Вместо файла с чистым яваскриптом, я указываю php файл в котором этот яваскрипт генерится должным образом

<script src='/js_loader.php?f=file_name.php'></script>

соответственно переделываю файл загрузки

PHP:
--- js_loader.php ---
 // бла бла, проверки

// отправляем неоходимые хидеры 
header (".... ");
header ("Content-type: text/js");

include $_GET['f'];
и в файле генерации делаю следующую штуку

PHP:
--- file_name.php ---
echo i18n( "Hello world!" );
все работает, но один казус. Скрипт стал грузиться очень медленно. С локального сервера триста строчек скрипта забирает секунд пять.

где я промотался?
я правильно понимаю, что

fpassthru( $f ) == echo fread($f, filesize( $file_name ));

???

какие есть альтернативы этому решению ( с учетом, что яваскрипты всетаки нельзя писать в само тело страницы и при этом была бы задействована основная система интернационализации)

PS: Сорри за длинность объяснения. хотел поясней подвести под мысль
 

Wingely Dog

Guest
может попросту ты сам тормозишь? Шел бы почитал, что такое include для начала
 

korvin0

моська
Wingely Dog
я не понял, include как-то связан с fpassthru? или как понимать ваше высказывание? а вообще говоря, у меня на локалхосте твое чудо не тормозит, так что скажи-ка, милый друг, нам свою конфигурацию компа, сервера.
 

cray

Guest
Originally posted by Wingely Dog
может попросту ты сам тормозишь? Шел бы почитал, что такое include для начала
Зачем же так? Инклудом можно даже HTML инклудить...
 

Wingely Dog

Guest
объясняю.

есть fpassthru, который здорово выкидывает содержимое файла.

мне нужно не просто содержимое файла, а исправленное согласно ситуации содержимое файла.

вместо fpassthru по идее я мог бы написать echo fread( .... );

тоесть в случае с исправлением содержиого, например echo str_replace( "i18n_bla", "бла", fread(....));

но мне нужно больше гибкости и я выношу все преобразования в отдельный файл, который делает это самое эхо. А чтобы это самое эхо сработало, нада сделать инклуде.

тоесть я меняю
fpassthru( fopen( $file_name, "rb" ) );

на include $file_name
а в $file_name делаю небоходимые мне преобразования и вывожу готовую строчку в echo;

необходимая мне строка генериться за 0.00012 секунды (проверено отправкой оной на мыл) а вот серверу практически одно и то же отсылается с разной скоростью
в случае fpassthru мгновенно, а вслучае echo - несколько секунд.

-----------------------------------------------
ато научат щас, что можно инклудить инклудом...

-~{}~ 11.09.04 16:16:

2 korvin0

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

SiMM

Новичок
Wingely Dog, как то невяжется ваше
и в файле генерации делаю следующую штуку
--- file_name.php ---
echo i18n( "Hello world!" );
с
триста строчек скрипта
Если вы привели не всё содержимое file_name.php - то врядли кто сможет проявить неюджие телепатические способности и указать строчку, в которой вы ошиблись. И, кстати, что за функция i18n тоже никому не известно.
 

Wingely Dog

Guest
SiMM

все вяжется. в файле file_name.php все нормально

в нем находится длинная длинная строка яваскрипта, в котом в нескольких местах сделаны замены согласно текущему языку. и все. к премудростям php этот файл не отностится.

естественно я проверил как он работает, и вызовом напрямую с консоли и отправкой сгенерированной строчки на емайл. к тому же отправленный броузеру код всетаки работает без проблем, просто отгружается он долго
 

SiMM

Новичок
Автор оригинала: Wingely Dog
в нем находится длинная длинная строка яваскрипта, в котом в нескольких местах сделаны замены согласно текущему языку. и все. к премудростям php этот файл не отностится.
Ещё как относится. В отличии от fpassthru, подключаемый файл парсится. Поэтому его содержимое очень даже вполне имеет смысл - если в нём есть что-то вроде
PHP:
<?while();?>
при определённых условиях - то вполне очевидно, что тормоза будут.
естественно я проверил как он работает, и вызовом напрямую с консоли и отправкой сгенерированной строчки на емайл.
А эти замечания здесь совершенно неуместны - информативности в них никакой.
 

Wingely Dog

Guest
говорю еще раз, нет там никаких вайлов.

это был статичный файл яваскрипта, который выдавался броузеру через fpassthru();

я земенил fpassthru на echo в подключаемом файле.

там вот такое

PHP:
$str = "bla bla bal...... ".i18n("open")."bla bla bvla ".i18n("close")."asdfasdf";
// mail (..., $str );
echo $str;
насчет неумстности и информативности, это кому как. мне например весьма информативно знать, что код не содержит ошибок и генерируется быстро (говорю об это третий раз)
 

SiMM

Новичок
Автор оригинала: Wingely Dog
насчет неумстности и информативности, это кому как. мне например весьма информативно знать, что код не содержит ошибок и генерируется быстро (говорю об это третий раз)
Повторяй это заклинание сколько угодно раз - от этого твой код сам собой не исправиться. О себе лишь могу сказать - что словам "в коде всё нормально", не видя происходящего и самого кода, верить я не могу, тем более если сам автор утверждает, что что-то не так. Если ты относишь себя к разряду "я нашёл очередной глюк PHP" - то мне проще умыть руки - код не работает у тебя, а не у меня.
 

Wingely Dog

Guest
ребята вы чего такие умные? неужели мои сообщения похожи на товарища не отличающего count() от sizeOf() ?

Может ктонибудь скажет чтонить по существу вопроса, вместо того чтобы писать всякую чушь наманер "при определённых условиях - то вполне очевидно" ?

-~{}~ 11.09.04 16:51:

2 SiMM

это не обязательно глюк, может так и должно быть. Мне нужно мнение человека, который знает предмет и сталкивался с проблемой
 

SiMM

Новичок
По существу? Пожалуйста. У меня всё работает и никакой разницы нет. И это заклинание я могу повторять сколь угодно долго.
 

Wingely Dog

Guest
Слушай заклинатель, я верю в твои способности к повтору заклинаний (налицо обширная практика), но ты бы не флеймил а?
 

korvin0

моська
Krishna
пусть сначала сделает так, чтобы хотя б с этим include работало, а потом уже будем дальше разбираться.
з.ы. вообще такая схема интер...[что-то там] меня убивает. 3 файла вместо 1 задействуются!
 

Wingely Dog

Guest
Krishna
что страдаем фобиями к переменным передаваемым _GET-ом?
никада не задумывался, что можно сделать ченить типа
if ( !validateSameWhere( $_GET['f'] ) ) { $_GET['f'] = doSameThing(); }
перед тем как что-то делать, м ?

korvin0
а ты никада не пробовал подмать над такими штуками, как коэффициент повторного использования кода, способность системы к расширению или хотябы о том, что заказчик может сказать "хочу именна так", прежде чем рассказывать какое количество файлов тебя убивает а какое нет?

.оО( в среде php-разработчиков, пыонеры всегда страдают "умом" ) (С) я

----------------------------------------------------------------------------------------------
ну а теперь тем кто напорется на те же грабли

в старой реализации перед отправкой содежимого файла через passthru() отправлялся хидер с длинной файла
header( "Content-length: ".fileSize( $_GET['f'] ) );

после замены чистого яваскрипта скриптом php, размер генерируемой строки стал меньше длинны самого файла. следовательно броузер стал ждать конца передачи строки заявленой длинны. в следствии чего и наблюдались висюки
проблема решилась отправкой хидера о длинне в виде
header("Content-length: ".strlen( $js_str ) );
 
Сверху