Celá aplikace za pomocí js a ajaxu
- maikoo
- Člen | 21
Zdravím,
zajímá mně téma full ajax aplikací na nette + jquery, názory jestli se to
vyplatí tomu věnovat čas a vývíjet celou aplikaci tímto směrem,
bezpečnost, problémy a úskalí které mně budou čekat a jestli jsou
nějaké zajímavé projekty/js frameworky nebo pluginy do jquery které mi
usnadní „život“, případně bez čeho se neobejdu.
Ps: Nette už tak trochu ovládám, v js zrovna profík nejsem ale ajax requesty a základy js mi nedělají problém. Pokud se tady nebo jinde nachází podobné téma, tutorialy které se tímto zabývají děkuji za odkazy a váš čas.
- llook
- Člen | 407
Jestli se to vyplatí, to je otázka, co od toho čekáš.
Nejvíc ti usnadní život nějaký frontendový MVC framework jako Ember.js nebo AngularJS, patlat něco takového v čistém jQuery je těžko udržitelné.
Je to ale asi tak dvakrát složitější, než psát klasické webové aplikace. Proto při práci v týmu není neobvyklé, že lidi dělají buď jen serverovou část, nebo jen klientskou.
- honos
- Člen | 109
Kdybys to přece jenom chtěl použit s JQuery tak doporučoval bych se podívat na toto vlákno. Osobně jsem ho nepoužíval ale vypadá to slibně..
- norbe
- Backer | 405
Celý obsah můžeš zajaxovatět poměrně jednoduše tak, že do BasePresenteru dáš něco takovéhleho:
protected function beforeRender() {
if($this->isAjax() && is_null($this->getParameter(self::SIGNAL_KEY))) {
// tady provedeš výchozí invalidaci snippetů
// pokud aplikace přijme nějaký signál, bude invalidace snippetů v jeho kompetenci a tento blok se neprovede
}
parent::beforeRender();
}
Pak už stačí jen zajaxovatět všechny odkazy, které nevedou na jiný web nebo soubor…
Editoval norbe (10. 1. 2014 8:02)
- tomas.lang
- Člen | 53
honos napsal(a):
Mesiah napsal(a):
Pokud by ses rozhodl pro nějaký frontendový MVW framework, zvaž jestli opravdu potřebuješ na straně serveru Nette…
Nesouhlasím, Nette je na to dobře vybavený.
Vybavený je dobře (obvzláště pokud potřebuji jen překreslit určité části stránky), ale pokud bude na frontu např. AngularJS či jiný FW se kterým se na straně klienta bude držet i větší část aplikační logiky a se serverem bude komunikovat jen pomocí REST API, pak bych tu viděl pár problémů – např. jestli se nemýlím tak Nette routování pořád není ve výchozím stavu schopno rozlišovat mezi GET/POST/PUT/DELETE požadavky…
Ostatně v tomto je stejně největší otázka jaký typ aplikace maikoo hodlá vytvořit.
Editoval tomas.lang (10. 1. 2014 12:05)
- maikoo
- Člen | 21
tomas.lang napsal(a):
honos napsal(a):
Mesiah napsal(a):
Pokud by ses rozhodl pro nějaký frontendový MVW framework, zvaž jestli opravdu potřebuješ na straně serveru Nette…
Nesouhlasím, Nette je na to dobře vybavený.
Vybavený je dobře (obvzláště pokud potřebuji jen překreslit určité části stránky), ale pokud bude na frontu např. AngularJS či jiný FW se kterým se na straně klienta bude držet i větší část aplikační logiky a se serverem bude komunikovat jen pomocí REST API, pak bych tu viděl pár problémů – např. jestli se nemýlím tak Nette routování pořád není ve výchozím stavu schopno rozlišovat mezi GET/POST/PUT/DELETE požadavky…
Ostatně v tomto je stejně největší otázka jaký typ aplikace maikoo hodlá vytvořit.
Pokud by jsi měl teda pravdu co by jsi použil místo nette?
Aplikace …půjde spíše o „backend“ záležitost, správa databází
statistiky atp tak trochu jednodušší/menší ERP by se dalo říct.
Editoval maikoo (10. 1. 2014 12:11)
- llook
- Člen | 407
Je pravda, že routování, které je v základu Nette, se pro REST API příliš nehodí, ale už pro to existují minimálně dvě rozšíření:
Tady je hlavně otázka, co bylo tou „full ajax“ aplikací myšleno. Já to pochopil jako nějakou single-page application. Jestli to bylo myšleno spíš jako klasická aplikace, ale hodně obohacená o ajax, tak je lepší cestou ten nette.ajax.js.
- maikoo
- Člen | 21
Noo podle všeho mi jde spíše o „singlepage app“ aby se co nejvíce omezily redirecty a neustálé načítání celých stránek a zrychlila/zpříjemnila se práce s app ale na druhé straně časem může celá věc nabýt větších rozměrů takže bych byl nerad kdybych pak na straně serveru(phpfw) narazil na nějaký třeba vývojový, rychlostní problém.
Ten Laravel na první pohled vypadá zajímavě musím pohledat jak to je s výkonem.
- Filip Procházka
- Moderator | 4668
Se silexem bych se bál dělat web co má víc jak 5 stránek. A Nette jde taky použít jako microframework http://davidgrudl.com/sources
Co se týče podpory RESTu tak ta se dá strašně snadno dodělat, už na to dokonce jsou nějaké rozšíření. Není důvod Nette nepoužít, stejně nějakou logiku musíš mit i na serveru, protože jak jistě víš, validace na klientu se dají obejít.
- bazo
- Člen | 620
nette ako rest server pridava celkom dost vela overheadu, pretoze zbytocne startuje celu applikaciu a presentery.
najlepsie je si najst specializovany rest router a z nette len di a sluzby. vytvorit si controllery ako plain classy a reagovat na routy.
ja som napriklad pouzil zaphpa http://zaphpa.org/, trosku som si ho upravil
a pouzivam to cca takto
<?php
$configurator = require __DIR__ . '/../app/bootstrap.php';
$configurator->addConfig(__DIR__ . '/../app/config/rest.neon');
$container = $configurator->createContainer();
$httpRequest = $container->getByType('Nette\Http\Request');
$hmac = $container->getByType('Mardy\Hmac\Hmac');
$url = $httpRequest->getUrl()->getAbsoluteUrl();
$router = $container->getByType('Zaphpa_Router');
$middleware = $container->getByType('VerifyMiddleware');
//$router->attachMiddleware($middleware);
try {
$data = $router->route();
$code = 200;
$payload = [
'data' => $data
];
} catch (Zaphpa_InvalidPathException $ex) {
$code = 404;
$payload = [
'error' => $code,
'message' => 'Not found.'
];
} catch (REST\RestException $ex) {
$code = $ex->getCode();
$payload = [
'error' => $ex->getInternalCode(),
'message' => $ex->getMessage()
];
} catch (Exception $ex) {
$code = 500;
$payload = [
'error' => 'An unhandled exception occured: '.$ex->getMessage()
];
}
$payload['status'] = $code;
$httpResponse = $container->getByType('Nette\Http\Response');
$httpResponse->setCode($code);
$response = new \Nette\Application\Responses\JsonResponse($payload);
$response->send($httpRequest, $httpResponse);
?>
- Mesiah
- Člen | 240
Filip Procházka napsal(a):
Se silexem bych se bál dělat web co má víc jak 5 stránek. A Nette jde taky použít jako microframework http://davidgrudl.com/sources
Zajímalo by mě, proč si to myslíš? Jde o to, že se časem v routách začneš ztrácet, nebo jde i o něco víc?
- Vojtěch Dobeš
- Gold Partner | 1316
Ad téma vlákna: dobrá otázka! Osobně se domnívám, že existují dvě větve ajaxových webových aplikací:
- pokročilé aplikace se spoustou logiky, kterou dává smysl provozovat v prohlížeči (GPS, úprava obrázků/videa/zvuku, závislost na mnoha externích API…)
- spíše klasická aplikace, která však využívá AJAX, aby:
- snížila množství přenášených dat
- zrychlila načítání nového obsahu
Druhý případ jsou například známé webové aplikace Github či Basecamp – oboje nejsou tak cool, aby se musely celé generovat v prohlížeči, ale využívají AJAX na načítání většiny obsahu, aby snížily zátěž přenášených dat (header, footer, navigace – zůstávají stejné).
Pokud je tvoje aplikace spíše případ č. 1, bude dobré
investovat do naučení se nějakého javascriptového MVC frameworku a celou
aplikaci postavit jako tlustý JS klient s RESTovým backendem. Pokud je tvoje
aplikace spíše případ č. 2, není žádnou hanbou postavit
ji na klasickém serverovém renderování, a pak ji jen zajaxovat –
na to se perfektně hodí Nette framework (má jednu z nejlepších podpor pro
něco takového) třeba v kombinaci s nette.ajax.js
knihovnou.