Δωρεάν μεταγλωττιστές PHP. Πλήρη στατιστικά στοιχεία μνήμης

Η PHP είναι μια ερμηνευμένη γλώσσα προγραμματισμού, κάθε αίτημα αναλύεται και «εκτελείται» πηγαίος κώδικας. Αυτή η προσέγγιση, φυσικά, είναι πολύ βολική στο στάδιο ανάπτυξης του έργου, αλλά εισάγει ένα επιπλέον βήμα στη διαδικασία εκτέλεσης του κώδικα παραγωγής. Έτσι η ερμηνεία, με την πρώτη ματιά δυνατό σημείοΗ PHP κοστίζει επιπλέον χρόνο και πόρους CPU.

Παρακάτω θα μιλήσουμε για μεταγλωττιστές που σας επιτρέπουν να κάνετε μεταγλώττιση κώδικα phpσε C++, και στο εκτελέσιμο. Ετσι Εφαρμογές PHPεκτελείται απευθείας από τον επεξεργαστή, παρακάμπτοντας τον διερμηνέα.

Ας ελέγξουμε αν όλα είναι τόσο καλά στην πράξη.

Πώς λειτουργεί ο διερμηνέας

Η ερμηνεία του κώδικα PHP πραγματοποιείται σε δύο στάδια:

  1. Ανάλυση κώδικα και δημιουργία κωδικών λειτουργίας (Zend opcodes) - οδηγίες κατανοητές από τον διερμηνέα.
  2. Εκτέλεση opcodes.

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

Για να απαλλαγούμε από τη σύνδεση διερμηνέα, εφευρέθηκαν μεταγλωττιστές, το πιο δημοφιλές και πρόσφατο από τα οποία είναι το HipHop από το Facebook. Ας το νιώσουμε πιο κοντά.

HipHop PHP

Το HipHop έχει γραφτεί από προγραμματιστές του Facebook και είναι μια εφαρμογή που:
  1. βελτιστοποιεί τον κώδικα PHP
  2. μετατρέπεται σε C++
  3. δημιουργεί από την εφαρμογή σας έναν διακομιστή web πολλαπλών νημάτων που τον εκτελεί
  4. μεταγλωττίζεται σε εκτελέσιμο κώδικα χρησιμοποιώντας g++

Έτσι και μετά Είσοδος PHPκώδικα, η έξοδος είναι ένας διακομιστής, μέρος του οποίου είναι η γραπτή λειτουργικότητα.

Ας ελέγξουμε πώς το HipHop μπορεί να χειριστεί τη μεταγλώττιση μιας εφαρμογής γραμμένης χρησιμοποιώντας ένα πλαίσιο, όπως το Wordpress.

Σύνταξη Wordpress

Μετά την εγκατάσταση του HipHop, στον φάκελο src/hphp/ θα πάρουμε το αρχείο hphp, που είναι ο μεταγλωττιστής. Πριν ξεκινήσει η μεταγλώττιση, ορίστε τις μεταβλητές περιβάλλοντος:

Cd .. # μεταβείτε στο φάκελο με εξαγωγή hiphop HPHP_HOME=`pwd` εξαγωγή HPHP_LIB=`pwd`/bin εξαγωγή CMAKE_PREFIX_PATH=`/bin/pwd`/../

και προχώρα!

Κατεβάστε το Wordpress και αποσυμπιέστε το αρχείο:

Wget http://wordpress.org/latest.tar.gz tar zxvf latest.tar.gz

Αντιγράψτε το wp-config-sample.php στο wp-config.php και καθορίστε τις ρυθμίσεις για τη σύνδεση στη βάση δεδομένων (στις ρυθμίσεις κεντρικού υπολογιστή καθορίζουμε 127.0.0.1, όχι localhost).

Για επιτυχημένη μεταγλώττιση θα πρέπει να ενημερώσετε λίγο το Wordpress:

  1. Ανοίξτε το wp-includes/js/tinymce/plugins/spellchecker/classes/SpellChecker.php και αντικαταστήστε: τη συνάρτηση &loopback(/* args.. */) ( return func_get_args(); ) με τη συνάρτηση &loopback(/* args.. */ ) ( $ret = func_get_args(); επιστροφή $ret; )
  2. Στο wp-includes/query.php, αντί για if (!isset($q["suppress_filters"])) $q["suppress_filters"] = false; εισαγάγετε $q["suppress_filters"] = true;

Το Wordpress είναι έτοιμο.

Το Hiphop πρέπει να καθορίσει τη λίστα των αρχείων που θα μεταγλωττίσουμε - θα τη λάβουμε και θα την αποθηκεύσουμε στο files.list:

Εύρημα. -όνομα "*.php" > files.list

Όλα είναι έτοιμα για μεταγλώττιση, ας προχωρήσουμε:

$HPHP_HOME/src/hphp/hphp --input-list=files.list -k 1 --log=3 --force=1 --cluster-count=50

Αφού ολοκληρώσετε την εντολή, προσωρινό φάκελο(στην αρχή της μεταγλώττισης, ο hphp θα δείξει τη διαδρομή του, κάτι σαν "/tmp/hphp_ptRgV1"), παίρνουμε έναν μεταγλωττισμένο διακομιστή ιστού. Ας το εκκινήσουμε (εάν κάτι κρέμεται στη θύρα 80, για παράδειγμα apache ή nginx, πρέπει πρώτα να το σταματήσετε για να ελευθερώσετε τη θύρα):

Sudo /tmp/hphp_6s0pzd/program -m διακομιστή -v "Server.SourceRoot=`pwd`" -v "Server.DefaultDocument=index.php" -c $HPHP_HOME/bin/mime.hdf

Voila! Πηγαίνοντας στο http://localost θα δούμε ένα λειτουργικό ιστολόγιο Wordpress.

Εκτέλεση

Ας δούμε αν θα υπάρξει αύξηση της απόδοσης σε σύγκριση με την μη μεταγλωττισμένη έκδοση του WordPress που εκτελείται σε apache2. Ακολουθούν γραφήματα της εξάρτησης της ταχύτητας δημιουργίας σελίδας από τον αριθμό των παράλληλων χρηστών.

Όπως μπορείτε να δείτε, τα αποτελέσματα ήταν συγκλονιστικά: το μεταγλωττισμένο ιστολόγιο τρέχει κατά μέσο όρο 6 φορές πιο γρήγορα! Ο μέσος αριθμός αιτημάτων που υποβάλλονται σε επεξεργασία ανά δευτερόλεπτο στην μη μεταγλωττισμένη έκδοση είναι 9 και στην μεταγλωττισμένη έκδοση είναι 50! Δεν ξέρω για εσάς, αλλά αυτά τα αποτελέσματα με εξέπληξαν· δεν περίμενα τόσο ισχυρή αύξηση απόδοσης.

Συνοψίζω

Μετά από τέτοια εκπληκτικά αποτελέσματα, μόνο ένα πράγμα μπορεί να ειπωθεί - τα παιδιά από το Facebook έκαναν εξαιρετική δουλειά. Ο μεταγλωττιστής κάνει πραγματικά έναν πύραυλο από μια εφαρμογή, και παρόλο που η εφαρμογή πρέπει να προετοιμαστεί πριν από τη μεταγλώττιση, το αποτέλεσμα αξίζει τον κόπο.

Μέχρι κάποιο σημείο:

Αν σας άρεσε η ανάρτηση, κάντε κλικ στο Google +1 - θα μου δώσει περισσότερο κίνητρο να γράψω και θα είναι απλώς μια χαρά.

Σχεδόν όλοι οι προγραμματιστές αργά ή γρήγορα αντιμετωπίζουν την ανάγκη να εκτελέσουν ή να ελέγξουν γρήγορα κάποιο κώδικα, αλλά δεν γνωρίζουν όλοι ότι για μια τόσο απλή εργασία δεν είναι καθόλου απαραίτητο να εκτελούνται βαριά IDE επιφάνειας εργασίας ή μεταγλωττιστές εφαρμογών. Αρκεί να χρησιμοποιήσετε ηλεκτρονικά εργαλεία που σας επιτρέπουν να κάνετε τα πάντα πολύ πιο γρήγορα: Ctrl+C, Ctrl+V, Run, whack - και η έξοδος του προγράμματος είναι ήδη μπροστά στα κοκκινωπά μάτια σας.

Επιλέξαμε τους καλύτερους διαδικτυακούς μεταγλωττιστές: μερικοί από αυτούς είναι αρκετά καθολικοί, άλλοι είναι προσαρμοσμένοι για αυστηρά καθορισμένες εργασίες. Σε κάθε περίπτωση, δεν θα είναι περιττά.

Koding

Το Koding.com δεν είναι ένας διαδικτυακός μεταγλωττιστής με την παραδοσιακή έννοια. Κάθε χρήστης υπηρεσίας μπορεί να δημιουργήσει πολλές πλήρεις υπηρεσίες εικονικές μηχανέςκάτω από Διαχείριση Ubuntu 14.04, στο οποίο μπορεί να κάνει ό,τι θέλει, συμπεριλαμβανομένης της μεταγλώττισης του κώδικα. Ολα δημοφιλείς γλώσσεςυποστηρίζονται από προεπιλογή, αλλά μπορείτε εύκολα να προσθέσετε το δικό σας.

