Celá aplikace za pomocí js a ajaxu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
maikoo
Člen | 21
+
0
-

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
+
0
-

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
+
0
-

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ě..

Mesiah
Člen | 240
+
0
-

Pokud by ses rozhodl pro nějaký frontendový MVW framework, zvaž jestli opravdu potřebuješ na straně serveru Nette…

norbe
Backer | 405
+
0
-

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)

honos
Člen | 109
+
0
-

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ý.

tomas.lang
Člen | 53
+
0
-

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
+
0
-

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)

Michal Vyšinský
Člen | 608
+
0
-

Pokud by jsi měl teda pravdu co by jsi použil místo nette?

Laravel

mkoubik
Člen | 728
+
0
-

maikoo napsal(a):
Pokud by jsi měl teda pravdu co by jsi použil místo nette?

Pokud trváš na PHP tak zkus Silex.

llook
Člen | 407
+
0
-

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
+
0
-

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.

mkoubik
Člen | 728
+
0
-

Tak na tohle se nette hodí docela dobře (komponenty + snippety), myslel jsem že mluvíš o komplet frontendu napsaném v js komunikujícím se serverem přes JSON REST api.

Editoval mkoubik (10. 1. 2014 15:38)

maikoo
Člen | 21
+
0
-

je možné že časem bude i androidí aplikace tzn. ta volba full rest asi příjde vhod

Mesiah
Člen | 240
+
0
-

mkoubik napsal(a):

maikoo napsal(a):
Pokud by jsi měl teda pravdu co by jsi použil místo nette?

Pokud trváš na PHP tak zkus Silex.

Like!

Filip Procházka
Moderator | 4668
+
0
-

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.

honos
Člen | 109
+
0
-

Hodilo by se tady rozdávaní známek +1 | –1

@prochazkaFilip +1
@llook +1

Editoval honos (11. 1. 2014 15:16)

bazo
Člen | 620
+
0
-

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
+
0
-

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?

Filip Procházka
Moderator | 4668
+
0
-
  1. ano
  2. v momentě kdy máš víc jak 5 stránek tak už to není microsite
Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Ad téma vlákna: dobrá otázka! Osobně se domnívám, že existují dvě větve ajaxových webových aplikací:

  1. 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…)
  2. spíše klasická aplikace, která však využívá AJAX, aby:
    1. snížila množství přenášených dat
    2. 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.