SlideShare une entreprise Scribd logo
PHP vs JavaScript
Animé par Mazen GHARBI
Deux langages emblématiques
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 2
D’après developpez.com,
« PHP est utilisé par plus de 80 % des sites »
JavaScript est un standard interprété
par tous les navigateurs
Complémentaires
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 3
Sommaire
1. Contexte de création
2. Librairies & Frameworks satellites
3. Architecture des projets Web
4. Server Side Rendering
5. Progressive Web App
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 4
PHP vs JavaScript
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 5
Création
L’histoire de PHP
▷ Créé par Ramsus Lerdorf en 1995
› PHP/FI initialement; librairie de scripts Perl
› Pour créer son CV !
▷ Portée en C et agrémentée de nouvelles fonctionnalités ;
▷ Quelques utilisations pratiques :
› Forums et Messageries ;
› Commerce électronique ;
› Banque / Comptes en ligne ;
› Publication en ligne ;
› Moteurs de recherche ;
› Tout ce que vous voulez (sauf les jeux).
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 6
PHP vs JavaScript
L’histoire de Javascript
▷ Création du langage en 1995 ;
› Version initiale de Javascript créée en 10 jours seulement !
▷ 1997 : Javascript gagne la guerre et s’impose comme un standard
« cross-browser » sous le nom officiel « EcmaScript » ;
▷ 2009 : Sortie de NodeJS ;
▷ 2015 : Finalisation du standard EcmaScript 6 ;
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 7
PHP vs JavaScript
Propriétés des langages
▷ Dynamiquement* typé
▷ Faiblement* typé
▷ Multi-paradigme (Orienté Objet / Fonctionnel)
› Brendan Eich s’est inspiré de Self, Scheme, Java et C
▷ « Cross-browser » et « cross-platform »
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 8
PHP vs JavaScript
Typage
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 9
PHP vs JavaScript
var maVariable = "Ma chaine";
console.log(typeof maVariable); // string
maVariable = 2;
console.log(typeof maVariable); // number
<?php
$maVariable = "Ma chaine";
echo gettype($maVariable); // string
$maVariable = 1;
echo gettype($maVariable); // integer
JavaScript
PHP
Limites
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 10
PHP vs JavaScript
<?php
function faitQuelqueChose(int $maVar)
{
echo $maVar;
}
faitQuelqueChose('Oops.'); // Fatal error
PHP 7.1
constructor() {
var a: number = 1;
a = 'Toto'; // Erreur à la transpilation
}
TypeScript -> JavaScript
Au fur et à mesure du temps, des besoins pour de grosses applications ont nécessités l’évolution des deux langages
Coercion
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 11
PHP vs JavaScript
JavaScript Equivalence Table
<?php
echo true + '1' + 0; // 2
PHP
console.log({} + [] + true); // 1...
JavaScript
Du mieux ! Côté JavaScript
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 12
PHP vs JavaScript
▷ Les classes !! Avec héritage
▷ Modules
▷ Arrow Functions
▷ Template Strings
▷ Spread & Rest
▷ Déstructuration (objet et array)
Du mieux ! Côté PHP
▷ Typage des paramètre et des retours de fonction ;
▷ Classes avec PHP5
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 13
PHP vs JavaScript
<?php
function enroll(Student $student, array $classes): int
{
foreach ($classes as $class) {
echo "Enrolling " . $student->name . " in " . $class;
}
return 1;
}
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 14
Librairies & Frameworks
▷ Framework PHP créé par des français !!
▷ Augmente la productivité des développeurs et permet de CADRER
le développement
▷ Voici quelques sites utilisant Symfony
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 15
PHP vs JavaScript
Symfony 4 - Fonctionnement
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 16
PHP vs JavaScript
Symfony 4 – ORM !
▷ Gérer votre base au travers d’Entity
▷ Symfony inclut Doctrine comme ORM
▷ Couche d’abstraction
▷ Améliore la maintenabilité
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 17
PHP vs JavaScript
/**
* @ORMEntity(repositoryClass="AppRepositoryProductRepository")
*/
class Product
{
/**
* @ORMId
* @ORMGeneratedValue
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMColumn(type="string", length=255)
*/
private $name;
/**
* @ORMColumn(type="integer")
*/
private $price;
public function getId()
{
return $this->id;
}
}
Injection de dépendance – Orienté Aspect
▷ Symfony4 met en avant le développement orienté aspect
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 18
PHP vs JavaScript
Injection de dépendance
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 19
PHP vs JavaScript
public function getSkills(Request $request, ElasticSearch $es) {
$user = $request->attributes->get('user');
$coach = $request->attributes->get('coach');
$skills = $coach->getSkills($es);
return new JsonResponse($skills);
}
class ElasticSearch
{
private $host;
private $guzzle;
private $logger;
...
}
▷ Voici comment un contrôleur peut injecter un service :
Service injecté !
Gestion du routing avec les annotations
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 20
PHP vs JavaScript
/**
* @Route(
* path="/coach/disponibilities",
* name="coach_get_disponibilities",
* methods={"GET"}
* )
*/
public function getDisponibilities(Request $request, ElasticSearch $es)
{
$user = $request->attributes->get('user');
$coach = $request->attributes->get('coach');
$disponibilities = $coach->getDisponibilities($es);
return new JsonResponse($disponibilities);
}
Pleins d’autres
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 21
PHP vs JavaScript
Front-end
▷ Côté front-end, il existe une ribambelle de librairies / framework
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 22
PHP vs JavaScript
Développement orienté Composants
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 23
PHP vs JavaScript
C1
C2
C3
C4
C5
Séparation par composants
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 24
PHP vs JavaScript
C1
C2 C3 C4
C5
Autre exemple
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 25
PHP vs JavaScript
Angular 8
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 26
PHP vs JavaScript
React
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 27
PHP vs JavaScript
Vue
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 28
PHP vs JavaScript
Single Page Application
▷ Ces 3 frameworks permettent la création de Single Page
Applications
› Application monopages
▷ L’entièreté de l’application WEB est chargée en amont
› Plus aucune requête ensuite !
▷ Améliore l’expérience utilisateur, le changement de page est fluide
▷ Que du statique, tout peut être mit en cache dans un CDN* ☺
› *Content Delivery Network
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 29
PHP vs JavaScript
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 30
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 31
Evolution des architectures WEB
Programme CGI
▷ Un programme CGI est un programme côté serveur dont la sortie
est dédiée à un navigateur
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 32
PHP vs JavaScript
API RESTful
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 33
PHP vs JavaScript
Développement modularisé – Back-end
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 34
PHP vs JavaScript
Développement modularisé – Front-end
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 35
PHP vs JavaScript
Architecture WEB – Inversion totale !
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 36
PHP vs JavaScript
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 37
Server Side Rendering
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 38
PHP vs JavaScript
Server Side Rendering
▷ Une application Angular, React ou Vue doit préparer son contexte
avant d’afficher la page
› « Bootstrap time »
▷ On va chercher à optimiser ce temps de chargement initial :
› Pour optimiser le SEO ;
› Améliorer l’expérience utilisateur !
▷ 2 choses qu’on va pouvoir optimiser avec le SSR !
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 39
PHP vs JavaScript
SSR – Angular
▷ La mise en place en Angular est extrêmement simple !
▷ Et le tour est joué !
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 40
PHP vs JavaScript
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 41
Progressive Web App
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 42
PHP vs JavaScript
Avantages
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 43
PHP vs JavaScript
Fiabilité
Tourne online comme offline
Vitesse Engagement
Mettre en place un PWA
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 44
PHP vs JavaScript
ServiceWorker
Manifeste
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 45
PHP vs JavaScript
{
"short_name": "Meetup PWA",
"name": "Meetup Javascript vs PHP",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}
manifest.json
<head>
...
<link rel="manifest" href="./manifest.json" />
</head>
index.html
Service Worker
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 46
PHP vs JavaScript
if ('serviceWorker' in navigator) {
navigator.serviceWorker
.register('/notre-sw.js', { scope: '/' })
.then(function(reg) {
// Etat du SW qui peut être installing | waiting | active
});
}
main.js
this.addEventListener('install', function(event) {
event.waitUntil(
caches.open(‘meetup-pwa').then(function(cache) {
return cache.addAll(['/public/index.html']);
})
);
});
notre-sw.js
Une fois terminé, le navigateur
va chercher à installer le SW
Création d’un
nouveau cache
Ce n’est pas fini
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 47
PHP vs JavaScript
Un ServiceWorker agit comme un proxy !
this.addEventListener('fetch', function(event) {
event.respondWith(caches.match(event.request));
});
Advient à chaque requête d’une ressource
La ressource doit être en cache pour
que cela fonctionne
Framework à la rescousse
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 48
PHP vs JavaScript
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker’;
ReactDOM.render(<App />, document.getElementById('root'));
serviceWorker.register();
Merci
Place aux questions
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 49
mazen@macademia.fr
Gardons le contact
mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 50
Voici mes coordonnées
Restons en contact ...
mercredi 2 octobre 2019 51
@MacademiaFrance
@MacademiaFrance
hey@macademia.fr
macademia.fr
PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia

Contenu connexe

PDF
Synchroniser ses applications plus rapidement avec du low-code
PPTX
Développez dans le futur, dès maintenant !
PDF
2016-09-30 php
PPTX
Seo camp day lorraine 2018 - Nancy gregory ambroise
PPTX
PHP5: Endgame
PDF
PHP : retour vers le futur !
PPTX
S2-01-PHP.pptx
PDF
Cours php -partie 1.pdf
Synchroniser ses applications plus rapidement avec du low-code
Développez dans le futur, dès maintenant !
2016-09-30 php
Seo camp day lorraine 2018 - Nancy gregory ambroise
PHP5: Endgame
PHP : retour vers le futur !
S2-01-PHP.pptx
Cours php -partie 1.pdf

Similaire à PHP vs JavaScript (20)

PDF
Tout pour se préparer à PHP 7.4
PPT
Presentation d'un cour de language avencer php.ppt
PDF
Déboguer une application web avec FirePHP
PDF
Deboguer Avec Firephp
PPTX
Retour AFUP du forumphp 2017
PDF
wallabag, comment on a migré vers symfony3
PDF
Cas client atypique
PDF
Créer votre expérience de réalite virtuelle avec drupal
PDF
Php 7 Think php7
PDF
Core Web Vitals, les indicateurs de vitesse qui réconcilient UX et SEO
PPTX
Conception de code javascript cote client dans la continuité du renouveau du web
PDF
Core web vitals pour unifier UX et SEO - Stephane Rios - SEO Camp'us paris 2020
PDF
Communications Réseaux et HTTP avec PHP
PDF
Introduction à la webperf
PDF
FinistJUG - J’ai besoin d’une appli web rapidement
PPT
Cours 1/3 "Architecture Web"
ODP
Kiwiparty 2011 - Optimisation des sites internet
PDF
Enib cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !
PPTX
Synergies entre DEV et SEO (SeoCampus 2019)
PPTX
Synergie entre développeur et consultant SEO - Didier Sampaolo - SEOcamp'us P...
Tout pour se préparer à PHP 7.4
Presentation d'un cour de language avencer php.ppt
Déboguer une application web avec FirePHP
Deboguer Avec Firephp
Retour AFUP du forumphp 2017
wallabag, comment on a migré vers symfony3
Cas client atypique
Créer votre expérience de réalite virtuelle avec drupal
Php 7 Think php7
Core Web Vitals, les indicateurs de vitesse qui réconcilient UX et SEO
Conception de code javascript cote client dans la continuité du renouveau du web
Core web vitals pour unifier UX et SEO - Stephane Rios - SEO Camp'us paris 2020
Communications Réseaux et HTTP avec PHP
Introduction à la webperf
FinistJUG - J’ai besoin d’une appli web rapidement
Cours 1/3 "Architecture Web"
Kiwiparty 2011 - Optimisation des sites internet
Enib cours c.a.i. web - séance #5 - j’ai besoin d’une appli web rapidement !
Synergies entre DEV et SEO (SeoCampus 2019)
Synergie entre développeur et consultant SEO - Didier Sampaolo - SEOcamp'us P...
Publicité

Dernier (11)

PDF
UX DESIGN presentation canva plan et slides
PPT
Icc courant de court circuit explication
PDF
ENSEIGNEMENT/APPRENTISSAGE ET COMPETENCE
PDF
Regles sur la gestion de l’Eclairage public
PPT
Présentation de l’Analyse et Concepti SI
PDF
Proposition de contenu pouvant résoudre les problèmes détectés à partir des é...
PPTX
mon_expose_de_geophysique_dispositif_de_schlumberger.pptx
PPTX
Chapitre7-java------------------ Exception.pptx
PDF
Arouna Toure - Senior Ingénieur Logiciel Et Chef De Produit
PPTX
mon_expose_de_geophysique_disposotif_de_wener.pptx
PDF
famille ................................
UX DESIGN presentation canva plan et slides
Icc courant de court circuit explication
ENSEIGNEMENT/APPRENTISSAGE ET COMPETENCE
Regles sur la gestion de l’Eclairage public
Présentation de l’Analyse et Concepti SI
Proposition de contenu pouvant résoudre les problèmes détectés à partir des é...
mon_expose_de_geophysique_dispositif_de_schlumberger.pptx
Chapitre7-java------------------ Exception.pptx
Arouna Toure - Senior Ingénieur Logiciel Et Chef De Produit
mon_expose_de_geophysique_disposotif_de_wener.pptx
famille ................................
Publicité

