Τεχνολογίες δημιουργίας web sites/applications

Από που να ξεκινήσω; Που θα βρω; κ.α. γενικές ερωτήσεις για την δημιουργία μιας ιστοσελίδας.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Τεχνολογίες δημιουργίας web sites/applications

Δημοσίευση από dva_dev » 23 Απρ 2010 12:59

Η εμπειρία μου στον προγραμματισμό μου έχει δείξει ότι δεν υπάρχει* κάποια γλώσσα που να είναι άριστη σε όλους τους τομείς ανάπτυξης. Αλλες γλώσσες προσφέρουν μεγάλη υποστήριξη από communities (π.χ. php), άλλες γλώσσες προσφέρουν μεγάλη ταχύτητα (πχ. c) άλλες γλώσσες προσφέρουν ευκολία στην παραμικρή αλλαγή του κώδικα (π.χ. asp) αλλά πάσχουν στην ταχύτητα λόγω του ότι γίνονται parse πριν εκτελεστούν, άλλες προσφέρουν δυνατότητα επέκτασης με extensions (π.χ. php_extensions) για να γίνουν κάποια πράγματα πιο γρήγορα ή πιο αυτοματοποιημένα, άλλες προσφέρουν τη δυνατότητα να χρησιμοποιήσεις έτοιμα components που έχουν γραφτεί σε άλλες γλώσσες (πχ. com objects, isapi extensions, dlls, shared libraries, cgi scripts, fast cgi scripts), κ.λπ.
Η κάθε γλώσσα/τεχνολογία έχει τα "θετικά" και τα "αρνητικά" στοιχεία της.

Είχα γράψει παλιότερα λίγο κώδικα (όχι τίποτα σπουδαίο ή πολύπλοκο) για να γυρνάει τα ονόματα των ημερών και μηνών σε διάφορες γλώσσες με σκοπό να το χρησιμοποιήσω σε ένα πολυγλωσσικό site που σχεδίαζα. Με αφορμή το θέμα Μετράει πλέον και η ταχύτητα ενός site στο ranking, μου γεννήθηκε το ερώτημα αν αντί να μένει κάποιος κολλημένος σε μια γλώσσα και να κάνει σε αυτή όλη την υλοποίηση, μήπως είναι προτιμότερο ή αξίζει τον κόπο, να υλοποιήσει κάποια κομμάτια με άλλη γλώσσα ή να χρησιμοποιήσει άλλη τεχνολογία για να πετύχει πέρα από κάποια "αυτοματοποιημένη" λειτουργικότητα που θα την έχει στη βιβλιοθήκη του, και μεγαλύτερη ταχύτητα.

Για παράδειγμα σε ένα centos virtual machine που έστησα πρόχειρα (και εκ του αποτελέσματος όχι καλά), έκανα κάποιες δοκιμές, αφαιρώντας την εμφάνιση του αποτελέσματος διότι παράγεται τεράστιος όγκος δεδομένων που πρέπει να μεταφερθεί στον client από το internet και την πρόσβαση σε βάση δεδομένων που είναι διαδικασίες που καθυστερούν, είχα τα εξής αποτελέσματα:

Για επανάληψη της διαδικασίας 20.000 φορές (στο centos vm)
days: 3.72339, months: 6.10952 seconds using php function
days: 1.09869, months: 3.04768 seconds using php extension
days: 0.07000, months: 0.13000 seconds using cgi script
(σε linux δεν έχω βάλει mono για να τρέξω aspx)

Για επανάληψη της διαδικασίας 20.000 φορές (σε άλλο windows μηχάνημα)
days: 2.36694, months: 3.89227 seconds using php function
days: 0,09000, months: 0,14700 seconds using C# function
(σε windows δεν έχω φτιάξει php_extension και cgi script)

Γενικά οι τροποποιήσεις γίνονται πιο εύκολα σε php, μετά C#, μετά cgi, μετά php_extension.
Σαν επαναχρησιμοποίηση, δημιουργία βιβλιοθήκης, του κώδικα μάλλον C#, php_extension, php, cgi.
Σαν ταχύτητα εκτέλεσης, cgi ή C# (είναι διαφορετικά μηχανήματα για να συγκρίνω), php_extension, php.

