Sejak beberapa tahun yang lalu saya berpeluang untuk bekerja pada beberapa projek yang menarik, bersifat kompleks dengan perkembangan yang berterusan, sentiasa menaik taraf, refactoring dan menambah ciri -ciri baru kepada mereka.
Contoh di bawah adalah dalam PHP, tetapi idea di sebalik setiap masalah adalah generik.
Akar masalah ini terletak pada pengetahuan dan pengalaman pemaju, terutama kekurangannya. Saya tidak cuba untuk menghancurkan sesiapa, saya tidak menganggap diri saya pemaju yang sempurna yang tahu segala -galanya, jadi beruang dengan saya.
Dalam pengalaman saya, kita dapat mengkategorikan masalah ini dalam tiga kumpulan utama: tahap reka bentuk, tahap permohonan dan pengawasan tahap pangkalan data. Kami akan memecahkan masing -masing secara berasingan.
Takeaways Key
PHP mempunyai banyak tahap pelaporan ralat, dan semuanya harus dihidupkan dalam fasa pembangunan.
Jika anda fikir kesilapan tidak akan pernah berlaku, anda sedang mengodkan senario yang ideal, yang hanya berlaku di dunia yang ideal.
pelaporan ralat dan memaparkan kesilapan itu tidak sama sama ada. error_reporting () Menetapkan tahap kesilapan (mis. Notis, amaran, kesilapan maut) dan paparan_rolors mengawal sama ada kesilapan ini akan dikeluarkan atau tidak.
pelaporan ralat harus selalu berada di tetapan tertinggi dalam pembangunan: error_reporting (e_all); dan INI_SET ('Display_errors', benar);
NOTA: E_ALL adalah yang tertinggi sejak Php 5.4, kerana kesilapan e_strict menjadi sebahagian daripada E_ALL dalam Php 5.4. Jika anda menggunakan versi PHP yang lebih lama daripada 5.4 Gunakan error_reporting (e_all | e_strict); untuk memasukkan amaran ralat yang ketat juga.
Menindas kesilapan menggunakan pengendali @ lebih buruk daripada tidak menghidupkannya sama sekali, kerana anda secara sedar menyapu kotoran di bawah permaidani. Anda tahu kesilapan itu berlaku, anda hanya mahu menyembunyikannya, menutup tugas dan pulang lebih awal. Apa yang anda tidak sedar ialah membina sesuatu di atas asas yang goyah akan mempunyai kesan yang lebih besar kemudian.
anda boleh membaca penjelasan yang mendalam mengenai perkara ini di sini.
Membangunkan projek harus berlaku dengan pembalakan dari awal. Anda tidak boleh bolt pada pembalakan pada akhirnya.
Kebanyakan pemaju menggunakan pembalakan satu cara atau yang lain, tetapi hampir tidak ada yang mengambil masa untuk benar -benar mengesahkan log tersebut untuk kesilapan. Apa gunanya pembalakan jika tiada siapa yang melihat log?
Cadangan PSR wujud untuk pembalakan, PSR-3 tepat, dan artikel yang sangat baik ini menerangkan cara melaksanakan pembalakan PSR-3.
caching boleh dilakukan dengan pelbagai cara pada pelbagai peringkat dalam aplikasi, seperti pada tahap pelayan, tahap aplikasi, tahap pangkalan data, dan lain -lain
Caching juga harus dilaksanakan dari awal. Anda sentiasa boleh melumpuhkannya dalam pembangunan, tetapi pastikan semuanya berfungsi sebaik sahaja ia ditolak ke persekitaran pengeluaran.
Pada tahap pelayan anda boleh menggunakan varnis, yang merupakan proksi HTTP terbalik, ia menyimpan fail dalam ingatan dan ia harus dipasang di hadapan pelayan web.
3 Untuk PHP 5.5 dan kemudian cache opcode telah disusun dalam teras yang dipanggil OPCACHE.Anda boleh membacanya secara mendalam dalam artikel ini: SitePoint PHP-Opcache yang tidak diingini.
Sebelum Php 5.5, anda boleh menggunakan APC, yang mempunyai fungsi cache pengguna juga.
Pada tahap aplikasi, anda boleh menggunakan APCU yang merupakan cache pengguna yang diekstrak dari APC, namun satu lagi cache yang mempunyai fungsi yang sama seperti APCU, atau Memcached yang merupakan sistem caching yang diedarkan dan ia mempunyai sokongan PHP yang kukuh. Memcached juga boleh digunakan untuk pertanyaan pangkalan data cache.
Terdapat beberapa teknik semasa melaksanakan caching dalam aplikasi. Amalan yang baik adalah untuk data cache yang tidak berubah dengan kerap, tetapi ditanyakan berulang kali.
Pangkalan Data Cache banyak pertanyaan, kerana pangkalan data selalu menjadi hambatan terbesar dalam setiap aplikasi PHP.
Mengabaikan amalan terbaik dan corak reka bentuk
Nah, saya tidak suka membawa berita buruk, tetapi 99% masa anda tidak tahu lebih baik.
Amalan terbaik dan corak reka bentuk ini difikirkan dan dicipta dengan alasan oleh jurutera perisian cara yang lebih bijak daripada anda dan saya, tugas tunggal pemaju adalah untuk memilih corak yang tepat untuk pekerjaan itu.
Terdapat banyak buku dan sumber mengenai subjek ini. Saya akan menyebut dua:
ujian menjalankan secara manual adalah proses yang meletihkan. Nasib baik, ada "alat
aplikasi untuk itu". Malah, terdapat banyak alat yang dapat membantu mengautomasikan ujian anda, amalan keseluruhan yang disebut integrasi berterusan.
Jika anda mendapati ini terlalu menggembirakan, maka sekurang -kurangnya menulis ujian unit untuk aplikasi anda menggunakan phpunit, behat atau phpspec. Ia mungkin kelihatan banyak kerja pada mulanya, tetapi terbukti banyak kali bahawa ujian membantu projek dalam jangka masa panjang.
tidak mengkaji / mengaudit kod
Bekerja dalam satu pasukan boleh mencabar, terutamanya jika setiap ahli pasukan digunakan untuk gaya pengaturcaraan yang berbeza, dan tanpa spesifikasi yang baik, projek boleh pergi ke sisi dengan cepat.
Perbezaan antara kajian dan audit adalah masa apabila anda memeriksa kod. Kajian biasanya berlaku sebelum sebarang kod digabungkan ke pangkalan kod dan audit selepas kod digabungkan.
Kajian
adalah perkara yang jauh lebih baik untuk dilakukan, kerana anda mempunyai peluang untuk bercakap tentang kod, mencadangkan penambahbaikan atau pembetulan sebelum ia digabungkan dengan kod ahli pasukan lain.Kelemahan ulasan adalah bahawa ia menyekat pembangunan, kerana sebelum setiap gabungan (selepas semua ujian hijau) sekurang -kurangnya dua pemaju perlu membincangkan kod itu, dan ini adalah di mana audit dimainkan.
Audit berlaku selepas gabungan, dan ia tidak menyekat, tetapi ia kurang kuat, kerana ia merindui peluang menangkap bug awal.Audit masih lebih baik daripada tidak memeriksa kod sama sekali.
Untuk membantu proses ini berjalan lancar, anda boleh menggunakan alat yang dipanggil Phabricator, yang dicipta khusus untuk tujuan ini oleh Jurutera Baik di Facebook. Ia menyokong kedua -dua strategi pemeriksaan kod.
pernah menemui diri anda dalam atau mendengar tentang kes -kes di mana beberapa kod yang tidak penting, boilerplate digabungkan dan semua neraka pecah? Saya pasti.
Kod harus ditulis dengan senario yang bertentangan dengan tepat, pemaju harus menulis kod untuk senario yang paling teruk yang mereka boleh fikir menandatangani dan mempunyai akses pentadbir penuh segera.
Dengan mengandaikan bahawa pelayan anda tidak akan digodam atau kod anda tidak akan pecah pada satu ketika dan pangkalan data anda akan sentiasa naik dan berjalan hanya salah. Kod pengeluaran harus meliputi senario dan kesilapan log ini dengan sewajarnya.
Dalam PHP, sangat mudah untuk melakukan kesilapan tanpa menyedarinya. Ini terutamanya kerana keputusan reka bentuk bahasa yang lemah yang dibuat pada masa lalu dan tidak diperbetulkan dalam masa.
PHP ingin memudahkan pemaju untuk tidak memikirkan keselamatan, pengekodan dan kes sudut, di mana sebenarnya pemaju harus sangat menyedari ini dan sentiasa mengamalkan pengaturcaraan pertahanan.
tidak menggunakan prinsip OOP dengan betul
Juga, OOP adalah lebih banyak daripada hanya kod prosedur yang dianjurkan dalam kelas.
Konsep objek, sifat, kaedah, warisan, enkapsulasi, dan lain -lain adalah sebahagian daripada OOP.
pemaju yang menggunakan prinsip-prinsip ini dengan betul mengetahui corak reka bentuk OO, prinsip pepejal (tanggungjawab tunggal, penggantian terbuka, penggantian liskov, pemisahan antara muka dan penyongsangan ketergantungan) dan cara menulis kod bersih secara umum, kod yang fleksibel, 'T mempunyai kebergantungan berkod keras dan mudah diperluas dan dibina.
Alejandro Gervasio merangkumi prinsip -prinsip ini dari atas ke bawah.
Tidak pernah terlambat untuk mengetahui tentang OOP dan mula menulis kod bersih yang tidak bergantung kepada kebergantungan keras (melihat anda, kerangka PHP).
pengekodan "on-the-fly"
"cepat, pelanggan memerlukan ciri ini dan berjalan ASAP." seperti dalam setiap industri lain, dalam pembangunan perisian juga, aliran kerja dan proses yang waras harus dilaksanakan agar projek berjaya. PHP dan bahasa dinamik secara umum menggalakkan perubahan pesat ke pangkalan kod, melihat hasil pengubahsuaian dengan serta -merta, tetapi perubahan ini harus dibatasi dalam persekitaran pengeluaran.
Jika anda tahu dengan pasti bahawa aplikasi web akan digunakan oleh banyak, seperti aplikasi perusahaan yang digunakan oleh beratus -ratus pekerja secara dalaman di dalam syarikat, anda boleh membuat langkah -langkah yang diperlukan untuk membolehkan penskalaan lebih mudah untuk projek itu.
Jika aplikasi anda tidak tahu pemisahan antara pertanyaan membaca dan menulis, ia tidak akan tahu tentang pelayan pangkalan data yang akan disambungkan. ingat ini jika anda tahu bahawa akhirnya anda perlu menyediakan skema replikasi tuan - hamba. hanya pengekodan untuk satu sambungan pangkalan data Ini sangat berkaitan dengan pengawasan di atas, tetapi kadang -kadang pemaju boleh mempunyai alasan lain untuk menyambung ke pelbagai pangkalan data. Sebagai contoh, jika anda menyimpan log pengguna, aliran aktiviti, analisis atau data lain di mana anda tahu operasi baca/tulis sering berlaku, adalah baik untuk melepaskan trafik ini ke pelayan pangkalan data yang berbeza. Pastikan anda menggunakan perpustakaan pangkalan data yang membolehkan anda menyambung ke beberapa pelayan pangkalan data dan mudah untuk beralih di antara mereka. Penyelesaian yang baik adalah untuk melaksanakan PDO dan menggunakan aura.sql yang memanjangkan pdo. Pengawasan ini berkaitan dengan pengawasan "pengekodan untuk senario ideal" di atas. Perkara yang sama, platform yang berbeza. Jika anda tidak menguji pangkalan data anda (dan permohonan anda) untuk mengeksploitasi, beberapa penggodam akan, dan dia boleh berjaya. pangkalan data terdedah kepada pelbagai eksploitasi, yang paling biasa adalah serangan suntikan SQL. Gunakan lembaran cheat ini dan jalankan pertanyaan melalui perpustakaan akses pangkalan data aplikasi anda. Tulis pernyataan ini dalam medan di hadapan anda seperti nama pengguna, medan kata laluan pada halaman pendaftaran. Jika tidak ada pertanyaan, anda boleh membeli sendiri bir dan meraikan. adalah seperti TOC jadual, ia adalah rangsangan prestasi dan harus ditambah ke setiap jadual, ke lajur yang mana pertanyaan dilakukan (mis. Lajur selepas klausa WHERE). Terdapat teori keseluruhan di sebalik indeks pangkalan data, apabila membuatnya, di mana lajur dan apa yang perlu ditutup. Siri artikel berasingan ditulis mengenai perkara itu. Integriti data sangat penting untuk aplikasi web. Keseluruhan laman web boleh pecah jika data dikendalikan dengan tidak betul. anda menggunakan urus niaga untuk data berkaitan yang dikendalikan bersama, sama ada berterusan atau dipadam bersama.
Jadual 1 berjaya, tetapi gagal pada Jadual 2 , data profil untuk pengguna akan kekal dalam pangkalan data dan lebih buruk ia tidak akan disambungkan ke apa sahaja, ia akan menjadi yatim piatu.
Namun, ada, mungkin, beribu -ribu pangkalan data di luar sana di mana data sensitif disimpan tidak disenarai untuk dicuri oleh penggodam. PHP 5.5 telah menambah fungsi hashing yang kuat hanya untuk ini, hanya memanggilnya Hashing Kata Laluan. Ia sangat mudah digunakan - anda membuat hash dari kata laluan teks biasa dengan kaedah ini: Nota: Tidak perlu garam kata laluan ini, kerana ia telah ditangani untuk anda. simpan $ hash dalam pangkalan data, maka anda mengesahkan hash dengan kaedah ini: NOTA: Jika anda tidak mempunyai Php 5.5 (anda benar -benar harus sekarang), anda boleh menggunakan perpustakaan password_compat, yang melaksanakan kaedah yang sama.
Mengendalikan data kewangan adalah lebih rumit, kerana anda perlu mempunyai pematuhan PCI pada tahap pelayan, aplikasi dan pangkalan data. Artikel yang lebih mendalam telah ditulis mengenai subjek di sini: pematuhan PHP-PCI SitePoint dan pemaju PHP. Pengawasan Reka Bentuk Aplikasi Sebagai contoh, bekerja pada ciri baru atau menetapkan bug dan ftping fail secara langsung di laman web langsung. Ini salah pada tahap yang begitu banyak. Terdapat bilangan aliran kerja yang tidak terhingga yang dapat dicipta oleh pasukan, tetapi yang klasik untuk pembangunan web adalah menggunakan sekurang -kurangnya tiga persekitaran: pembangunan, pementasan dan pengeluaran. Persekitaran pembangunan boleh menjadi setempat bagi setiap pengaturcara, pementasan dan pengeluaran biasanya jauh dan berkongsi beberapa bahagian di antara mereka. Pembangunan adalah untuk pengekodan, pementasan adalah untuk ujian dan akhirnya pengeluaran adalah untuk kegunaan. Pengawasan berlaku apabila persekitaran ini tidak ditubuhkan dengan cara yang sama. Contohnya setiap pemaju yang menjalankan versi PHP yang berbeza, atau konfigurasi pementasan berbeza daripada pengeluaran. Tebak apa yang berlaku? Anda betul. Segala -galanya akan bekerja dalam pembangunan dan bahkan dalam pementasan, dan apabila anda menolaknya ke pelayan pengeluaran semua neraka pecah longgar mengakibatkan malam yang panjang dan banyak kafein. tidak hairanlah frasa yang paling biasa dalam kalangan pembangunan adalah:
Jadi apa penyelesaiannya? Pastikan semuanya disediakan dengan cara yang sama di setiap persekitaran. Sistem pengendalian harus sama, PHP, pangkalan data, pelayan web, semua harus mempunyai versi yang sama di seluruh persekitaran. Sejak penciptaan Vagrant, Docker dan Virtualbox, sangat mudah sekarang untuk mewujudkan persekitaran yang sama dengan konfigurasi tepat yang sama pada setiap satu. Sekiranya anda tidak menggunakan alat ini sebelum ini, anda harus menghentikan apa sahaja yang anda lakukan dan mula menggunakannya dengan segera. tiada sandaran Segala -galanya berjalan lancar, laman web ini hidup, dilancarkan tepat pada waktunya, semuanya berjalan dan berjalan, pengguna menggunakan data yang indah. Nom, nom, nom ... sehingga anda menerima e-mel pada pukul 3 pagi. Backup, seperti pembalakan, caching, keselamatan dan pengaturcaraan pertahanan harus menjadi bahagian penting ketika membangunkan aplikasi web, tetapi kebanyakan pemaju (atau sysadmins) lupa untuk melakukan ini. Backup harus automatik juga, atau jika itu tidak mungkin, sekurang -kurangnya sandaran manual mingguan harus dilakukan. Sebarang sandaran lebih baik daripada tiada sandaran. Simpan asas kod anda dalam kawalan versi dan gunakan sistem kawalan versi yang diedarkan seperti Git atau Mercurial. Persediaan ini menjadikan pangkalan kod sangat berlebihan, kerana setiap pemaju yang bekerja pada projek itu mempunyai versi pangkalan kod. Begitu juga, simpan asas kod pada github atau bitbucket, mereka mempunyai sandaran. Menyandarkan pangkalan data adalah lebih penting, kerana ia pengguna yang dibuat kandungan. Sentiasa menyimpan data sebenar dan sandaran di tempat yang berbeza. tidak menyokong data boleh merosakkan perniagaan, dan ia akan melakukannya - lihat kes terkenal Ma.gnolia, salah satu laman web penanda buku sosial yang lebih baik pada hari itu. Berwayar mempunyai cerita sampul mengenai keseluruhan bencana. "Segala -galanya luar biasa dan tidak ada yang gembira." - Louis C.K.
Pembangunan web adalah proses yang kompleks dan mudah untuk mengabaikan aspek tertentu. Sesetengah pengawasan yang sama termasuk tidak mengoptimumkan untuk peranti mudah alih, mengabaikan SEO, mengabaikan kelajuan dan prestasi laman web, tidak menubuhkan persekitaran pembangunan yang betul, dan tidak mempertimbangkan keserasian silang pelayar. Kelebihan ini boleh membawa kepada pengalaman pengguna yang lemah dan boleh memberi kesan negatif terhadap prestasi laman web dan kedudukan pada enjin carian. Apakah kepentingan pengoptimuman mudah alih dalam pembangunan web? Pembangunan semakin banyak pengguna mengakses laman web dari peranti mudah alih mereka. Sebuah laman web yang tidak dioptimumkan untuk mudah alih boleh membawa kepada pengalaman pengguna yang lemah, yang boleh mengakibatkan penglibatan dan kadar penukaran yang lebih rendah. Pengoptimuman mudah alih melibatkan merancang laman web untuk menjadi responsif, yang bermaksud ia menyesuaikan agar sesuai dengan saiz skrin yang berbeza, dan memastikan ia memuat dengan cepat pada peranti mudah alih. Meningkatkan SEO laman web anda melibatkan beberapa langkah. Pertama, pastikan laman web anda mudah dijangkakan oleh enjin carian. Ini melibatkan menggunakan tag HTML yang betul, mewujudkan sitemap, dan menggunakan fail robots.txt. Seterusnya, mengoptimumkan kandungan anda dengan menggunakan kata kunci yang relevan, mewujudkan kandungan berkualiti tinggi, dan menggunakan tag meta. Juga, pertimbangkan untuk menggunakan markup skema untuk memberikan lebih banyak maklumat kepada enjin carian. Apakah peranan sistem kawalan versi dalam pembangunan web? Sistem kawalan versi seperti Git membolehkan anda mengesan perubahan pada kod anda, menjadikannya lebih mudah untuk bekerjasama dengan orang lain dan kembali ke versi sebelumnya kod anda jika perlu. Ini alat penting untuk pembangunan web moden.
tidak membezakan antara pertanyaan baca / tulis
Untuk menyokong projek kompleks yang panjang, skala perlu berada di belakang setiap minda pemaju. 99% masa aplikasi web tidak perlu skala, kerana ia tidak akan mencapai trafik semacam itu.
tidak menguji pertanyaan untuk mengeksploitasi
tidak menambah indeks ke jadual
Indeks tidak menggunakan Transaksi
Menyimpan kata laluan dalam teks biasa, atau melancarkan algoritma penyulitan anda sendiri pada tahun 2014 tidak dapat diterima. Komuniti PHP sudah cukup matang untuk mengetahui lebih baik sekarang.
$hash = password_hash( $password, PASSWORD_BCRYPT );
if ( password_verify( $password, $hash ) ) { ... }
tidak membezakan antara persekitaran pembangunan
Saya melihat banyak pemaju dan juga pasukan kecil yang menubuhkan persekitaran pembangunan yang buruk untuk diri mereka sendiri.
tiada pemantauan
Adakah seseorang mengakses pelayan aplikasi utama?
Adalah penting untuk mengetahui jawapan kepada soalan-soalan ini pada bila-bila masa, dan dengan pemantauan masa nyata, anda akan. Untuk membuat ini berlaku, alat seperti Nagios atau New Relic harus menjadi sebahagian daripada infrastruktur aplikasi anda.
Kesimpulan
Gunakan pengetahuan ini untuk menjadi pengaturcara yang lebih baik. Ingatlah pengawasan ini dan cuba untuk tidak melakukan mereka. Permohonan dan pengawasan peringkat pangkalan data adalah yang paling penting untuk diingati.
Di bawah ini anda akan menemui senarai semak semua pengawasan yang terdapat dalam artikel ini. Lihat berapa banyak yang boleh anda lalui sekarang dan sentiasa berusaha menyeberang semuanya.
Soalan Lazim (Soalan Lazim) Mengenai Kelebihan Pembangunan Web
Apakah beberapa kelebihan biasa dalam pembangunan web?
Bagaimana saya boleh menyediakan persekitaran pembangunan web moden? Persekitaran pembangunan melibatkan beberapa langkah. Pertama, anda perlu memasang editor teks yang baik seperti Kod Visual Studio atau Teks Sublime. Seterusnya, pasang Node.js dan NPM, yang penting untuk pembangunan JavaScript moden. Anda juga harus menyediakan sistem kawalan versi seperti Git. Akhirnya, pertimbangkan untuk menggunakan pengurus pakej seperti benang atau npm, dan pelari tugas seperti gulp atau webpack.
Bagaimana saya dapat memperbaiki SEO laman web saya?
Mengapa kelajuan laman web dan prestasi penting? Laman web lambat boleh menggagalkan pengguna dan membawa kepada kadar lantunan yang lebih tinggi. Di samping itu, enjin carian seperti Google mempertimbangkan kelajuan laman web sebagai faktor ranking. Anda boleh meningkatkan kelajuan dan prestasi laman web anda dengan mengoptimumkan imej, meminimumkan fail CSS dan JavaScript, dan menggunakan rangkaian penghantaran kandungan (CDN). 🎜> Keserasian silang pelayar bermakna laman web anda berfungsi dengan betul dan kelihatan konsisten merentasi pelayar web yang berbeza. Ia penting kerana pengguna anda mungkin menggunakan pelayar yang berbeza, dan laman web yang tidak berfungsi dengan betul pada pelayar tertentu boleh membawa kepada pengalaman pengguna yang lemah. Anda boleh memastikan keserasian silang pelayar dengan menggunakan kod patuh piawaian dan menguji laman web anda pada pelayar yang berbeza. dan ujian. Pastikan untuk mengoptimumkan laman web anda untuk mudah alih dan SEO, sediakan persekitaran pembangunan yang betul, dan pertimbangkan keserasian silang penyemak imbas. Secara kerap menguji laman web anda pada peranti dan penyemak imbas yang berbeza, dan gunakan alat seperti Google Lighthouse untuk menyemak prestasi laman web anda dan SEO.
Apakah pengurus pakej dan mengapa penting dalam pembangunan web? , yang boleh digunakan semula kod. Adalah penting dalam pembangunan web kerana ia memudahkan untuk menguruskan kebergantungan dan memastikan projek anda mempunyai versi yang betul dari pakej yang diperlukan.
Pelari tugas seperti Gulp atau Webpack mengautomasikan tugas berulang seperti minifikasi, penyusunan, ujian unit, dan linting. Ia penting dalam pembangunan web kerana ia dapat menjimatkan masa anda dan membantu anda mengekalkan asas kod yang konsisten.
Atas ialah kandungan terperinci 18 Kelebihan Kritikal dalam Pembangunan Web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!