Upload
belarus-state-university
View
4.717
Download
3
Embed Size (px)
Citation preview
Этот доклад был прочитан на конференции Байнет 2.2 Beta. Минск, 11-12 сентября 2008.официальный сайт: www.bynet2.org
Обычная разработкаCms 1Cms 2 Super CMS Лучшая в мире CMS, потому, что я
написал ее сам!
Зачем что-то еще?
Потребность в фреймворкахРазработка нестандартных проектов. Желание иметь под рукой хороший
инструмент, который будет: - развиваться - иметь хорошую документацию
- иметь качественный код - обеспечивать достаточную гибкость - содержать компоненты на все случаи
жизни - бесплатным
Преимущества фреймворковОдин зверь, вместо зоопаркаУскорение сроков разработкиМеньше внимания на мелочи, больше на
бизнес логикуБольший контроль над процессом и
качеством разработкиХорошая документированностьБыстрый ввод новичков на проект
Цитируемость фреймворковв поисковиках
Поисковик CakePhp Symfony CodeIgniter Zend Framework
Google (world)
3,680,000 1,440,000 544,000 3,280,000
Google EN 3,250,000 497,000 361,000 2,040,000
Google.ru 28100 20020 28,500 36,900
Yandex 90, 000 68, 000 87, 000 333, 000
CakePHP::ВозможностиСовместим с PHP4 и PHP5MVCСвоя файловая структураСвоя абстракция данных (либо Adodb,
PEAR::Db)Поддержка плагиновВалидацияScaffoldingМаршрутизация запросовКомпоненты / Хелперы / i18n
CakePHP::СоглашенияКласс KissesAndHugsController должен храниться
в файле kisses_and_hugs_controller.php
Название модели записывается в ед. числе: Book, MyBook, и т.п.
Названия таблиц должны быть в множественном числе, и через подчеркивание: my_year_books
Названия множественном числе. BooksController, OxenController.
CakePHP::Контроллерыindex – метод по умолчанию (
site.com/books/ )
Методы контроллера beforeFilter – до логикиbeforeRender – до view afterFilter – после логики и после view
CakePHP::МоделиДоступные методы в каждой модели:beforeFind()afterFind()beforeValidate()beforeSave()afterSave()beforeDelete()afterDelete()
CakePHP::ПроектыFileshifter.com Server: Pentium 3, 733mhz, 512MB RAM,
2TB SATA RAID.OS: Fedora Linux, ext3 filesystem.Объем данных на сервере: 1.37 TB.Ежедневный траффик: 28 GB в среднем.Время отклика: 0.3-0.5 сек
CodeIgniterТекущая версия 1.6.3 ГибкостьПлагины / ХелперыСкаффолдингПростота (loose coupling)MVCПоддержка PHP4Настройка параметров автозагрузки
CodeIgniter::моделиКлассы моделей хранятся в папке
application/models/ Класс: Model_name Имя файла: application/models/user_model.php
Загрузка: $this->load->model('Model_name');
$this->Model_name->function();
CodeIgniter::Контроллерыapplication/config/routes.php – маршруты$route['default_controller'] = ‘XXX_controller';
class My_class extends Controller { ….
}
_remap ()
Symfony::использует Creole – абстракция с БД Propel ( PDO с 1.2) Prado для i18n Spyc YAML парсинг Pake для командной строки(symfony 1.0)
Prototype, Script.aculo.us, Dynarch.com, TinyMCE
Symfony::возможности
I18n, l10n, cache, валидация и т.п. ScaffoldingГенерация кода AdminGeneratorНезависимые блоки (Loose coupling)МаршрутизацияХелперыDebug
Symfony::особенностиВсе классы начинаются с ‘sf’ (стандартные)
class ##MODULE_NAME##Actions extends sfActions
Много различного рода конфигурационных
файлов.
Symfony::Известные проектыbookmarks.yahoo.com (20 млн
пользователей)www.splitgames.fr (сайт обмена играми)www.kuss.de (сайт знакомств)www.winkel.ro (доска объявлений)
Zend Framework (ZF)Acl (роли и ресурсы)Auth (openId, Microsoft InfoCard)Cache / Loader Config / Console_Getopt (cli) Date ( i18n, l10N) / Db Filter, Validate (34) / Gdata (Zend Google Data Client)Http_Client / Json / Locale, Log, Mail, Mime, RegistryRest_Client / Rest_ServerService: Akismet, Amazon, Delicious, Flickr, Nirvanix,
Simpy, StrikeIron и Yahoo! / XmlRpc
Новое в ZF 1.6 RC1Интеграция с DojoПоддержка с SOAPUnit-тесты для контроллеровПоддержка индексных файлов Lucene 2.3Zend_Session – обработчик сохраненияPaginatorZend_Config_Xml – поддержка атрибутовМедиа хелперы (QuickTime, Flash)
ZF в цифрах Более 7 миллионов загрузок Более 500 разработчиков Более 1000 страниц в справочнике Более 500 примеров Более 60 проектов на SourceForge Более 30 проектов на Google Code Около 70 различных компонентов.
ZF::соглашенияClass My_Class_Name должен находится в
файле:
My/Class/Name.php
Cтиль кода во многом совпадает со стилями PEAR
Zend_Controller_Front Zend_Controller_Roulter_Rewrite (выбирает action для запуска)Zend_Controller_Dispatcher_Standard (вызыает action)
Zend_Controller_Action (конкретный)Using Zend_Action_Helper
Zend_Controller_Request
Zend_View (использует Zend_View_Helper)
Zend_Db_Table (Model )Т.е. тут может быть Custom Model
Zend_Controller_Response_Http
ZF::МоделиZend_Db_TablePDO
$db = Zend_Db::factory($cfgDb->type, $params);
Zend_Db_Table::setDefaultAapter($db);Zend_Registry::set("DB", $db);
ZF::КонтроллерыZend_Controller_Action ErrorHandler plugin ViewRenderer action helper plugin
preDispatchpostDispatchInit
ZF::Viewinterface Zend_View_Interfacepublic function render($name);
public function assign($name);
Zend_View_AbstractbasePath, filters, helpers, _setHelperClass (filter)
Zend/Controller/Action/Helper/ViewRenderer .php
MyClass_View_Smarty extends Zend_View_Abstract
ZF::Проектыwww.magentocommerce.com – движок для e-
commerce, 0.5млн скачиваний, 30K users, 70 партнеров, 60+ языков, 150+ расширений (no java!)
RightMedia – online реклама (NY) 4-5млрд показов в день, 100K запросов/с, 19K
рекламодателей и партнеров (5 dev-6m)QEDWiki – IBM (mashups)PokerRoom.com – 12млн users (25 srv, 16front,
9mysql, i18n, docs, routes:{playpoker, pokerSpielen}: (seo), ZP+JavaBridge
Обычная страница без ORMЫф
Вид теста: ab –n 1000 –c XXX
512 ram, Intel Pentium 14oo MHz, Windows XP
1 10 50
cakePhp 5.21 4.98 5.02
Zend 7.67 7.86 7.77
CodeIgniter 16.13 15.44 15.42
Вместе с ORM, без кеша.Ыф
512Mb RAM 1.8Ghz AMD Sempron под Ubuntu Gutsy (7.10)
1 10 50
cakePhp 3.6 3.7 3.8
Zend 21.5 21.2 21.7
CodeIgniter 9.3 9.1 9.2
Ыф
512Mb RAM 1.8Ghz AMD Sempron под Ubuntu Gutsy (7.10)
Вместе с ORM, APC кэшемЫф 1 10 50
cakePhp 7.3 7.3 7.3
Zend 97.5 98.0 96.6
CodeIgniter 32.8 33.3 31.8
ZF::Пример проекта.Создаем сайт-сообщество. Несколько
языков, несколько доменов, различные уровни доступа к ресурсам, маршрутизация, ORM.
Организация разработкиZend Studio for Eclipse (или просто
phpEclipse)Cruise Control + phpUnderControlPHPUnit (Себастьян Бергман)SmartySVNAjax: xajax/jQuery/Dojo/Prototype/и т.д.Firebug + FirePhp (FireZend)ORM (Doctrine)Memcached
Zend_Configsite.ru.xmlsite.eu.xmlsite.zone.xml <languages> <language>en</language> <language>ru</language></languages>
$view = new Socnet_View_Smarty();
$vRender = new Zend_Controller_Action_Helper_ViewRenderer($view);
$vRender->setViewBasePathSpec( dirname(__FILE__).'/V/smarty/templates')
->setViewScriptPathSpec(':module/:controller/:action.:suffix')
->setViewScriptPathNoControllerSpec(':action.:suffix')->setViewSuffix('tpl');
Zend_Controller_Action_HelperBroker::addHelper($vRender);
Auth: $authAdapter = new
Zend_Auth_Adapter_DbTable($db, 'user', 'login', 'pass');Zend_Registry::set("Auth", $authAdapter);
Class myAdapter extends Zend_Auth_Adapter_Interface
public function authenticate();
ACL$roleAdmin = new
Zend_Acl_Role(Socnet_Auth_Acl::ADMIN);$this->addRole($roleAdmin, $roleMember);
$this->addResource('forum/topic');
$this->deny(null, null); // Запрет всем для всего.$this->allow(null, 'forum'); // всем доступ к форуму$this->allow(null, 'ajax'); // всем к ajax
$this->allow($admin, ‘admin');
Маршрутизация $route = new
Zend_Controller_Router_Route(ajax/:widgetName/:widgetAction',
array( 'controller' => ‘ajax', 'action' => 'index', 'widgetName' => '', 'widgetAction' =>
'index' ));
$router->addRoute('widget_request', $route);
if (extension_loaded('memcache')) { $frontendOptions = array( 'lifetime' => 7200, // cache lifetime of 2 hours 'automatic_serialization' => true ); $backendOptions = array(); $frontend = 'Core'; $backend = 'Memcached'; } else { $frontendOptions = array( 'lifetime' => 7200, // cache lifetime of 2 hours 'automatic_serialization' => true ); $backendOptions = array( 'cache_dir' => dirname(__FILE__).'/../tmp/' // ); $frontend = 'Core'; $backend = 'File'; } $cache = Zend_Cache::factory($frontend, $backend, $frontendOptions, $backendOptions); Zend_Registry::set('cache', $cache);
Диспетчеризацияextends
Zend_Controller_Dispatcher_Standard$action = $this->getActionMethod($request);$doCall = !method_exists($controller, $action);$request->setDispatched(true);$controller->preDispatch();
$xajaxargs = $controller->_page->Xajax->getRequestParams(); $sResponse = call_user_func_array(array(&$controller,
$action),$xajaxargs);if (is_a($sResponse, "xajaxResponse")) { $sResponse = $sResponse->getXML(); } header($sContentHeader);
Полезные ссылки
Cakephp.org (cake-php.ru) – сайт фреймворка
Cakeforge.com – набор готовых проектов на cake
codeigniter.com (code-igniter.ru) – сайт фреймворка
symfony-project.org - сайт фреймворка
Framework.zend.com - сайт фреймворка
Zendframework.ru - русский сайт + wiki (новый)http://habrahabr.ru/blogs/zend_framework/31639/ (Интеграция Zend_Acl и MVC. Часть 1)
http://lobach.info/develop/zf/integrating-zend-framework-and-doctrine/ (Интеграция Zend and Doctrine)
http://phpimpact.wordpress.com/2008/08/04/php-applications-where-is-the-include-coming-from/ (откуда инклюды)
http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html (Prepared statements in mysql)
http://vanav.com.ua/post397 (Сравнение скорости PDO, ADOdb, MDB2, Zend_Db, и т.п.)
http://club.shelek.ru/viewart.php?id=300 (Сравнительный тест систем кэширования user data для PHP)
http://www.dklab.ru/chicken/nablas/49.html (оптимизация Загрузки в 22 раза - Котеров)http://zendframework.ru/articles/chto_takoe_zend_framework/ (обзорно про ZF)http://kpumuk.info/php/zend-framework-router-for-subdirectory-based-site/#more-31 (Роутеры в Zend)http://devzone.zend.com/article/3811-Using-Zend_Tool-to-start-up-your-ZF-Project (Zend_Tool – для
создания рабочей копии проекта
http://www.avnetlabs.com/php/php-frameworks-revisited-codeigniter-vs-zend-framework (еще одно сравнение фреймворков)
http://snook.ca/archives/php/codeigniter_vs_cakephp/ (CI vs Cake)
http://www.avnetlabs.com/php/php-framework-comparison-benchmarks (Довольно хорошие сравнительные тесты)
http://phpimpact.wordpress.com/2008/07/28/zend-framework-architecture/
(архитектура Zend’a)
http://wiki.ringsidenetworks.org/display/ringside/Layering+and+Caching+Design (слои в архитектуре)
http://www.zend.com/en/products/platform/ (Zend Platform – aka Php Application Server – стоит почитать)
http://phpimpact.wordpress.com/category/frameworks/ (много интересных статей)
http://www.setti.biz/574/ (сравнение CodeIgniter с Cake)http://ajaxpatterns.org/Frameworks_Matrix (матрица JS-фреймворков)http://www.symfony-project.org/tutorial/1_0/my-first-project (Symfony: 1st
project )http://paul-m-jones.com/blog/?p=236 (обзор производительности)http://manual.cakephp.org/view/326/the-cake-blog-tutorial (1-й проект на
cake)