Αν χρησιμοποιηθεί γενικά η C# (σε windows) για να φτιαχτεί η ιστοσελίδα είναι πολύ απλά τα πράγματα, γιατί μπορεί τα πάντα να γίνουν σε (c#) aspx.
Εναλλακτικά θα μπορούσαν κάποια κομμάτια, που μπορούν να χρησιμοποιηθούν οπουδήποτε, να μπουν σε κάποιο compiled module (C# dll) και σε aspx να μείνουν μόνο όσα τμήματα αφορούν τη συγκεκριμένη ιστοσελίδα.
Επίσης θα μπορούσαν αυτά τα επαναχρησιμοποιήσιμα τμήματα να γίνουν (c/c++/vb) com
objects και να χρησιμοποιηθούν από οποιαδήποτε γλώσσα μπορεί να χρησιμοποιήσει com obejcts (και οι asp, aspx, php, σε windows).

Σε linux, είναι διαφορετικές οι δυνατότητες (μάλλον λιγότερες αφού δεν έχεις com).
Οπότε στην php, θα μπορούσαν τα επαναχρησιμοποιήσιμα τμήματα να γίνουν php_extensions για να φτιάξεις έτοιμες βιβλιοθήκες και να έχεις μεγαλύτερη ταχύτητα. Επίσης αν κάποια τμήματα είναι τελειωμένα θα μπορούσαν να γίνουν cgi scripts, οπότε να έχεις το πλεονέκτημα του compiled κώδικα για μέγιστη ταχύτητα εκτέλεσης.

Εσείς τι τεχνικές/τεχνολογίες/γλώσσες χρησιμοποιείτε για να φτιάξετε ή να βελτιστοποιήσετε τις ιστοσελίδες σας; Νομίζετε ότι αξίζει ο κόπος και ο χρόνος για να πάτε σε εναλλακτικές υλοποιήσεις; Η εταιρία που φιλοξενείτε τα sites σας σας δίνει τη δυνατότητα (αν έχετε ζητήσει) να κάνετε "αλχημείες", ή αξίζει το πιθανώς μεγαλύτερο κόστος, για να έχετε το βέλτιστο αποτέλεσμα;
Εχετε κάνει κάποιο αντίστοιχο test;
Σκέφτεστε να ξαναγράψετε κομμάτια των ιστοσελίδων σας ή των βιβλιοθηκών σας για να έχετε κάποιο πιο εύχρηστο, πιο επαναχρησιμοποιήσιμο, πιο γρήγορο, ή πιο κλειστό (closed source :) ) κώδικα;

Οι δοκιμές που έχω κάνει εγώ, είναι σε δικό μου μηχάνημα (χωρίς τίποτα ιδιαίτερο εξοπλισμό, και ίσως μικρότερων δυνατοτήτων από τα περισσότερα σημερινά desktop pcs), οπότε δεν έχω περιορισμό στο να του αλλάξω τα φώτα στους πειραματισμούς.


*πάντως, μέχρι στιγμής κλίνω στο συμπέρασμα ότι σε γενικές γραμμές οι .net γλώσσες (C# κατά προτίμηση) είναι αυτές που τα πηγαίνουν καλύτερα στους περισσότερους τομείς.
Την java, jsp (που μάλλον αντιστοιχεί ακριβώς στο .net), και όχι μόνο, την άφησα εντελώς απ' έξω γιατί δεν έχω κάνει κανένα test και δεν έχω καν δοκιμάσει να στήσω server.


ΥΓ. Αν τύχει (λέω τώρα) και είναι κάποιος που ενδιαφέρεται τα links των tests είναι:
Για το linux
http://dvassil.co.cc:800/test/greekutils_php/ (php)
http://dvassil.co.cc:800/test/greekutils_phpext/ (php extension)
http://dvassil.co.cc:800/test/greekutils_cgi/ (cgi)
Για το windows
http://dvassil.co.cc/test/greekutils_php/ (php)
http://dvassil.co.cc/test/greekutils/ (aspx c#)

Άβαταρ μέλους
Kainourios
Ruby Moderator
Δημοσιεύσεις: 504
Εγγραφή: 18 Μάιος 2005 16:20
Τοποθεσία: Κορυδαλλός
Επικοινωνία:

Τεχνολογίες δημιουργίας web sites/applications

Δημοσίευση από Kainourios » 23 Απρ 2010 15:02

Ωραίο θέμα :) . Γενικά το bottleneck μιας web application είναι η βάση δεδομένων γι' αυτό και αργεί όταν σκάνε 20.000 requests το δευτερόλεπτο (όπως στο παραδειγμα σου) και εκεί παίζονται όλες οι πατέντες στα πολύ μεγάλα sites (βλέπε twitter και digg που βάλανε cassandra) και γι' αυτό βγαίνουν νέες πατέντες με NoSQL βάσεις. Στο παράδειγμα σου χρησιμοποίησες MySQL kαι στην C# και στην php;

