{"id":165,"date":"2011-08-07T20:01:47","date_gmt":"2011-08-07T18:01:47","guid":{"rendered":"http:\/\/hasselba.ch\/blog\/?p=165"},"modified":"2011-08-14T11:25:28","modified_gmt":"2011-08-14T09:25:28","slug":"partial-refresh-get-vs-post","status":"publish","type":"post","link":"https:\/\/hasselba.ch\/blog\/?p=165","title":{"rendered":"Partial Refresh: Get vs. Post"},"content":{"rendered":"<p>Wenn man die Wahl hat, einen Partial Refresh via <a title=\"w3c.org - RFC 2616\" href=\"http:\/\/www.w3.org\/Protocols\/rfc2616\/rfc2616-sec9.html\" target=\"_blank\">HTTP GET<\/a> oder via <a title=\"w3c.org - RFC 2616\" href=\"http:\/\/www.w3.org\/Protocols\/rfc2616\/rfc2616-sec9.html\" target=\"_blank\">HTTP POST<\/a> auszul\u00f6sen, sollte aus Gr\u00fcnden der Performance stets die GET-Variante bevorzugt werden. Das l\u00e4\u00dft sich durch zwei Umst\u00e4nde begr\u00fcnden:<\/p>\n<p><strong>1. Handling des XMLHttpRequests im Browser<\/strong><\/p>\n<p>Wird ein XMLHttpRequest mittels POST abgeschickt, geschieht dies in zwei Schritten: Erst wird der Header gesendet, daraufhin im zweiten Schritt die Daten; es werden also mindestens zwei TCP-Pakete verschickt. Da die Daten bei GET-Requests auf eine maximale URL-L\u00e4nge von 2K begrenzt sind, daher passen sie meistens in ein <a title=\"wikipedia.de : TCP\/IP Paketgr\u00f6\u00dfe\" href=\"http:\/\/de.wikipedia.org\/wiki\/Transmission_Control_Protocol#TCP-.2FIP-Paket-Gr.C3.B6.C3.9Fe\" target=\"_blank\">TCP-Paket<\/a>, was die Kommunikation beschleunigt und den Server entlastet. Ausnahme hierbei: Man hat zuviele Cookies, denn diese werden im Request mit\u00fcbertragen und vergr\u00f6\u00dfern so die Datenmenge.<\/p>\n<p><strong>2. Handling des Requests im JSF-Lifecycle<\/strong><\/p>\n<p>Bei einem GET Request werden nur zwei Phasen des <a title=\"developertutorials.com - JSF Lifecycles\" href=\"http:\/\/www.developertutorials.com\/tutorials\/java\/jsp-application-lifecycle-050504-1203\/\" target=\"_blank\">JSF-Lifecycles<\/a> ausgef\u00fchrt: Die &#8222;<em>Restore View<\/em>&#8222;-Phase und die &#8222;<em>Render Response<\/em>&#8222;-Phase. Das beschleunigt die Serverseitige Bearbeitung um ein vielfaches. POST Requests durchlaufen den kompletten JSF-Lifecycle.<\/p>\n<p><strong>Fazit<\/strong><\/p>\n<p>Solange die Datenmenge also gering bleibt bzw. sich die Absicht des Partial Refreshs nur auf den Abruf von Daten bzw. das Ausf\u00fchren von SSJS beschr\u00e4nkt (z.B. beim Updaten eines Seitenbereiches, o.\u00e4.), gewinnt ein <em>XSP.partialRefreshGet<\/em> immer vor einem <em>XSP.partialRefreshPost<\/em>. Dies sollte konsequent bei der Entwicklung ber\u00fccksichtigt werden. Denn meistens ist die Notwendigkeit, einen Partial Refresh mittels\u00a0POST durchzuf\u00fchren, nicht wirklich gegeben.<\/p>\n<p>\u00dcbrigens:<br \/>\nEin GET Request encodiert die zu \u00fcbertragenen Daten in die URL des Requests. \u00dcberschreitet die Datenmenge die maximale L\u00e4nge einer URL, f\u00fchrt das unweigerlich zu Fehlern auf dem Server.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn man die Wahl hat, einen Partial Refresh via HTTP GET oder via HTTP POST auszul\u00f6sen, sollte aus Gr\u00fcnden der Performance stets die GET-Variante bevorzugt werden. Das l\u00e4\u00dft sich durch zwei Umst\u00e4nde begr\u00fcnden: 1. Handling des XMLHttpRequests im Browser Wird &hellip; <a href=\"https:\/\/hasselba.ch\/blog\/?p=165\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,9,26,27,76,81,74,24],"tags":[7,11,4,86,25,87,16,5,12,3,85],"class_list":["post-165","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-javascript","category-jsf","category-performance","category-ssjs","category-web","category-xpages","category-xsp","tag-domino","tag-http","tag-js","tag-jsf","tag-partial-refresh","tag-performance","tag-server","tag-ssjs","tag-web","tag-xpages","tag-xsp"],"_links":{"self":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/165","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=165"}],"version-history":[{"count":10,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/165\/revisions"}],"predecessor-version":[{"id":171,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/165\/revisions\/171"}],"wp:attachment":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}