PHP ei ole oikea valinta reaaliaikaisiin sovelluksiin, joissa tarvitaan jatkuvaa yhteyttä palvelimen ja selaimen välillä. WebSocketit ja pitkäkestoiset yhteydet ovat mahdollisia PHP:llä, mutta muut kielet hoitavat ne paremmin.
PHP ei ole oikea valinta raskaaseen datankäsittelyyn tai koneoppimiseen. Python ja R ovat näihin parempia työkaluja, ja niillä on kypsemmät kirjastot.
PHP ei ole oikea valinta mobiilisovelluksiin. Vaikka PHP:tä voi käyttää backendinä, mobiilikehitys tapahtuu yleensä muilla kielillä.
PHP ei ole oikea valinta, jos projekti on pieni ja yksinkertainen. Staattinen verkkosivusto ei tarvitse PHP:tä. Se tarvitsee HTML:ää ja CSS:ää.
Tämä on ehkä yleisin yksittäinen pyyntö, jonka saamme. Joku on joskus rakentanut PHP-sovelluksen. Se on toiminut vuosia. Nyt se alkaa hajota, tai se pitäisi saada nykyaikaistettua, tai kukaan ei enää ymmärrä mitä se tekee.
Vanhan PHP-koodin kanssa työskentely on oma taitonsa. Se vaatii kärsivällisyyttä ja kykyä lukea koodia, joka ei noudata mitään nykyaikaisia käytäntöjä. Usein koodi on kirjoitettu PHP 5:llä, se käyttää toimintoja, jotka on poistettu käytöstä vuosia sitten, ja siinä ei ole minkäänlaista testikattavuutta.
Tyypillinen eteneminen on tällainen: ensin selvitetään mitä koodi tekee ja miten se on rakennettu. Sen jälkeen lisätään testit kriittisimmille osille. Sen jälkeen päivitetään PHP-versio ja riippuvuudet. Sen jälkeen aletaan vähitellen korvaamaan vanhentuneita osia nykyaikaisemmilla.
Tämä ei ole nopea prosessi. Mutta se on usein halvempaa kuin koko sovelluksen uudelleenkirjoittaminen.
Käytämme PHP 8.2:ta tai uudempaa. PHP 8.1 ja sitä vanhemmat versiot ovat saavuttaneet elinkaarensa pään eivätkä saa enää tietoturvapäivityksiä.
MySQL, PostgreSQL tai MariaDB. Valinta riippuu siitä, millaista dataa käsitellään ja miten sitä pitää hakea. PostgreSQL on monipuolisempi, MySQL on yleisempi.
Redis, RabbitMQ tai Amazon SQS. Jonot mahdollistavat pitkäkestoisten tehtävien siirtämisen taustalle, jolloin käyttäjä ei odota.
PHPStan tai Psalm. Nämä työkalut löytävät virheitä koodista ennen kuin ne päätyvät tuotantoon.
Ne ovat ne, joita käytämme eniten, koska ne toimivat hyvin yhteen.
Laravel tai Symfony. Valinta riippuu projektista. Laravel on nopeampi aloittaa ja sopii useimpiin projekteihin. Symfony on joustavampi ja sopii projekteihin, joissa on erityisvaatimuksia.
Redis tai Memcached. Redis on monipuolisempi ja tukee useampia tietorakenteita. Memcached on yksinkertaisempi ja nopeampi tietyissä käyttötapauksissa.
PHPUnit yksikkötesteille, Pest vaihtoehtoisena testauskehyksenä, Codeception hyväksymistesteille.
PHP-CS-Fixer tai Laravel Pint. Nämä työkalut pitävät koodin tyylin yhdenmukaisena.
Jokainen tietokantakysely tehdään erikseen silmukassa. Tämä on yleisin suorituskykyongelma, ja se on helppo korjata, kun se huomataan.
Sama data haetaan tietokannasta joka kerta, vaikka se ei muutu. Välimuistin lisääminen vähentää tietokannan kuormitusta merkittävästi.
Koko tietojoukko ladataan muistiin kerralla, vaikka se voitaisiin käsitellä paloina.
Tietokanta tekee täyden taulukkoläpikäynnin jokaisella kyselyllä. Indeksien lisääminen voi nopeuttaa kyselyitä kymmenkertaisesti.
Sähköpostin lähetys, tiedoston lataus, ulkoisen rajapinnan kutsu. Nämä kestävät sekunteja ja ne pitäisi siirtää taustalle.
Käyttäjän syöte liitetään suoraan SQL-kyselyyn. Ratkaisu on parametrisoidut kyselyt, jotka erottavat datan komennoista.
Hyökkääjä saa käyttäjän selaimen tekemään toiminnon, jota käyttäjä ei tarkoittanut. Ratkaisu on CSRF-token, joka varmistaa, että pyyntö tulee oikeasta paikasta.
Käyttäjän syöte tulostetaan sivulle ilman käsittelyä. Ratkaisu on syötteen escapetus, joka estää selaimen tulkitsemasta syötettä koodina.
Käyttäjä voi ladata palvelimelle tiedoston, joka sisältää haitallista koodia. Ratkaisu on tiedostotyyppien rajoittaminen ja ladattujen tiedostojen tallentaminen paikkaan, josta niitä ei voi suorittaa.
Aloitamme keskustelulla. Kerrot, mitä tarvitset ja mitä sinulla on jo. Tämä ei maksa mitään eikä sido sinua mihinkään.
Sen jälkeen teemme suunnitelman. Käymme läpi teknisen toteutuksen, aikataulun ja budjetin. Kerromme rehellisesti, jos jokin ei ole realistista tai jos jokin kannattaa tehdä eri tavalla kuin ajattelit.
Toteutus etenee vaiheittain. Jokaisen vaiheen jälkeen näet, mitä on tehty ja mitä seuraavaksi. Näin pysyt mukana koko ajan.
Kun työ on valmis, saat koodin ja dokumentaation itsellesi. Emme jää roikkumaan väliin.