Αν φτιάχνεις κάτι και βλέπεις οτι πρόκειται να χρειαστεί πολλούς πόρους και πολλά requests δε θα βάλεις από πίσω να το διαχειρίζεται η php, αλλά κάτι πιο γρήγορο (βλέπε facebook chat που αν δεν κάνω λάθος τρέχει με erlang, την πιο γρήγορη concurrent γλώσσα όταν έχεις cloud και "άπειρους" υπόλογιστές προς εκμετάλλευση).

Κατά τα άλλα το web από τη φύση του είναι αργό (ένα καλό ping κάνει 20ms), ενώ ένα συνηθισμένο scriptaki σε php εκτελείται σε μερικά μseconds οπότε είτε κάνει 50 μseconds γραμμένο σε php, είτε 0.5 μsec γραμμένο σε C#, δε φαίνεται αυτή η διαφορά επειδή υπάρχει η καθυστέρηση του δικτύου. Αν όμως μεγαλώσει πολύ μια web application και χρειαστεί scalability, τότε αρχιζεις και αντικαθιστάς σιγά σιγά διάφορα, όπως βάζεις cloud και βελτιώνεις το δίκτυο, γράφεις κάποια κομμάτια σε compiled γλώσσα στο backend, caching κλπ. Όμως ακόμα και τότε, οι scripting γλώσσες παραμένουν για το frontend (βλέπε facebook που έχει php, twitter που είναι σε rails, google που χρησιμοποιεί python κλπ.).

Οπότε για το 90% των sites που δεν έχουν scalability θέματα, θεωρώ οτι αρκούν οι scriptoγλώσσες και για το backend, εφόσον αρκεί ένα VPS για να υποστηρίξει το site και το πρώτο πράγμα που κάνεις optimise είναι η βάση όπου παρατηρείται η καθυστέρηση.

Αυτά νομίζω οτι ισχύουν, είναι προσωπικές γνώμες βέβαια και ίσως κάτι να μου διαφεύγει οπότε θέλω να ακούσω τις απόψεις των υπολοίπων. :)

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Τεχνολογίες δημιουργίας web sites/applications

Δημοσίευση από dva_dev » 23 Απρ 2010 18:25

