• Off-topic
  • Programmare in PHP nel 2021 ha senso o no?

Questo topic è nato da una mia affermazioni sul topic https://forum.fibra.click/d/20397-graficare-i-dati-degli-speedtest/20 in qui @[cancellato] aveva chiesto maggiori informazioni.

Premessa: qua ci riferiamo alla programmazione mista HTML+PHP senza nessun sistema di MVC, REST, framework e tante altre cose che si possono fare in PHP, ma che non sono standard e che sono solamente "evoluzioni" per poter continuare ad usare PHP nel 2021, e senza di essi PHP sarebbe già stato abbandonato.

Innanzitutto, faccio una premessa sul sottoscritto: sono un Junior Full Stack Developer (e pure anche intenzionato a fare altre robe nella vita), conosco PHP da 10 anni (è stato il primo linguaggio su cui ho programmato), gli altri linguaggi li ho conosciuti negli anni successivi (C, C++, C#, Java, JavaScript e Kotlin) ma in realtà ho imparato a programmare con questi ultimi in quanto su PHP a livello di programmazione facevo principalmente if e switch per fare pagine "semi" dinamiche, esempi del tipo che in base all’url viene caricata una pagina o cose di login e registrazione, piccole chat realizzate con pooling e piccoli siti di blogging e la cosa più grossa che ho fatto è una applicazione di eventi, dove per forza il backend è stato fatto in PHP in quanto progetto scolastico. PHP nella mia vita lo ho ripreso in mano durante l'ultimo anno delle superiori a fare qualche piccola applicazione nel modo "legacy", e all'università nel corso di Basi di Dati e un corso internazionale sulla sicurezza Web. Nella vita lavorativa invece ho usato PHP solamente su cose già fatte: Wordpress, software di forum ecc ecc e sempre nella modalità legacy (è comunque un comparto lavorativo sottopagato e sinceramente cambierò).

Per Legacy intendo la modalità fatta di un miscuglio tra codice HTML e PHP, tipico delle prime applicazioni web degli anni 2000-2010, ma ormai ancora molto diffuse, aggiungo una nota che tutte le applicazioni di banche o grandi applicazioni web non sono mai state fatte in PHP per i motivi che dirò in seguito¹. Legacy anche perché non vengono utilizzati i comuni sistemi CI/CD ma semplicemente un caricamento via FTP o simili (in realtà si può usare Heroku e fare un PHP legacy CI/CD). Non è da confondere con la modalità con framework come Laravel che fa in modo di lavorare come fosse un ambiente più simile a quelli esistenti come Node.js, e simili, ma che non analizzerò per due motivi: la percentuale d'uso di queste tecnologie è bassa.

Iniziamo con il primo problema: la modalità classica di PHP (legacy), quella didattica non fa distinzione tra richieste GET e POST, permette neanche una buona gestione degli Header, ha grossi problemi per esempio non fa distinzioni tra multipart/form-data e application/x-www-form-urlencoded permettendo di fare un File Injection sul server: cioè una vulnerabilità così grave che permette di caricare file sul server ma il sistema PHP poi non li elimina (in realtà non è proprio così in quanto essendo salvati su una dir temporanea i file vengono elimintai), questi file potrebbero essere file PHP eseguibili dall’interprete PHP stesso! Infine, non permette di elaborare i dati post in formato json.² PHP effettua un parsing automatico dell'input in base se è application/x-www-form-urlencoded o multipart/form-data e se lavoriamo con json dobbiamo usare json_decode(file_get_contents('php://input'), true), perdendo comunque la funzionalità del vettore $_POST

In modalità legacy supponiamo di avere vari file, uno di nome conn.php: il routing³ permette di accedere al file conn.php senza grossi problemi (l’ennesimo problema di sicurezza), inoltre si ha per esempio user.php, login.php: è possibile che uno di questi file ci ha una versione non aggiornata di qualche controllo rendendo pericolosa la sicurezza. Infine la visione dell’estensione del file (.php) permette di capire tante robe sul tipo di scripting.

PHP legacy di default mette come output il mime-type dell’html, qualsiasi altro mime-type deve essere specificato⁴, PHP legacy ha pochi controlli su user agent, cookie, e tantissimi header che vengono comunemente usati da anche Laravel in PHP.

Con l’avvento dello scripting lato utente⁵ è diventato necessario poter comunicare con il server attraverso API (siti come YouTube usano l’HTML5 rewrite history e caricano i dati in maniera asincrona da API esterne e poi reindirizzate con Javascript), questo richiede normalmente un invio di messaggi di tipo json o xml, ma PHP legacy non è stato progettato per questo tipo di comunicazioni (il principale problema che ho riscontrato nell’usare Json in PHP è quello che basta uno spazio all’inizio o alla fine ed il Json non è più valido), spesso è necessario avere funzionamenti diversi a seconda di GET o POST. Proprio per questo numerose applicazioni, come immagino quelle Telecom, ma pure applicazioni bancarie, governative usavano principalmente Java Servlet, Java Server Page e tecnologie simile: esse permettevano una gestione migliore delle API secondo il paradigma REST. Ora nel 2021 Usare Java Servlet senza un sistema di CI/CD è un suicidio (e lo posso confermare personalmente: un mio progetto di pochi anni fa non riesco a farlo girare perché non trova le dipendenze né ho più i file jar delle dipendenze).

Quando è nato PHP 7.0 (la versione 6.0 non esiste) ci sono stati numerosi problemi di retro-compatibilità con la versione 5.0, numerose deprecazioni e tanti cambiamenti (in stile Python 2.X e Python 3.X). PHP 5.0 era molto insicuro e pieno di bachi, ma almeno era veloce, PHP 7.0 ha rallentato tanto l’esecuzione di PHP⁶ rendendolo di fatto scartato da tutti gli sviluppatori: chi me lo fa fare di aggiornare al 7 quando è più lento e devo modificare gran parte del codice. Dato che nessuno passava al 7 gli sviluppatori di PHP hanno iniziato a deprecate nelle versioni 5.X numerose API (la più celebre è mysql senza la i finale, che non ho mai capito perché i e non e…).
In un qualsiasi form si ha che i dati vengono digitati dall’utente -> inviati al server -> il server li elabora -> li salva nel database. In maniera simile vengono caricati per una eventuale modifica e per visualizzazioni: ci sono tanti passaggi, in form grandi ci hanno centinaia di righe di codice per ogni singolo componente. Se si usa una tecnologia Ajax tramite jQuery il numero di righe sale ancora, perché dopo averli caricati li devi riscaricare, se usi popup aggiornare ciò che c’è dietro. Negli anni scorsi sono nati framework come Angular, React, Vue, … che permettono di gestire la UI in modalità nuova che genera il DOM e non lo manipola⁷, attraverso una idea di MVC, la nascita di Node.js, Flask, … che permettono di fare API RESTful e tante altre cose hanno fatto si che il PHP legacy è iniziato a cadere in disuso. L’uso di Javascript pure lato server ha dei vantaggi sull’utilizzo di un linguaggio solo ed una minore formazione negli ultimi anni dove spesso per entrare a lavorare devi avere certificati e cose simili (cosa che hai iniziato a diffondersi nelle reti 15 anni fa’ grazie a Cisco, nel CGI/montaggio video 7 anni fa’ ed ora a tutta l’informatica: è assurdo che in certi contesti un corso udemi valga più di una laurea).

L’uso di API REST in Json o Xml, permette inoltre di usare un unico endpoint sia per siti web che per applicazioni mobili, e anche di più poter mescolare view html e view native su applicazioni mobili (ricordo: meno codice duplicato meglio è).
Non metto in dubbio che un programmatore PHP trovi lavoro per i prossimi 20 anni, non metto in dubbio che continueranno ad esistere applicazioni PHP legacy, ma il numero sta lentamente diminuendo in favore di una soluzione almeno come minimo REST (per esempio Laravel), c’è da dire che a differenza di altri portali PHP ha una buona community, aggiungo che mentre in PHP per deployare è necessario usare una delle due strade:

  • Mettere i file nella cartella var/www dentro etc (o su Windows dentro htdocs di xampp) ed usare un server condiviso
  • Se invece vuoi fare un built-in devi perdere tempo in configurazioni di apache o nginx, fmp, php, sia in ambiente di sviluppo che in produzione.

Mentre con python/node/java il deploy avviene con un pulsante e se il CI/CD è configurato correttamente si può lanciare tutto direttamente da un sistema come GitHub il deploy in produzione. Sempre in tema di deploy e debugging: è necessario sottolineare che anche qui il debugging di python/node/java è molto più facile di quello in PHP che spesso ti costringe a lavorare di echo e print (soprattuto per piccoli debug).

Senza dimenticare l’annoso problema che PHP non usa Unicode, come viene usato da Java, Python, Node.js: in PHP è difficile far pace con i simboli di carattere non supportato, cioè che il principale problema di PHP è se stesso: l’architettura è nata errata negli anni 90, ed ora ci dobbiamo adeguare a questo.

Aggiungo anche una ultimissima cosa: integrazione con gli IDE: so che c’è una eterna diatriba tra programmare su terminale con vi(m) o programmare su IDE o su programmi di coding leggero: mentre i primi 2 sono molto orientati a fare operazioni di debug e compilazione tutto su terminale, il terzo usa un ambiente completo che ti fa tutto. Mentre con i primi 2 modi riesci a lavorare su progetti piccoli-medi il terzo è l’unico modo per lavorare su progetti grandi. Per ridurre la dimensione, sempre più si usano sistemi di micro service, possibili solamente con determinate circostanze (per esempio un SSO) questo fa sì che si può lavorare anche senza IDE, anche qui l’uso di API rest permette di fare una migliore suddivisione e gestione dei servizi oltre che separare la logica di visualizzazione dalla business logic. Con i micro-service è possibile anche lavorare con linguaggi diversi.

Mescolando PHP e HTML si potrebbe pensare pure di generare CSS e JS custom in base a cosa genera il PHP: questa è una bad pratices perché il codice sarebbe molto più soggetto a SQL Injection.

Concludo dicendo: che fare progetti in PHP nel 2021 senza nessun framework in maniera liscia standard non ha senso, tutto il resto si potrebbe fare perché comunque PHP è un buon linguaggio ma ha senso usare un linguaggio morto, ovviamente è preferibile usare altre strade

¹ Se non si è capito intendevo al fatto dell'assenza di interfacce REST: in una applicazione bancaria è necessario essere sicuri che uno non possa inviare soldi via una richiesta GET, o l'assenza di un supporto ad un POST in JSON ecc: tutte cose necessarie ad un servizio bancario o simile.

² L’invio di dati in JSON via post è una cosa molto utile nelle API, sorpattuto dato che nessun linguaggio fornisce un metodo per fare il glue dei parametri in stile x-www-form-urlencoded.
³ Come routing mi riferisco al sistema interno di navigazione delle pagine: in php si usa il sistema di direcotry del file system (cioè il server web naviga il file system e cerca la risorsa e poi la elabora) e al massimo viene “taroccato” con htaccess, in gran parte degli altri sistemi si usa un sistema di routing diverso, per esempio quello di ktor è molto chiaro (cioè il server web qualunque sia l’url chiama lo script in java o python o node e lo script si occupa di analizzare l’url e fare il routing, questo permette di farlo più professionale ed evitare l’uso di x-www-form-urlencoded)
⁴ Se ci dimentichiamo di specificarlo succede che un output di tipo json viene stampato con un times new roman.
⁵ L’avvento dello scripting c’è sempre stato: prima con jQuery e flash, ora con frameowrk più avanzati: mentre jQuery era semplicemente un wrapper e tutto era possibile farlo con vanilla.js, i framework più avanzati non sono un semplice wrapping ma un vero e proprio sistema di rendering del DOM, con animazioni e tante altre cose che rendono “moderno” un sito web.
⁶ per esempio: https://stackoverflow.com/questions/32328373/php-7-performance https://laracasts.com/discuss/channels/general-discussion/is-it-just-me-or-is-php-7-slow
⁷ attenzione che lo share comunque è molto ridotto, gran parte dei siti web sono legacy, gran parte dei siti web fanno un abuso assurdo di jQuery.

Ovviamente voglio sentire altri pareri, da magari gente che ha lavorato più di me o in contesti diversi. Non ho fatto riferimenti all'ambiente Microsoft ASP per il principale motivo che esso si sa "aggiornare" alle novità.

Immagino anche che Walter magari aspetta qualche riscontro da qualche persona più autorevole del sottoscritto e pure io.

    Io sono tutt'altro che esperto in quel campo, anzi, però c'è qualcosa che non mi torna tanto

    simonebortolin non permette di elaborare i dati post in formato json.²

    Guarda che il decoding e encoding dei JSON è supportato, quindi non capisco a cosa ti riferisci

    simonebortolin spesso è necessario avere funzionamenti diversi a seconda di GET o POST

    Per questo credo sia sufficiente un IF, che puoi utilizzare per eseguire due blocchi di codice o anche due funzioni separate (come in altri linguaggi)

    simonebortolin PHP 5.0 era molto insicuro e pieno di bachi, ma almeno era veloce, PHP 7.0 ha rallentato tanto l’esecuzione di PHP

    Sicuro sia rallentato in maniera così generalizzata? Perché da alcuni benchmark risulta il contrario: https://www.phoronix.com/scan.php?page=news_item&px=PHP-5.3-PHP-7.4-Benchmarks
    https://www.phoronix.com/scan.php?page=news_item&px=PHP-8.0-Performance-Bench-2020

      • [cancellato]

      Dipende sempre cosa ci devi fare.
      Per lo sviluppo web è superato, per altri tipi di utilizzo invece è ancora a fuoco.

        handymenny Guarda che il decoding e encoding dei JSON è supportato, quindi non capisco a cosa ti riferisci

        è assolutamente supportato si, ma non è così semplice: fai conto che in numerosi framework si ha che si fa
        call.respondJSON(array) e viene automaticamente convertito

        in php devi per l'output
        1) impostare header content type json
        2) essere sicuro che non c'è nessun echo né prima né dopo di spazi altrimenti si corrompe
        3) fare echo del json e sopratututto in grandi file non è detto che lo puoi fare generalizzato l'header content type json

        per ricevere un json via post devi fare: json_decode(file_get_contents('php://input'), true), cosa tutt'altro che ovvia e per niente comoda. Inoltre se il file è già stato parsato non funziona.

        Apprezzo molto questo commento: significa che mi sono espresso male.

        handymenny Per questo credo sia sufficiente un IF, che può anche eseguire due funzioni separate come in altri linguaggi

        no puoi fare if(isset($_POST)) ma se il post è vuoto non funziona (anzi il comportamento non è definito, per questo si mette come minimo un hidden o sumbit) e non puoi verificare PUT, GET, DELETE e tutti gli altri

        Si può dire che l'elaborazione PHP 7.0 è più veloce della 5.0 ma non il tempo di esecuzione di uno script PHP.
        In generale è più lento, poi fare un while(i<1000) i++ è più veloce.

          Come scritto sopra dipende cosa ci devi fare e se al lavoro lo richiedono o se lo fai solo per passione.

          Dove lavoravo prima tutti focalizzati su .net ed eravamo in 2 solo a conoscere php.
          È arrivato un clientone (commessa da oltre 500mila Euro… e tutti i siti erano in php.
          Indovina… tutti costretti a passare a php 😄

            simonebortolin sopratututto in grandi file

            qui abbiamo un problema di design però 🙂
            Ormai PHP è anche orientato agli oggetti, non ha nemmeno più tanto senso creare file da 100k righe

            Ho capito cosa vuoi dire, è un po' macchinoso, però se uno separa le API JSON dal resto (o implementa il resto con altri linguaggi), direi che non è un problema così grosso

            simonebortolin if(isset($_POST))

            Mi riferivo al REQUEST_METHOD che trovi qua: https://www.php.net/manual/en/reserved.variables.server.php

            simonebortolin Si può dire che l'elaborazione PHP 7.0 è più veloce della 5.0 ma non il tempo di esecuzione di uno script PHP.
            In generale è più lento, poi fare un while(i<1000) i++ è più veloce.

            Vuoi dire che una singola esecuzione di uno script è più lenta in php 7 (e successivi) ?

              uadopo Si è stata un eccezzione ma puó capitare.
              Come scritto dipende da cosa ti chiede (o meglio ha in casa) il cliente.
              Poi se conviene o no buttarci risorse se sei dipendente si, se sei freelance probabilmente no, a meno che non ti focalizzi su customizzazioni di wordpress e affini

              • [cancellato]

              Oggi per essere <buzzword del momento> developer (o meglio, oggi, coder) devi assolutamente usare il linguaggio/framework du-jour e cambiarlo domani mattina per non sentirti superato.

              Poi ogni linguaggio ha un campo di applicazione dove è meglio di altri - poi c'è chi sceglie il linguaggio in base a quanto costano poco gli sviluppatori (e si vede).

              WordPress che io sappia rimane in PHP - e rimane uno dei CMS più diffusi. Applicazioni che hanno backend più complessi e con specifici requisiti - spesso di interazione con altre applicazioni - possono beneficiare dall'usare altri linguaggi. In certi ambienti ad esempio fa comodo usare gli application server Java come Tomcat o JBoss. Chi ha a che fare con tecnlogie MS ha sicuramente la vita più facile in .NET.

              Rimane il fatto che con qualsiasi tecnologia di backend e di frontend le applicazioni web continuano a fare schifo, e anzi peggiorano da quando sono diventate "mobile first" - cioè vanno usate con un dito. 😁

                handymenny qui abbiamo un problema di design però 🙂
                Ormai PHP è anche orientato agli oggetti, non ha nemmeno più tanto senso creare file da 100k righe

                Ho capito cosa vuoi dire, è un po' macchinoso, però se uno separa le API JSON dal resto (o implementa il resto con altri linguaggi), direi che non è un problema così grosso

                Beh Wordpress usa questo design e fare tanti file su PHP è un problema di sicurezza: guarda wordpress spesso le falle stanno nei file script.php dei vari plugin.

                Supponi di fare tanti file piccoli c'è un grosso problema: tutti questi sono direttamente accessibili da www.miosito.it/businesslogic/file.php e questi sono una falla di sicurezza: potrei limitare l'accesso con htaccess, potrei fare tante robe: ma è un problema di design di php non mio.

                E pure i framework soffrono degli stessi problemi.

                handymenny Mi riferivo al REQUEST_METHOD che trovi qua: https://www.php.net/manual/en/reserved.variables.server.php

                There is no guarantee that every web server will provide any of these; servers may omit some, or provide others not listed here.

                handymenny Vuoi dire che una singola esecuzione di uno script è più lenta in php 7 (e successivi) ?

                Sì, l'esecuzione di una singola istruzione è più veloce, l'esecuzione di un intero script compreso l'avvio dell'interprete php è più lento

                [cancellato] ed io che stavo aspettando che aprivi il topic, dopo un po' mi sono stufato di aspettare e lo ho aperto io.... Sto comunque apprezzando molto alcuni commenti altrui 🙂

                  simonebortolin Mescolando PHP e HTML si potrebbe pensare pure di generare CSS e JS custom in base a cosa genera il PHP: questa è una bad pratices perché il codice sarebbe molto più soggetto a SQL Injection.

                  cos

                  sono anni che non metto mano a php, ma generare contenuti dinamici non ha nulla a che vedere con l'sql injection, che tra l'altro si evita totalmente con le query parametrizzate (che una veloce ricerca mi indica chiamarsi prepared statements nel mondo php)

                    simonebortolin There is no guarantee that every web server will provide any of these; servers may omit some, or provide others not listed here.

                    Questo perché dipende dal webserver che usi. PHP non fa da webserver quindi non ha modo di garantirti i dati che gli passerà il tuo webserver

                    simonebortolin Supponi di fare tanti file piccoli c'è un grosso problema: tutti questi sono direttamente accessibili da www.miosito.it/businesslogic/file.php e questi sono una falla di sicurezza: potrei limitare l'accesso con htaccess, potrei fare tante robe: ma è un problema di design di php non mio.

                    Di solito è buona prassi separare nettamente (cioè mettere in cartelle diverse) ciò che è accessibile pubblicamente dal resto, ma questo l'ho visto fare a prescindere dalla tecnologia utilizzata.

                      • [cancellato]

                      [cancellato] le applicazioni web continuano a fare schifo, e anzi peggiorano da quando sono diventate "mobile first" - cioè vanno usate con un dito.

                      OT nell'OT... Nì, non sempre. Diventano sempre più pesanti, e per certi aspetti la moda di fare webapp invece che client standalone è assolutamente deleteria, ma per molti altri aspetti ti eviti un mare di complicazioni lato client, e te le rende usabili anche dove l'installazione di software sui terminali non è possibile.
                      Poi spesso la colpa è più dei designer, e di chi pone requisiti di essere responsive e mobile first dove non ha assolutamente senso se non perché va di moda (seriamente, un gestionale su smartphone? Really???).

                      handymenny Braccoz le query parametriche non servono per evitare le sql injection, una query è già sicura con mysqli_real_escape_string se:

                      • usi charset comuni
                      • usi la versione con la connessione al db
                      • non ti fai passare come parametro nomi di colonne (N.B. PDO rifiuta proprio questo tipo di query)

                      le query parametriche quelle con il ? secondo l'attuale letteratura sono da EVITARE in favore di:

                      • query classiche con i valori passati come variabile filtrata
                      • query autogenerate dal codice in maniera invisibile per l'utente (Stile lambda/Linq/dsl/...)

                      in quanto aumentano in maniera "stupida" la complicazione della query. Si usano le PDO solamente nel caso in cui si lavora con colonne o tabelle passate come parametro

                      la insicurezza derivata a attivare/disattivare pezzi di codice javascript da PHP è ovvio supponiamo di avere questo uno script in cui si fa var paperino = < php echo $_GET["paperino"]; >(c'è clouflare che mi blocca i < ? senza spazio )

                      Supponiamo che per qualche motivo sulla variabile paperino ci sia uno script che sfrutta una vulnerabilità SQL Injection o XSS, e che su pluto_get.php?value non ho fatto il filtro perché tanto è un valore passato da javascript sai quanto è difficile da testare questo codice, questa vulnerabilità era tra le top 10 owasp 10 anni fa quando era pieno di script js generati da php

                      handymenny sono d'accordo: ma mentre qualsiasi framework basato su java/python/node ci ha una cartella pubblic dove ci metti le risorse statiche, tutto il resto viene generato dallo script

                      in php è completamente diverso: un file php è visto come un file dentro la cartella pubblic e l'unico modo per inibire l'accesso è usare htaccess.

                        simonebortolin le query parametriche non servono per evitare le sql injection, una query è già sicura con mysqli_real_escape_string se

                        "se"

                        e' quel se su cui si basano le sql injection.

                        simonebortolin le query parametriche quelle con il ? secondo l'attuale letteratura sono da EVITARE in favore di:

                        cos

                        vabe, mi eietto dal thread

                          • [cancellato]

                          • Modificato

                          simonebortolin ed io che stavo aspettando che aprivi il topic, dopo un po' mi sono stufato di aspettare e lo ho aperto io.... Sto comunque apprezzando molto alcuni commenti altrui

                          Non vivo mica sul forum 😝e per fortuna hai avviata la discussione perché si sta rivelando proprio interessante!

                          [cancellato] Poi ogni linguaggio ha un campo di applicazione dove è meglio di altri - poi c'è chi sceglie il linguaggio in base a quanto costano poco gli sviluppatori (e si vede).

                          WordPress che io sappia rimane in PHP - e rimane uno dei CMS più diffusi. Applicazioni che hanno backend più complessi e con specifici requisiti - spesso di interazione con altre applicazioni - possono beneficiare dall'usare altri linguaggi. In certi ambienti ad esempio fa comodo usare gli application server Java come Tomcat o JBoss. Chi ha a che fare con tecnlogie MS ha sicuramente la vita più facile in .NET.

                          Confermo. Ho lavorato il PHP da autodidatta diversi anni fa ma posso assicurare che la forte tipizzazione e pattern in ambiente .NET lo rende molto più manutenibile e se si cambia azienda tendenzialmente non è un dramma lavorare sul codice di altri

                            • [cancellato]

                            • Modificato

                            simonebortolin le query parametriche quelle con il ? secondo l'attuale letteratura sono da EVITARE in favore di:
                            query classiche con i valori passati come variabile filtrata
                            query autogenerate dal codice in maniera invisibile per l'utente

                            in quanto aumentano in maniera "stupida" la complicazione della query

                            Cultura alimentata da chi con i database non ci ha mai lavorato in vita sua, e non ha mai capito come lavora il query planner. Riusare una stessa query con valori parametrici diversi significa ripescare direttamente dalla cache la migliore strategia di accesso al dato senza rifare l'analisi.
                            Involuzione informatica.

                            Sì, mi stanno abbondantemente sui $gioielli Hibernate e simili, e soprattutto le loro mer(d)avigliose query autogenerate illeggibili ed inutilmente prolisse perché per pigrizia recuperano tutti i campi degli "oggetti" che non servono, o fanno 3000 query per il lazy loading, quando basterebbe sapere cosa si vuole ottenere fin dal principio (ma implica essere capaci a programmare e a fare analisi, cosa non scontata).

                              Informativa privacy - Informativa cookie - Termini e condizioni - Regolamento - Disclaimer - 🏳️‍🌈
                              P.I. IT16712091004 - info@fibraclick.it

                              ♻️ Il server di questo sito è alimentato al 100% con energia rinnovabile