Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбиение кода на много *.pm, Потери скорости будут? 
:(
    Опции темы
Ramirez
Дата 27.5.2005, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 4
Всего: 5



Собственно, вопрос о производительности / логичности разбиения большой программы на кучу модулей. Кроме логичности кода/удобства есть плюсы? Потери в скорости интерпретации будут (пока он там все файлы соберет подключит)?
PM ICQ   Вверх
korob2001
Дата 28.5.2005, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Конечно будут. Только для человека, зачастую, важнее удобство работы с программой чем её производтельность. Если юзать ООП, то будет работать ещё медленей.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Vaneska
Дата 28.5.2005, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 15.3.2005
Где: Москва

Репутация: 3
Всего: 4



То есть получается чем больше вызовов функций, подключения модулей, и других напрямую не связанных с алгоритмом программы действий, тем медленнее программа и более читаемый код.
Получается, если производительность действительно критична, надо делать без ООП и с минимумом функций и модулей - чистый алгоритм. Но с читаемостью этого добра действительно проблемы будут.
Судя по твоему сучаю (большая прога) наверно лучше будет всетаки разбить на модули, систематизировать код. Потом гораздо проще в нем разбираться и изменять/дополнять по прошествии времени.
--------------------
http://isokolov.blogspot.com/
PM MAIL ICQ   Вверх
korob2001
Дата 28.5.2005, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Лично я, по возможности, стараюсь пользоваться ООП. Почему???
Потому что, когда ты подключаешь класс и создаёшь объект этого класса, ты ничего не грузишь, все методы подгружаются по мере их нужды, т.е. вызовов. Да и код получается более элегантный, плюс не будет конфликта, если у тебя, в текущем пространстве имён текущего пакета, есть функции с такими же именами, как и в подключаемом модуле.

У модуля немного другая стратегия, он как правило всегда экспортирует свои функции в текущий пакет main. Производительность при использовании модуля выше, потому как он делает экспорт на стадии компиляции.
Потому когда подключаешь какой-нить модуль, всегда нужно стараться использовать его на полную катушку, да бы оправдать его самого.

Вот например:
часто встречаю код, где люди подключают, не маленький, модуль CGI.pm, при этом в подключении используют экспорт стандартных функций use CGI qw( :standard ), что ещё хуже вижу такое подключение use CGI qw( :all );, а пользуются только функией param() smile Что не есть гуд. Ну если тебе нужно юзать только param(), то и экспортируй её use CGI qw( :param );, а не все стандартные функции. В данном случае будет экспотированы не все стандартные функции, а только одна param(), соответственно и скорость повысится.

Это сообщение отредактировал(а) korob2001 - 28.5.2005, 09:00


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Ramirez
Дата 29.5.2005, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 4
Всего: 5



Спасибо за ответы. В частности, отдельная благодарность тов. korob2001 за его грамотные и содержательные ответы, и вообще за поддержку этого форума, всегда приятно сюда зайти. (давно хотел сказать, да как-то руки не доходили =)). Еще раз - респект.

Это сообщение отредактировал(а) Ramirez - 29.5.2005, 02:05
PM ICQ   Вверх
versus
Дата 29.5.2005, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 8.3.2005
Где: Переславль-Залесс кий

Репутация: нет
Всего: 3



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

Конечно! Real programmers code in binary!

Цитата
1010110 1100001 1101110 1100101 1110011 1101011 1100001


:-))
PM MAIL WWW   Вверх
Anarki
Дата 29.5.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 1
Всего: 11



korob2001
Так, а вот я использую use CGI qw( :param );
но у меня в коде есть вызовы `start_html()`, `end_html()`,`cookie` однако всё прекрасно работает - Perl делает "дозагрузку" этих частей?


--------------------
PM WWW   Вверх
korob2001
Дата 29.5.2005, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Цитата

korob2001
Так, а вот я использую use CGI qw( :param );
но у меня в коде есть вызовы `start_html()`, `end_html()`,`cookie` однако всё прекрасно работает - Perl делает "дозагрузку" этих частей?

Просто ты наверное юзаешь ООП и соответственно ты можешь обращаться к любому методу, через объект, т.е. скорее всего ты пишешь так:
Код

use CGI qw( :param );
my $cgi = new CGI;
print $cgi->start_html();

Это не правильно, потому как ты экспортировал функцию param() в текущий пакет и наверняка юзаешь её так:
Код

my $text = $cgi->param('txt');

Получаются накладные расходы. Вот что происходит:
1. Экспортируется функция param() в тещее пространство имён.
2. Ты создаёшь объект.
3. Вызываешь param() через объект.
Вопрос: зачем нужно было экспортировать param(), если ты всё равно пользуешься ООП подходом??? Т.е. шаг 1 абсолюно не нужен.

Вобщем, когда юзаешь ООП не нужно вообще ничего экспортировать в текущее пространство имён, ты же обращаешься к методам через объект. Другими словами достаточно написать:
Код

use CGI;
my $cgi = new CGI;
# Начиная отсюда, мы и меем доступ ко всем открытым методам модуля CGI.pm, через объект

или так:
Код

use CGI;
my $cgi = CGI->new();
# Начиная отсюда, мы и меем доступ ко всем открытым методам модуля CGI.pm, через объект



Попробуй запустить такой код:
Код

#!/usr/bin/perl -w
use strict;
use CGI qw( :param );

print header( -charset => 'Windows-1251' );
print start_html();
   print h1("Ощибка");
print end_html();

И получишь такую ошибку: Undefined subroutine &main::header called at Untitled line 5.

А теперь давай исправим ошибки, т.е. экспортируем все нужные функции:
Код

#!/usr/bin/perl -w
use strict;
use CGI qw( :header :start_html :h1 :end_html );

print header( -charset => 'Windows-1251' );
print start_html();
   print h1("Теперь всё в порядке");
print end_html();

Вот теперь код будет работать на ура. Если хочешь, попробуй удали из списка экспортируемых функций, хотя бы одну из них, например: :end_html
И получишь опять сообщение об ошибке.

Удачи.

Это сообщение отредактировал(а) korob2001 - 29.5.2005, 15:31


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Anarki
Дата 8.6.2005, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 1
Всего: 11



Ок, спасибо за разъяснения.
Я использовал метод объекта
Код

$q = new CGI;
$q->param("lala");



--------------------
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2264 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.