Επειδή οι μεγάλες καθυστερήσεις είναι στην πρόσβαση στη βάση, σε άλλες ιστοσελίδες, σε web services και στο output, έβγαλα όλα τα σημεία (ακόμα και το output) που είδα ότι έχουν τέτοιες καθυστερήσεις.
Αυτά σίγουρα μπορούν να βελτιωθούν είτε με caching (memory ίσως κατά προτίμηση) - που μπορεί να μπει στο παιχνίδι του application development, είτε στήνοντας/αντικαθιστώντας το δίκτυο (πχ. με 1000άρες αντί για 100άρες κάρτες και καλώδια) - που μάλλον σαν hardware παράμετρος δεν θα την έβαζα στο κομμάτι του development (παρ' όλα αυτά μπορεί να παίξει ρόλο), είτε με συνδιασμό (clustering, load balancing, κ.λπ. που ελάχιστες εφαρμογές πιστεύω ότι μπορεί να χρειάζονται).

Ο περισσότερος κόσμος έχω την εντύπωση ότι δημιουργεί web sites που ενημερώνονται το πολύ 1 φορά τη μέρα (ή ακόμα και πιο σπάνια αν κρίνω από τα ελάχιστα intranet κυρίως sites μου, αλλά και εμένα προσωπικά). Λίγα νομίζω ότι είναι τα sites που ενημερώνονται συχνότερα (κυρίως ειδησεογραφικά). Υπάρχουν και πολλά sites όμως (π.χ. τα χιλιάδες forums) στα οποία το caching (τουλάχιστον των posts) μάλλον δεν μπορεί να χρησιμοποιηθεί, αφού είναι πολλοί οι χρήστες που μπορούν να γράφουν "ταυτόχρονα" και χιλιάδες αυτοί που μπορεί να τα διαβάζουν. Ακόμα και εκεί ίσως κάποια κομμάτια να μπορούσαν να μπούν σε κάποια cache.

Οπως αναφέρεις κι εσύ το facebook, κι εμένα αυτό ήταν κομμάτι της αφορμής για το ερώτημα. Ας πάρουμε όμως για παράδειγμα τα phpbbX, το wordpress, το blogger, και το joomla. Εχω την εντύπωση ότι σχεδόν το μισό web στηρίζεται πάνω σε αυτές τις εφαρμογές. Δεν θα ήταν πιο γρήγορη η εκτέλεση, αν για παράδειγμα έστω ο έλεγχος των δικαιωμάτων ήταν σε php extension ή cgi script? Δεν θα ήταν πιο γρήγορη η εκτέλεση αν ακόμα κι αν η καταχώρηση έμενε σε php, η εμφάνιση των αποτελεσμάτων γινόταν από fast-cgi?
Η απλώς για τους developers/εταιρίες απλά δεν αξίζει τον κόπο, μιας και η αγορά ενός καλύτερου επεξεργαστή, παραπάνω μνήμης, γρηγόρότερης κάρτας-καλωδίωσης δικτύου κοστίζει απλώς φθηνότερα από το κόστος σχεδιασμού/υλοποίησης/χρήσης μιας διαφορετικής λύσης/τεχνολογίας/αλγόριθμου;
Τουλάχιστον για αυτές τις εφαρμογές που είναι opensource έχω την εντύπωση πως το κόστος του ανθρωποχρόνου δεν είναι θέμα, αφού ούτως ή άλλως οι developers που τις αναπτύσσουν (πρωτογενώς) το κάνουν επειδή το θέλουν και όχι επειδή πληρώνονται...
Οι υπόλοιποι που τις παραμετροποιούν ίσως δεν έχουν (ή δεν ξέρουν αν έχουν) περιθώρια επιλογής.

Επειδή όμως βλέπω να γίνεται μόδα (ή ανάγκη αν θέλετε) το software as a service, να δημιουργούνται όλο και περισσότερα web services, (όπως και το "greeklish to greek" που μας παρουσίασε εδώ ο φίλος ThyClub), λέω μήπως για παράδειγμα αν αντί για php (αν δεν κάνω λάθος ανάφερε πως το έχει υλοποιήσει σε php), γινόταν πιο αποδοτικό με μια υλοποίηση σε php+fast-cgi. Αξίζει τον κόπο/χρόνο/κόστος μια τέτοια μετατροπή; Είναι κάποιος που ξαναγράφει τμήματα των εφαρμογών του που είχε φτιάξει παλιότερα;

Υπάρχουν developers (και) εδώ μέσα που γράφουν custom κώδικα, και πολοί περισσότεροι που γράφουν custom κώδικα πειράζοντας έτοιμα συστήματα. Μένουν στη γλώσσα και την τεχνολογία που φτιάχτηκε το αρχικό σύστημα ή "παίζουν" και με διαφορετικές γλώσσες και τεχνολογίες προσπαθώντας να πετύχουν κάποια καλύτερη απόδοση;

Αναμένω τις απόψεις σας.

Άβαταρ μέλους
Maradonna
Δημοσιεύσεις: 135
Εγγραφή: 07 Ιουν 2007 03:19
Τοποθεσία: Αθήνα
Επικοινωνία:

Τεχνολογίες δημιουργίας web sites/applications

Δημοσίευση από Maradonna » 03 Μάιος 2010 04:51

Ruby on rails στο native server της.

Και σε apache αλλα μόνο μέσω mac.

Εξαιρετική γλώσσα προγραμματισμού ή ruby και πανίσχυρο και γρήγορο σε development το framework rails.Το προτείνω ανεπιφύλλακτα.
Εικόνα
Code is poetry

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Τεχνολογίες δημιουργίας web sites/applications

Δημοσίευση από dva_dev » 03 Μάιος 2010 11:56

Επειδή η ruby δεν είναι και η πιο γρήγορη γλώσσα, όταν θέλεις να βελτιώσεις την απόδοση τι κάνεις; Μένεις σε αυτή και απλώς πας σε πιο γρήγορο μηχάνημα; Γράφεις κάποιο extension; Χρησιμοποιείς κάποια άλλη γλώσσα;

Άβαταρ μέλους
Kainourios
Ruby Moderator
Δημοσιεύσεις: 504
Εγγραφή: 18 Μάιος 2005 16:20
Τοποθεσία: Κορυδαλλός
Επικοινωνία:

Τεχνολογίες δημιουργίας web sites/applications

Δημοσίευση από Kainourios » 03 Μάιος 2010 13:39

dva_dev έγραψε:Επειδή η ruby δεν είναι και η πιο γρήγορη γλώσσα, όταν θέλεις να βελτιώσεις την απόδοση τι κάνεις; Μένεις σε αυτή και απλώς πας σε πιο γρήγορο μηχάνημα; Γράφεις κάποιο extension; Χρησιμοποιείς κάποια άλλη γλώσσα;
To θέμα με το scalability δεν έχει να κάνει με την ταχύτητα της γλώσσας, αλλά με την αρχιτεκτονική που έχεις ακολουθήσει για να αναπτύξεις μια web app και κατά πόσο η γλώσσα, σου επιτρέπει να προσαρμόζεις νέες αλλαγές στην αρχιτεκτονική της εφαρμογής σου.

Όπως είχε πει ο Blaine Cook (Twitter's Lead architect):
"The performance boosts associated with a 'faster' language would give us a 10-20% improvement, but thanks to architectural changes that ruby and rails happily accommodated, Twitter is 10.000% faster than it was in January."

Αν το twitter δηλαδή ακολουθούσε την ίδια σχεδίαση που είχε αρχικά και απλά άλλαζε τη γλώσσα σε .NET, πάλι θα είχανε scalability προβλήματα μετά από λίγο καιρό.

"A language may be slow or fast, but it's your architecture that is scalable or not" (από το βιβλίο Enterprise Rails).

Υπάρχουν πολλά που μπορείς να κάνεις για να βελτιώσεις το performance μιας web app και έχει να κάνει πιο πολύ με την αρχιτεκτονική της, δεν ισχύει δηλαδή το ίδιο για όλες. Π.χ. υπάρχουν αναλυτικά τι άλλαξε στην αρχιτεκτονική του το twitter και βελτίωσε την απόδοση του, αλλά αφορούν τις ανάγκες του twitter και της αρχιτεκτονικής του όπου εκεί χώλαινε.

Σαν γενικό κανόνα αυτό που κοιτάς είναι τι καθυστερεί ή τι μπορεί να καθυστερήσει την web app και ανάλογα το βελτιώνεις (αν μπορεί να βελτιωθεί προσθέτοντας απλά hardware τότε είναι όλα ωραία, αν όχι τότε κοιτάς πώς μπορείς να το αφαιρέσεις - αντικαταστήσεις).

Αλλά αυτά ισχύουν για enterprise websites, είναι overkill να αφαιρέσεις - αντικαταστήσεις πράγματα σε ένα απλό website, όταν μπορείς να κάνεις πολύ πιο απλά πραγματάκια για να βελτιώσεις το performance.

Άβαταρ μέλους
Maradonna
Δημοσιεύσεις: 135
Εγγραφή: 07 Ιουν 2007 03:19
Τοποθεσία: Αθήνα
Επικοινωνία:

Τεχνολογίες δημιουργίας web sites/applications

Δημοσίευση από Maradonna » 04 Μάιος 2010 03:14

Καταρχας,δεν αναφέρθηκα σε ταχύτητα εκτέλεσης σε σχέση με το σέρβερ κλπ.Η πρόταση σε νέα Ελληνικά παραπεπμει σε γρήγορο development δηλαδή στο πόσο γρήγορα μπορείς να αναπτύξεις μία εφαρμογή με δυνατότητες που σε άλλες γλώσσες θα έπαιρνε ΠΟΛΥ περισσότερο χρόνο.

Επίσης,για το θέμα που θέσατε συμφωνώ απόλυτα με τα όσα είπε ο kainourgios.
Είναι διαβασμένος ο φίλος :)
Αναφέρεται σε μία συνεύντευξη ενός προγραμματιστή στης ομάδας προγραμματιστικου τμήματος του twitter.com.

Εδώ όπως και ναχει το thread είναι σχετικό με το τί προτιμάμε.
Σίγουρα κάποιος που ασχολείται με ruby θα είναι προγραμματιστής με κάποια έστω μέση προγραμματιστικη εμπειρία οποτε θα έχει το δεμόνιο να ψάξει και να ανακαλύψει τρόπους βελτιστοποίησης για ζητήματα performance.
Δεν ανέφερα τυχαία τη ruby.Σίγουρα έχει μειονεκτήματα,έχει όμως και κάποια καινοτόμα πλεονεκτήματα.
Πάς στις official σελίδες,ψάχνεσαι και επιλέγεις.
Εικόνα
Code is poetry

Απάντηση

Επιστροφή στο “Γενικές ερωτήσεις κατασκευής ιστοσελίδων”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης