Information
- Rating
- 595-th
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Date of birth
- Registered
- Activity
Specialization
Генеральный директор
Ведущий
From 3,000,000 ₽
Управление проектами
Ведение переговоров
Разработка ТЗ
Agile
Управление разработкой
Оптимизация бизнес-процессов
Организация бизнес-процессов
Построение команды
Стратегическое планирование
Развитие бизнеса
ob_start();
$result = ob_get_contents();
Проблема в том, что функции перехвата потока вывода сильно медленно работают!
посмотрел ваш фраймворк и наскидку вижу что логика очень прозрачная — это плюс, но много сущностей плодите — это минус, простите если ошибся.
если воспроизвести такой код:
<?
error_reporting(E_ALL);
echo $a;
$a=null;
echo $a;
?>
то получим только один Notice, тоесть я ошибся выше и скрипт не будет вам кидать нотис на строке $this- > undefined; кидать такой нотис нужно самому используя trigger_error, определяя место вызова из debug_backtrace();
Знаете, кстати, если б вы инклюдили шаблон внутри метода, предварительно сделав:
что-то вроде:
foreach $this->allVars as $k=>$v
$$k=$v;
как я писал выше. то получили бы и нотис автоматически на строке <?php echo $title ?>
если переменная не зарегистрирована.
нужно не проверять запрещенные вещи, а пропускать разрешенные!
— да (последний оконченный, ну с которого я ушел рекламно ресселерская сеть, с нагрузкой 600хитов(просмотров) в секунду, должность тимлидер, 7 человек команда).
Если да, то менялись ли у вас разработчики (хотябы 1, 2 в год).
— да (менялось 4 человека, 3 ушло 4 пришло за год)
Если да, то использовали ли вы там альтернативные самописные решения.
— Да, уровень абстракции доступа к БД, RPC модули
Если да, то не возникало ли ни у кого никаких проблем с этим?
— Да возникли, но мы работал и в системе экстремальное программирования, в частности программирование в парах и человек который не смог разобраться оказался не коммуникабельным и ушел из проекта, остальные 3 остались.
в итоге с проекта ушли фактически все, кто занимался им в начале (остался один!, остальные с новой командой). Проект успешен, работает и расширяется.
я считаю что боязнь перед использованием собственных разработок в коллективе прежде всего из за плохой коммуникации. Улучшайте среду общения и будет лучше! что стоят 10000 строк вашей документации если у новичка есть конкретная проблема? а что если эта проблема ранее не обсуждалась? ждать нового релиза, рыться в кодах готового продукта (который часто выглядит черным ящиком)?
в целом я ЗА использование готовых решений, но иногда это не оправдано.
В частности не оправдан страх научить других людей пользоваться вашим решением, если решение работает, и нормальный код, то даже документация большинству не понадобится
Колоночная верстка, выводится 2 или 3 колонки каких-то параметров в зависимости от их количества. Провести базовые арифметические процедуры в смарти очень не удобно! а на нативном коде делаются очень просто. Эта проблема решена в квики (Quiky)
технология php проверена и обкатана, а изучить синтаксис PHP на уровне вывода переменных не труднее чем выучить синтаксис Smarty
assign($varName,$value, $isProtect=true){
if ($isProtect)
$value = escape($value);
}
Вообще в этих вопросах скорости работает такое правило: смарти (несмотря на всю свою кривизну, громоздкость) популярен потому что на вывод шаблона тратится 2-10% времени редко больше.
из своей практики могу сказать результаты тестирования:
Простые шаблоны
генерация шаблонов:
Q AVG: 0.16 сек
S AVG: 0.18 сек
P AVG: — сек
вывод шаблонов:
Q AVG: 0.0064 сек
S AVG: 0.0065 сек
P AVG: 0.0022 сек
Сложные шаблоны
генерация шаблонов:
Q AVG: 0.19 сек
S AVG: 0.54 сек
P AVG: — сек
вывод шаблонов:
Q AVG: 0.0072 сек
S AVG: 0.0231 сек
P AVG: 0.0038 сек
AVG — среднее время на замере (1000 замеров)
Тестировалось на рабочем сервере FReeBSD Core2Duo 2.0 Ghz, думаю остальные параметры не так важны, да и не помню я их уже.
генерация шаблонов — имеется ввиду компилирование.
S- smarty
Q- Quiky
P — PHP
Нужное выделил
а не привести к коротким тегам, это уж дело вкуса.
второе:
как правило когда нужно выводить «чистые» данные вы знаете это в моделе (практика подтверждает)
и в конце концов вы всегда можете использовать оба механизма.
в большенстве случаев этого хватает, но на всякий случай замечу, что переменная может быть определена и иметь false, потому полезно генерировать стандартное уведомление.
а вообще функции для работы с буферами часто пишут так что они возвращают null:
fucntion __get($k){ if (isset($this->vars[$k])) return $this->vars[$k]; return null; }первое # <?php echo $this->title ?>
такой вызов слишком долг, и не естественнен, если вы будите выводить шаблон в метоlе, то сможете в этом же методе сделать что-то вроде:
foreach $this->allVars as $k=>$v
$$k=$v;
ну фильтры для протекции навернете сами.
тогда запись будет более естественой:
<?=$title ?>
второе: я считаю что экранирование передаваемых в шаблонизатор параметров должно определяться на момент передачи параметра и по умолчанию все экранировать:
$templater->assign($varName,$value, $isProtect=true)
Это что касается критики, а в остальном статья толковая, очень правильно подмечены причины почему нужен шаблонизатор, а не «чистый» нативный подход. Для начинающих однозначно полезный материал!
Квантовое запутывание можно представить себе так:
возмем Атом Дейтерия (радиоактивного водорода), поместим его в рентгеновское излучение (увеличив вероятность распада), ждем когда распадется.
разлетелось 2 частицы: нейтрон и атом водорода (1 нейтрона+1 электрон)
мы можем замерить импульс (что даст нам скорость) нейтрона достаточно точно и можем рассчитать импульс водорода! Теперь берем и замеряем координаты водорода (или одновременно с этим). Таким образом мы как бы нарушаем принцип неопределенности: мы смогли отдельно замерить и координаты и импульс частицы водорода. Но на практике измерив импульс нейтрона мы вносим погрешность и в измерение координат водорода! Это и есть эффект связывания. Видно, что он ведет к уничтожению информации, но не к ее передачи, таким образом постулаты теории относительности не нарушаются, а со сверх световой скоростью распространяется не информация, а ее уничтожение.