<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ASP.NET WebForms</title><link>https://www.dotnetzone.gr:443/cs/forums/13/ShowForum.aspx</link><description>Θέματα για web εφαρμογές, σε ASP.NET WebForms</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Postback databinding: Viewstate vs Database reload</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/17125.aspx</link><pubDate>Mon, 25 Sep 2006 03:14:43 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:17125</guid><dc:creator>Mitsaras</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/17125.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=13&amp;PostID=17125</wfw:commentRss><description>Ευχαριστώ για τα σχόλια. Με πρόλαβες, ήθελα κι εγώ να βάλω link στο άρθρο του Infinities loop, το οποίο είναι από τα πιο αναλυτικά που υπάρχουν (αν και νομίζω ότι το έχω κάνει στο παρελθόν).</description></item><item><title>Απ: Postback databinding: Viewstate vs Database reload</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/17124.aspx</link><pubDate>Mon, 25 Sep 2006 02:54:25 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:17124</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/17124.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=13&amp;PostID=17124</wfw:commentRss><description>&lt;P&gt;Δεν ξέρω τι κάνει και πως το κάνει η σελίδα του Πλαισίου&amp;nbsp;ή μάλλον οι developers που έφτιαξαν τη σελίδα του Πλαισίου και είναι λίγο δύσκολο να υποθέσει κανείς αν δεν δει το source κώδικα. Γενικά, το ViewState είναι ένα από τα πιο misused χαρακτηριστικά του ASP.NET και&amp;nbsp;ως εκ τούτου υπάρχει πάντοτε η πιθανότητα η όποια σελίδα να έχει&amp;nbsp;τεράστιο ViewState που να έχει προκύψει από κακή (ή μη-optimized) χρήση του. &lt;/P&gt;
&lt;P&gt;Από την άλλη μεριά, σε ό,τι αφορά το scalability, σε μια ολοκληρωμένη εφαρμογή που αποτελείται από πολλά tiers, μία λύση (όπως η χρήση queries αντί ViewState) που μπορεί να δουλεύει καλά σε μια δεδομένη χρονική στιγμή ή σε ένα δεδομένο περιβάλλον, μπορεί να μην δουλεύει καλά σε άλλη χρονική στιγμή ή περιβάλλον (όταν για παράδειγμα το RDBMS έχει φτάσει σε near capacity φορτία). Γι αυτό κι έγραψα ότι κάθε επιλογή έχει trade offs. Η δική μου προσέγγιση στο πρόβλημα θα ήταν να μην απαρνηθώ το ViewState (εξάλλου προσφέρει ευκολία, όπερ σημαίνει γρηγορότερη υλοποίηση, όπερ σημαίνει μικρό κόστος (ή μεγαλύτερο κέρδος - εξαρατάται την οπτική γωνία &lt;img src="/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;)&amp;nbsp;αλλά να βεβαιωθώ ότι κάνω σε πρώτη φάση σωστή και σε δεύτερη optimized χρήση. Κατόπιν να ελέγξω αν υπάρχουν προβλήματα στο performance και να δοκιμάσω την εναλλακτική λύση του database reload.&lt;/P&gt;
&lt;P&gt;Ρίξε μια ματιά εδώ: &lt;A href="http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx"&gt;http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx&lt;/A&gt;&amp;nbsp; καθώς επίσης κι εδώ &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/viewstate.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/viewstate.asp&lt;/A&gt;&amp;nbsp;(αναφέρεται στο πρώτο) ιδιαίτερο ενδιαφέρον έχει το σημείο "&lt;A href="http://msdn.microsoft.com/library/en-us/dnaspp/html/viewstate.asp?frame=true#viewstate_topic10" target=_self&gt;Specifying Where to Persist the View State&lt;/A&gt;"&lt;/P&gt;</description></item><item><title>Απ: Postback databinding: Viewstate vs Database reload</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/17116.aspx</link><pubDate>Sun, 24 Sep 2006 04:14:00 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:17116</guid><dc:creator>Mitsaras</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/17116.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=13&amp;PostID=17116</wfw:commentRss><description>Μάνο, δεν στέκομαι μόνο στην αρχική σελίδα, ανέφερα το πλαίσιο ως παράδειγμα.&lt;br /&gt;
&lt;br /&gt;
Αν κι εδώ πρέπει να πω ότι πιστεύω πως έχει μεγάλη σημασία, διότι αν ο μέσος χρήστης δεν έχει γρήγορη σύνδεση και το site κατέβει σε 1-2 λεπτά, δύσκολα θα έχει την υπομονή για να περιμένει.&lt;br /&gt;
&lt;br /&gt;
Αυτήν την περίοδο κατασκευάζω ένα site, και θέλω να γίνει όσο το δυνατόν αποδοτικότερη η κατανάλωση των resources, οπότε προσπαθώ να δω τι κοστίζει πιο πολύ. Βέβαια, στο πρώτο μήνυμά μου δεν καθόρισα τους παράγοντες, αλλά ίσως να μπορούσαμε να ανάγουμε την ερώτηση στο αν το LOS (de)serialization του Viewstate μαζί με το κόστος μεταφοράς του από και προς τον client "στοιχίζει" περισσότερο από την λήψη των δεδομένων από τη βάση, μαζί με την μετά μετατροπή τους σε objects.&lt;br /&gt;
&lt;br /&gt;
Πάντως, θέλω να κάνω και κάποια σχόλια για το πλαίσιο, και αν έχω καταλάβει κάτι λάθος, παρακαλώ διορθώστε με!&lt;br /&gt;
&lt;br /&gt;
Στην αρχική σελίδα (μια και την αναφέραμε) δεν πρέπει να υπάρχουν παρά 1 ή 2 controls τα οποία κάνουν post-back (ένα self-page postback text-box για εγγραφή στο newsletter τους, και ένα για αναζήτηση, το οποίο μάλλον είναι cross-page postback).&lt;br /&gt;
&lt;br /&gt;
Το δεύτερο σε πάει σε μια σελίδα, η οποία έχει ένα Viewstate μόλις 1.5KB. Τι έχει αλλάξει; Δεν υπάρχουν οι internal διαφημίσεις οι "top-web προσφορές" και οι προτάσεις της αρχικής (είναι ίσως η πιο ελαφριά σελίδα σε όλο το site, αν η αναζήτησή σου δεν έχει αποτελέσματα. Τώρα που το δοκιμάζω, αν αναζητήσω για κάτι που επιστρέφει 7 αποτελέσματα, το Viewstate αυξάνεται στα 10KB, και κάτι με 40 αποτελέσματα, εκτοξεύει το Viewstate στα 75KB!!!).&lt;br /&gt;
&lt;br /&gt;
Με άλλα λόγια, όπως το βλέπω, η μόνη περίπτωση που το Viewstate έχει νόημα ως αποθήκη πληροφορίας στην πρώτη σελίδα είναι να χρησιμοποιήσει κανείς το newsletter text-box, διότι σε όλες τις άλλες περιπτώσεις, είτε δεν έχεις postback (direct-links), είτε όλα αυτά τα στοιχεία (κυρίως Datalists απ' ότι φαίνεται) δε χρειάζονται στη δεύτερη σελίδα.&lt;br /&gt;
&lt;br /&gt;
Το ίδιο ισχύει και με τα αποτελέσματα της αναζήτησης, όπου δε φαίνεται να υπάρχει λόγος ύπαρξης της χρήσης του Viewstate ως αποθήκης.&lt;br /&gt;
&lt;br /&gt;
Επίσης, παρατηρώ πως ορισμένα links χρησιμοποιούν μια άλλη σελίδα η οποία κάνει redirection. Δε μπορώ να φανταστώ για ποιον ακριβώς λόγο χρειάζεται αυτό το logic για εσωτερικά links, αλλά θα το αποδώσω πιθανότατα στην άγνοια των developers.</description></item><item><title>Απ: Postback databinding: Viewstate vs Database reload</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/17115.aspx</link><pubDate>Sun, 24 Sep 2006 02:44:58 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:17115</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/17115.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=13&amp;PostID=17115</wfw:commentRss><description>&lt;P&gt;"Every decision is a trade-off"&lt;/P&gt;
&lt;P&gt;Δεν υπάρχει ο απόλυτος κανόνας, όλα εξαρτώνται από διάφορες παραμέτρους, όπως το infrastructure που θα σου παράγει την τελική σελίδα. Πάρε για παράδειγμα το Windows Live Spaves που έχει 858Κ sites(!) Αν σχεδίαζες την αρχιτεκτονική αυτού του τέρατος, θα σε ενδιέφερε το μέγεθος της πρώτης σελίδας ως παράγοντας που επηρεάζει το scalability; Μάλλον όχι... &lt;/P&gt;</description></item><item><title>Postback databinding: Viewstate vs Database reload</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/17112.aspx</link><pubDate>Sun, 24 Sep 2006 01:19:35 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:17112</guid><dc:creator>Mitsaras</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/17112.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=13&amp;PostID=17112</wfw:commentRss><description>Τελικά, ποια λύση είναι προτιμότερη; Να φορτώνω τα δεδομένα που θέλω από τη βάση δεδομένων κάθε φορά, ή να τα στείλω μια και καλή στο viewstate, φουσκώνοντάς το;&lt;br&gt;&lt;br&gt;Η αλήθεια είναι ότι προσωπικά, φορτώνω ορισμένα από τα δεδομένα στην cache (κυρίως αυτά που είναι μικρά σε πλήθος/όγκο ή/και δε διαφέρουν μεταξύ των sessions), τραβώντας όλα τα άλλα από την βάση, και αποφεύγω τη χρήση του Viewstate όσο το δυνατό.&lt;br&gt;&lt;br&gt;&lt;br&gt;Ποια είναι η άποψή σας; Είδα το καινούριο site του Πλαισίου (το οποίο ξανάγραψαν σε ASP.Net), και η αρχική σελίδα έχει ένα viewstate μεγέθους 25KB! H ASP.Net ήδη παράγει πολύ μεγαλύτερα αρχεία σε μέγεθος, σε σχέση με άλλες τεχνολογίες (κατά μέσον όρο, κυμαίνονται στα 50KB, με την αρχική του dotnetzone να φτάνει τα 130KB!!), ένα μεγάλο viewstate, μόνο χειροτερεύει την κατάσταση και επηρρεάζει σημαντικά το scalability. Είναι όμως προτιμότερο να επιβαρύνουμε τον client από το να απασχολούμε τη βάση δεδομένων;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item></channel></rss>