Catégorie : Développement web

  • #NodeJS : A quick opti­mi­za­tion advice

    The small changes made the func­tion body of add() growing over 600 charac­ter. v8 opti­mi­zer (crank­shaft) inlines the func­tions whose body length, inclu­ding the comments, is less than 600 charac­ters.

    chez Julien Crou­zet

    Je ne peux m’em­pê­cher de trou­ver étrange d’in­clure les commen­taires. Ça ressemble à une façon d’épar­gner un micro-cycle de CPU assez peu perti­nente. Il reste que c’est à savoir, et que mettre le commen­taire hors de la fonc­tion résout tout. Autant le savoir.

  • A case study on App Down­load Inters­ti­tials

    Les infor­ma­ti­ciens se battent depuis long­temps contre ces inter­sti­ciels qui incitent à télé­char­ger l’app native quand ils se connectent sur le site web avec un smart­phone. C’est pénible, et ça ne répond pas à l’in­ten­tion. C’est même horrible quand on suit un lien direct vers un contenu.

    Les popins ne sont guère mieux (voire pire quand elles sont complexes à fermer). Le comble c’est quand la popin ou l’in­ters­ti­ciel ne sont pas adap­tés à la lecture sur un écran de smart­phone, et empêchent toute suite posi­tive.

    La pratique reste, parce que le marke­ting rêve de fidé­li­ser avec une appli­ca­tion dédiée, consi­dé­rée comme plus quali­ta­tive mais surtout qui reste sur le télé­phone.

    69% of the visits aban­do­ned our page. These users neither went to the app store nor conti­nued to our mobile website.

    On manque de chiffres, ou de gens qui veulent bien publier leurs chiffres. Celui là est juste énorme. 69%… C’est énorme. Pour juste 9% de gens qui vont cliquer sur « je veux l’app », dont certains l’ont déjà, d’autres ne l’ins­tal­le­ront pas, la désins­tal­le­ront dans la foulée ou ne l’uti­li­se­ront pas.

    À l’in­verse, en remplaçant l’in­ters­ti­ciel par une bannière bien faite (non, pas une popin, pitié) :

    1-day active users on our mobile website increa­sed by 17%.

    G+ iOS native app installs were mostly unaf­fec­ted (-2%). (We’re not repor­ting install numbers from Android devices since most come with Google+ instal­led.)

    Ne nous embal­lons pas, Google conti­nue de mettre un inter­sti­ciel sur Gmail quand il est accédé par un smart­phone Android.

  • Super­char­ging page load

    Les bonnes ressources expliquant comment faire du web mobile sont rares. La plupart se limitent à parler de media query ou d’adap­ta­tion du rendu, ce qui est loin d’être fina­le­ment le plus complexe ou le plus impor­tant.

    Ici Google nous parle perfor­mance, avec plusieurs étapes très concrètes, du code exemple, et un aperçu d’uti­li­sa­tion des magiques service workers, en tout juste une dizaine de minutes. Si vous voulez parier sur une techno qui va révo­lu­tion­ner le web mobile dans les 12 mois, misez là dessus.

  • Icon-font, hack ?

    Unicode intègre main­te­nant des picto­grammes depuis des années, et ça se renforce chaque version. Aujourd’­hui on doit dépas­ser les 1000 emoji, dont certains sont en réalité des modi­fi­ca­teurs. Avec la compo­si­tion ce sont des dizaines de milliers qui sont possibles. À cela il faut ajou­ter des milliers de symboles, de la flèche jusqu’à l’en­ve­loppe.

    Tout ça se retrouve ou se retrou­vera dans nos polices de carac­tères. C’est fait pour, à dessein.

    Dans Unicode, et donc dans nos polices de carac­tères se trouve aussi une plage de symboles dite « privée ». Elle est faite pour que vous y mettiez vos propres symboles, à vous, pour vos besoins. Tant qu’on reste là dedans, je ne vois pas trop pourquoi y ajou­ter un picto­gramme repré­sen­tant un panier d’achat serait plus ou moins un hack, une bidouille, que les emojis ou les symboles déjà présents.

    La seule diffé­rence est que vous êtes dans un espace privé donc que le sens de vos picto­gramme est inconnu des programmes qui les utili­se­ront. Bon, c’est prévu comme ça au départ aussi, à dessein, et c’est aussi vrai de n’im­porte quelle image sur une page web.

    Bref, les polices de carac­tères person­na­li­sées avec des picto­grammes, un hack ? ça se discute. Unique­ment si vous consi­dé­rez que les plages Unicode de symboles et autres emoji le sont aussi. Ça se discu­te…

  • HTTP2 for front-end web deve­lo­pers

    To get websites to load in an accep­table time using HTTP1 we have deve­lo­ped a series of tech­niques; hacks really; to eke perfor­mance out of this old proto­col. They are:

    • Spri­ting: taking multiple images, combi­ning them into one image, and using CSS to only show part of that image in a parti­cu­lar place.
    • Conca­te­na­ting: Taking multiple CSS or JS files and sticking them into one large file.
    • Serving assets from a cookie-less domain.
    • Shar­ding: crea­ting different domains or sub-domains to host assets like images.

    Avec l’ar­ri­vée de HTTP 2, ces quatre opti­mi­sa­tions tendent à deve­nir inutiles, voire contre produc­tives.

    Pour les deux premières, le pipe­li­ning devient plus intel­li­gent (donc réel­le­ment utili­sable) et au besoin le serveur peut pous­ser les conte­nus sans même attendre qu’ils soient deman­dés par le client.

    Pour les deux suivantes, le système de compres­sion des entêtes et de multi­plexage rend le retour sur inves­tis­se­ment d’une nouvelle connexion TCP à un domaine tiers fran­che­ment contes­table. Vous risquez de perdre de la perfor­mance au lieu d’en gagner.

    La leçon est inté­res­sante. Pendant quelques années les déve­lop­peurs ont cher­ché à contour­ner les navi­ga­teurs, croyant pouvoir être plus smart. Le problème c’est que les navi­ga­teurs et les proto­coles ont évolué entre temps pour résoudre les mêmes problèmes. Les bouts de scotch des déve­lop­peurs peuvent désor­mais faire plus de mal que de bien. C’est toute une litté­ra­ture qu’il va falloir mettre à jour.

  • Infor­ma­tions person­nelles pour les sites e-commerce

    J’ai­me­rai tant un site e-commerce qui ne me deman­de­rait pas de créer un compte pour faire un achat. Qu’il me soit obli­ga­toire de décli­ner nom et adresse pour par exemple ache­ter un livre en ligne… est plus que gênant

    Je regarde la super lampe déco, je clique sur « ache­ter », je saisis une éven­tuel­le­ment adresse de livrai­son, puis mon numéro de carte bancaire, je valide, et voilà !

    Je n’ai pas besoin de plus pour ache­ter mon pain à la boulan­ge­rie, un lit ou une armoire dans mon maga­sin de meuble, ou un livre à ma librai­rie. Tout ce qui vient en plus avant la fina­li­sa­tion de la commande me fera fuir.

    Parce qu’il y a parfois un besoin d’une rela­tion après vente, je peux comprendre qu’on me demande aussi un numéro de télé­phone ou un email, même si ce n’est pas stric­te­ment néces­saire. On pourra m’y envoyer un jeton d’ac­cès pour me relier à mes commandes ou m’au­then­ti­fier si besoin.

    Je ne vois aucune raison incon­tour­nable d’im­po­ser la saisie de plus d’in­for­ma­tions [en fait si, voir commen­taires]. Je n’ai ni besoin d’un compte ou d’un mot de passe, ni besoin de décli­ner mon iden­tité.

    Rien n’em­pêche de propo­ser la saisie de bien plus d’in­for­ma­tions, mais après la commande, et de façon tota­le­ment option­nelle.

  • Tomber en marche

    Celle ci je ne peux me rete­nir de la copier car elle est magni­fique :

    $override = null;
    if ($notify_admin and $conf['browser_language'])
    {
      if (!get_browser_language($override['language']))
      {
        $override=null;
      }
    }

    À première vue, le code ne fait rien. À la seconde lecture non plus, je vous rassure.

    Après expli­ca­tion, la méthode get_browser_language utilise un passage par réfé­rence (oui, avec ce nom là…), c’est à dire que la variable qui est passée en argu­ment pourra voir sa valeur modi­fiée.

    Eureka! En sortie de code on pour­rait bien avoir une variable $override qui contient quelque chose. On a au passage fait une créa­tion de tableau impli­cite en utili­sant la syntaxe avec crochets sur une valeur nulle (conseil : ne jamais faire ça si vous souhai­tez rester lisible).

    La seconde affec­ta­tion $override=null sert si jamais get_browser_language a bien modi­fié $override['language'] mais a renvoyé une valeur évaluée à false.

    Mais pourquoi cette seconde affec­ta­tion à null ? Et bien il se trouve que la fonc­tion get_browser_language renvoie false si elle ne modi­fie pas la variable passée par réfé­rence. Dans ce cas le code d’ap­pel aurait quand même créé un tableau dans $override à cause de override['language'], il faut donc reve­nir en arrière et écra­ser ce tableau créé impli­ci­te­ment.

    À rete­nir :

    1. Ne jamais créer de tableau implic­te­ment avec l’opé­ra­teur crochet sur une valeur null.
    2. Ne jamais attendre un retour par réfé­rence sur une fonc­tion qui s’ap­pelle « get_* »
    3. Globa­le­ment, ne quasi­ment jamais utili­ser le passage par réfé­rence pour récu­pé­rer une simple valeur.

    Ici en plus vu qu’on utilise déjà l’éva­lua­tion à true ou false du retour de get_browser_language, autant lui faire retour­ner direc­te­ment la langue, ou null si aucune n’est trou­vée.

  • Auto­pre­fixer

    Je note ici autant pour ceux qui ne connaissent pas que pour mon moi de plus tard : Auto­pre­fixer, qui prend une CSS clas­sique et qui ajoute les versions préfixées utiles pour les diffé­rents navi­ga­teurs.

    Ça ne le fait pas bête­ment, genre pour flex­box ça sait gérer les diffé­rences de syntaxes. Bref : utile.

  • The empe­ror’s new clothes were built with Node.js

    Atten­tion ça va réagir :)

    I want to address one-by-one all of the strange and misgui­ded argu­ments for Node.js in one place.

    C’est chez Eric Jiang, et si c’est plein d’opi­nion, d’iro­nie et de cari­ca­ture, c’est quand même vrai sur le fond.

  • Sur-Javas­cript

    J’avais regardé CoffeeS­cript il y a long­temps, mais sans être convaincu. Si j’ai besoin de faire du Javas­cript, je fais du Javas­cript. Coffee apporte bien des amélio­ra­tions sur la syntaxe, mais le langage n’est lui-même pas parfait et je doute que le rapport béné­fice/coût soit très élevé.

    J’en ai à peu près autant au service de Dart même si, sans réel­le­ment percer pourquoi, j’ai l’im­pres­sion qu’ils ont réussi à mieux se déta­cher de Javas­cript, et donc avoir un vrai langage distinct qui « compile » du Javas­cript (c’est bien l’es­prit de Coffee aussi, mais je n’ai pas eu ce ressenti).

    Je suis proba­ble­ment plus ouvert à TypeS­cript ou Traceur, qui sont plus proches du langage d’ori­gine et dont les objec­tifs et syntaxes sont presque « le prochain Javas­cript ». On a plutôt une couche de compa­ti­bi­lité arrière, et c’est un bon système.

    L’im­pres­sion que ça donne est tout de même qu’ils ont fait leurs propres exten­sions qui n’ap­par­tiennent qu’à eux.

    Est-ce qu’on a quelque part un projet simi­laire, qui implé­mente un maxi­mum de nouveau­tés des futurs EcmaS­cript mais qui évite d’ajou­ter trop de syntaxes diver­gentes au cœur du langage ?

    Quelles sont vos expé­riences avec l’un ou l’autre de ces systèmes ?