PHP vs JavaScript

  • 1. PHP vs JavaScript Animé par Mazen GHARBI
  • 2. Deux langages emblématiques mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 2 D’après developpez.com, « PHP est utilisé par plus de 80 % des sites » JavaScript est un standard interprété par tous les navigateurs
  • 3. Complémentaires mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 3
  • 4. Sommaire 1. Contexte de création 2. Librairies & Frameworks satellites 3. Architecture des projets Web 4. Server Side Rendering 5. Progressive Web App mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 4 PHP vs JavaScript
  • 5. mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 5 Création
  • 6. L’histoire de PHP ▷ Créé par Ramsus Lerdorf en 1995 › PHP/FI initialement; librairie de scripts Perl › Pour créer son CV ! ▷ Portée en C et agrémentée de nouvelles fonctionnalités ; ▷ Quelques utilisations pratiques : › Forums et Messageries ; › Commerce électronique ; › Banque / Comptes en ligne ; › Publication en ligne ; › Moteurs de recherche ; › Tout ce que vous voulez (sauf les jeux). mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 6 PHP vs JavaScript
  • 7. L’histoire de Javascript ▷ Création du langage en 1995 ; › Version initiale de Javascript créée en 10 jours seulement ! ▷ 1997 : Javascript gagne la guerre et s’impose comme un standard « cross-browser » sous le nom officiel « EcmaScript » ; ▷ 2009 : Sortie de NodeJS ; ▷ 2015 : Finalisation du standard EcmaScript 6 ; mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 7 PHP vs JavaScript
  • 8. Propriétés des langages ▷ Dynamiquement* typé ▷ Faiblement* typé ▷ Multi-paradigme (Orienté Objet / Fonctionnel) › Brendan Eich s’est inspiré de Self, Scheme, Java et C ▷ « Cross-browser » et « cross-platform » mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 8 PHP vs JavaScript
  • 9. Typage mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 9 PHP vs JavaScript var maVariable = "Ma chaine"; console.log(typeof maVariable); // string maVariable = 2; console.log(typeof maVariable); // number <?php $maVariable = "Ma chaine"; echo gettype($maVariable); // string $maVariable = 1; echo gettype($maVariable); // integer JavaScript PHP
  • 10. Limites mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 10 PHP vs JavaScript <?php function faitQuelqueChose(int $maVar) { echo $maVar; } faitQuelqueChose('Oops.'); // Fatal error PHP 7.1 constructor() { var a: number = 1; a = 'Toto'; // Erreur à la transpilation } TypeScript -> JavaScript Au fur et à mesure du temps, des besoins pour de grosses applications ont nécessités l’évolution des deux langages
  • 11. Coercion mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 11 PHP vs JavaScript JavaScript Equivalence Table <?php echo true + '1' + 0; // 2 PHP console.log({} + [] + true); // 1... JavaScript
  • 12. Du mieux ! Côté JavaScript mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 12 PHP vs JavaScript ▷ Les classes !! Avec héritage ▷ Modules ▷ Arrow Functions ▷ Template Strings ▷ Spread & Rest ▷ Déstructuration (objet et array)
  • 13. Du mieux ! Côté PHP ▷ Typage des paramètre et des retours de fonction ; ▷ Classes avec PHP5 mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 13 PHP vs JavaScript <?php function enroll(Student $student, array $classes): int { foreach ($classes as $class) { echo "Enrolling " . $student->name . " in " . $class; } return 1; }
  • 14. mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 14 Librairies & Frameworks
  • 15. ▷ Framework PHP créé par des français !! ▷ Augmente la productivité des développeurs et permet de CADRER le développement ▷ Voici quelques sites utilisant Symfony mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 15 PHP vs JavaScript
  • 16. Symfony 4 - Fonctionnement mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 16 PHP vs JavaScript
  • 17. Symfony 4 – ORM ! ▷ Gérer votre base au travers d’Entity ▷ Symfony inclut Doctrine comme ORM ▷ Couche d’abstraction ▷ Améliore la maintenabilité mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 17 PHP vs JavaScript /** * @ORMEntity(repositoryClass="AppRepositoryProductRepository") */ class Product { /** * @ORMId * @ORMGeneratedValue * @ORMColumn(type="integer") */ private $id; /** * @ORMColumn(type="string", length=255) */ private $name; /** * @ORMColumn(type="integer") */ private $price; public function getId() { return $this->id; } }
  • 18. Injection de dépendance – Orienté Aspect ▷ Symfony4 met en avant le développement orienté aspect mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 18 PHP vs JavaScript
  • 19. Injection de dépendance mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 19 PHP vs JavaScript public function getSkills(Request $request, ElasticSearch $es) { $user = $request->attributes->get('user'); $coach = $request->attributes->get('coach'); $skills = $coach->getSkills($es); return new JsonResponse($skills); } class ElasticSearch { private $host; private $guzzle; private $logger; ... } ▷ Voici comment un contrôleur peut injecter un service : Service injecté !
  • 20. Gestion du routing avec les annotations mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 20 PHP vs JavaScript /** * @Route( * path="/coach/disponibilities", * name="coach_get_disponibilities", * methods={"GET"} * ) */ public function getDisponibilities(Request $request, ElasticSearch $es) { $user = $request->attributes->get('user'); $coach = $request->attributes->get('coach'); $disponibilities = $coach->getDisponibilities($es); return new JsonResponse($disponibilities); }
  • 21. Pleins d’autres mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 21 PHP vs JavaScript
  • 22. Front-end ▷ Côté front-end, il existe une ribambelle de librairies / framework mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 22 PHP vs JavaScript
  • 23. Développement orienté Composants mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 23 PHP vs JavaScript C1 C2 C3 C4 C5
  • 24. Séparation par composants mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 24 PHP vs JavaScript C1 C2 C3 C4 C5
  • 25. Autre exemple mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 25 PHP vs JavaScript
  • 26. Angular 8 mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 26 PHP vs JavaScript
  • 27. React mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 27 PHP vs JavaScript
  • 28. Vue mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 28 PHP vs JavaScript
  • 29. Single Page Application ▷ Ces 3 frameworks permettent la création de Single Page Applications › Application monopages ▷ L’entièreté de l’application WEB est chargée en amont › Plus aucune requête ensuite ! ▷ Améliore l’expérience utilisateur, le changement de page est fluide ▷ Que du statique, tout peut être mit en cache dans un CDN* ☺ › *Content Delivery Network mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 29 PHP vs JavaScript
  • 30. mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 30
  • 31. mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 31 Evolution des architectures WEB
  • 32. Programme CGI ▷ Un programme CGI est un programme côté serveur dont la sortie est dédiée à un navigateur mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 32 PHP vs JavaScript
  • 33. API RESTful mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 33 PHP vs JavaScript
  • 34. Développement modularisé – Back-end mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 34 PHP vs JavaScript
  • 35. Développement modularisé – Front-end mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 35 PHP vs JavaScript
  • 36. Architecture WEB – Inversion totale ! mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 36 PHP vs JavaScript
  • 37. mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 37 Server Side Rendering
  • 38. mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 38 PHP vs JavaScript
  • 39. Server Side Rendering ▷ Une application Angular, React ou Vue doit préparer son contexte avant d’afficher la page › « Bootstrap time » ▷ On va chercher à optimiser ce temps de chargement initial : › Pour optimiser le SEO ; › Améliorer l’expérience utilisateur ! ▷ 2 choses qu’on va pouvoir optimiser avec le SSR ! mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 39 PHP vs JavaScript
  • 40. SSR – Angular ▷ La mise en place en Angular est extrêmement simple ! ▷ Et le tour est joué ! mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 40 PHP vs JavaScript
  • 41. mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 41 Progressive Web App
  • 42. mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 42 PHP vs JavaScript
  • 43. Avantages mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 43 PHP vs JavaScript Fiabilité Tourne online comme offline Vitesse Engagement
  • 44. Mettre en place un PWA mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 44 PHP vs JavaScript ServiceWorker
  • 45. Manifeste mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 45 PHP vs JavaScript { "short_name": "Meetup PWA", "name": "Meetup Javascript vs PHP", "icons": [ { "src": "favicon.ico", "sizes": "64x64 32x32 24x24 16x16", "type": "image/x-icon" } ], "start_url": ".", "display": "standalone", "theme_color": "#000000", "background_color": "#ffffff" } manifest.json <head> ... <link rel="manifest" href="./manifest.json" /> </head> index.html
  • 46. Service Worker mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 46 PHP vs JavaScript if ('serviceWorker' in navigator) { navigator.serviceWorker .register('/notre-sw.js', { scope: '/' }) .then(function(reg) { // Etat du SW qui peut être installing | waiting | active }); } main.js this.addEventListener('install', function(event) { event.waitUntil( caches.open(‘meetup-pwa').then(function(cache) { return cache.addAll(['/public/index.html']); }) ); }); notre-sw.js Une fois terminé, le navigateur va chercher à installer le SW Création d’un nouveau cache
  • 47. Ce n’est pas fini mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 47 PHP vs JavaScript Un ServiceWorker agit comme un proxy ! this.addEventListener('fetch', function(event) { event.respondWith(caches.match(event.request)); }); Advient à chaque requête d’une ressource La ressource doit être en cache pour que cela fonctionne
  • 48. Framework à la rescousse mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 48 PHP vs JavaScript import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; import * as serviceWorker from './serviceWorker’; ReactDOM.render(<App />, document.getElementById('root')); serviceWorker.register();
  • 49. Merci Place aux questions mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 49
  • 50. mazen@macademia.fr Gardons le contact mercredi 2 octobre 2019 PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia 50 Voici mes coordonnées
  • 51. Restons en contact ... mercredi 2 octobre 2019 51 @MacademiaFrance @MacademiaFrance hey@macademia.fr macademia.fr PHP vs JavaScript ⋅ Animé par Mazen GHARBI ⋅ Macademia