Εκτός από τον πίνακα ελέγχου για τον διακομιστή σας, ένα βολικό IDE και ένα παράθυρο τερματικού είναι διαθέσιμα στη διεπαφή. Το Koding είναι το πιο καθολική θεραπεία, τότε θα εξετάσουμε απλούστερες και πιο εξειδικευμένες επιλογές.

IdeaOne

Το IdeOne είναι ένα διαδικτυακό εργαλείο μεταγλώττισης και εντοπισμού σφαλμάτων που σας επιτρέπει να εκτελείτε κώδικα σε περισσότερες από 60 γλώσσες προγραμματισμού και τις συγκεκριμένες εκδόσεις τους απευθείας στο πρόγραμμα περιήγησης.

Για όσους δεν έχουν κοπέλα, οι δημιουργοί έχουν παράσχει συλλογή κώδικα στη γλώσσα Brainfuck.

JDoodle

Ένας άλλος διαδικτυακός μεταγλωττιστής που υποστηρίζει πολλές γλώσσες, συμπεριλαμβανομένων ορισμένων που δεν θα βρείτε σε πολλούς άλλους διαδικτυακούς μεταγλωττιστές. Ωραίο χαρακτηριστικόΤο JDoodle είναι μια πιθανότητα συνεργασία- απλώς στείλτε έναν σύνδεσμο στην τρέχουσα συνεδρία σας και δημιουργήστε σφάλματα με διπλή ταχύτητα!

jsFiddle

Μην αφήσετε το όνομα να σας ξεγελάσει - το jsFiddle δεν έχει δημιουργηθεί μόνο για JavaScript. Αυτός ο διαδικτυακός επεξεργαστής front-end σάς επιτρέπει να δοκιμάσετε οποιονδήποτε συνδυασμό JavaScript, HTML και CSS. Φυσικά, υπάρχει υποστήριξη για διάφορα πλαίσια, για παράδειγμα, jQuery, Vue, React, TypeScript, καθώς και προεπεξεργαστές CSS όπως το SCSS. Για ευκολία, μπορείτε να επιλέξετε ένα δέσιμο κλειδιού από τον αγαπημένο σας επεξεργαστή. Είναι αλήθεια, μόνο αν ο αγαπημένος σας επεξεργαστής είναι το Vim, το Emacs ή το Sublime Text.

CodePad

Το CodePad είναι μια μινιμαλιστική υπηρεσία στην οποία μπορείτε να αποθηκεύσετε κώδικα, να τον μοιραστείτε και να τον εκτελέσετε με επακόλουθη έξοδο των αποτελεσμάτων της εκτέλεσής του. Υπάρχουν πολλές πιο κοινές γλώσσες για να διαλέξετε, αλλά δυστυχώς δεν υπάρχει επιλογή συγκεκριμένες εκδόσειςδιερμηνείς ή μεταγλωττιστές.

Το κύριο πλεονέκτημά του είναι η απλότητα και η ευκολία: ο ιστότοπος θα λειτουργήσει γρήγορα ακόμη και με αργό ίντερνετ. Παρέχεται αυτόματη σύνδεση τυπικών κεφαλίδων, καθώς και ενσωμάτωση με Vim ή Emacs.

Μεταξύ των μειονεκτημάτων μπορούμε να αναφέρουμε πλήρης απουσίαεπισήμανση σύνταξης κατά την εισαγωγή κώδικα στη φόρμα. Ωστόσο, κατά την προβολή μιας ήδη αποθηκευμένης εγγραφής, υπάρχει ο οπίσθιος φωτισμός.

GCC GodBolt

Το GCC GodBolt είναι ένας διαδραστικός μεταγλωττιστής C++. Μπήκα σε αυτή τη συλλογή για το λόγο ότι έχει απλή διεπαφή, καθώς και ένας μεγάλος αριθμός απόρυθμίσεις, συμπεριλαμβανομένων επιλογών που μπορούν να προσαρμοστούν χρησιμοποιώντας πλήκτρα.

Υπάρχουν πολλές εκδόσεις μεταγλωττιστή για να διαλέξετε, συμπεριλαμβανομένων των πιο πρόσφατων. Από ενδιαφέροντα χαρακτηριστικάΜπορείτε να σημειώσετε την άμεση μετάφραση του κώδικα του προγράμματος στη γλώσσα assembly.



Έχετε ερωτήσεις;

Αναφέρετε ένα τυπογραφικό λάθος

Κείμενο που θα σταλεί στους συντάκτες μας: