Comment réaliser un développement mobile haute performance
Comme nous le savons tous, les terminaux mobiles doivent non seulement se charger rapidement, mais également proposer du contenu sans expérience utilisateur. Ils doivent également fonctionner de manière fluide, comme des interactions à réponse rapide et des animations fluides...
. Comment obtenir les effets ci-dessus dans le développement réel ?
1. Confirmer les normes d'analyse des performances de rendu
2. Préparez une règle pour mesurer les normes de performances de rendu
3. Optimisez les zones les plus chronophages
.Nous pouvons grossièrement obtenir les objectifs d'optimisation suivants
Le premier est le premier moment de présentation à l'écran en ligne. les informations ont Il existe de très nombreux codes compressés, utilisent des images Webp, utilisent des sprites, un chargement à la demande, une "sortie directe", un CDN...
Le second est l'optimisation de 16 ms. Cet article se concentre sur 16 ms. optimisation.
1. Rendu du navigateur Introduction au principe
La fréquence de rafraîchissement de la plupart des appareils est de 60 fois/seconde, (1000/60 = 16,6 ms) Autrement dit, le rendu de chaque frame par le navigateur doit être terminé dans un délai de 16 ms. Au-delà de ce délai, le rendu de la page sera bloqué, affectant l'expérience utilisateur.
C'est ce qui est montré dans l'image ci-dessus
Si l'attribut est modifié plus à gauche dans l'image ci-dessus, l'impact. sera plus grand et l’efficacité sera plus faible.
Le processus de rendu du navigateur est le suivant :
Récupérez le DOM et divisez-le en plusieurs calques (RenderLayer)
Rasterisez chaque calque et dessinez-le indépendamment Dans le bitmap,
téléchargez ces bitmaps sous forme de textures sur le GPU
pour combiner plusieurs calques afin de générer l'image d'écran finale (couche ultime).
Comme vous pouvez le voir sur l'image ci-dessus, si vous changez simplement le composite (fusion des calques de rendu), l'efficacité sera grandement améliorée.
Ce qui suit est une liste approximative des styles qui modifieront quel module du processus de rendu.
Comme vous pouvez le voir sur l'image ci-dessus, la transformation et l'opacité ne changeront que le composite (fusion des calques de rendu). Pourquoi ? Parce que l'accélération GPU est activée.
Activer l'accélération GPU
Explication littérale : les textures peuvent être mappées à différents emplacements à un coût très faible, et elles peuvent également être mappées à une transformation très simple en une grille rectangulaire.
[L'interprétation littérale est très alambiquée, mais c'est toujours la même vieille vérité. N'utilisez pas de mots si vous pouvez l'expliquer clairement avec des images. 】
Conseils : Sélectionnez d'abord une image de la timeline, puis sélectionnez l'onglet d'étiquette de calque ci-dessous, vous pouvez faire glisser le module vers la gauche et la droite pour apparaître en 3D
On peut voir que la page est composée des calques suivants :
Bien que ce que l'on finit par voir sur le navigateur ne soit qu'une photocopie, c'est à dire qu'il n'y a qu'un seul calque au final. Semblable au concept de "calque" dans le logiciel PhotoShop, tous les calques de vue disponibles sont finalement fusionnés et une image est affichée à l'écran
Mais en fait, une page sera Étant donné que certaines règles sont divisées en couches correspondantes, une fois indépendantes, elles n'affecteront pas la disposition des autres DOM, car une fois modifiées, elles sont uniquement "collées" sur la page.
Actuellement, les facteurs suivants amèneront Chrome à créer des calques :
Transformation 3D ou perspective (transformation de perspective) Propriétés CSS
Utilisez l'élément
Plugins hybrides (tels que Flash)
Faites des animations CSS sur votre propre opacité ou utilisez un élément transformé en webkit d'animation
a un CSS accéléré filtre élément
l'élément a un nœud descendant qui contient une couche composite (en d'autres termes, un élément a un élément enfant, l'élément enfant est dans son propre calque)
L'élément a un élément frère avec un z-index inférieur et contient un calque composite (en d'autres termes, l'élément est rendu au-dessus du calque composite)
Dans les navigateurs basés sur webkit, si la situation ci-dessus se produit, une couche indépendante sera créée.
Veillez à ne pas créer trop de couches de rendu, ce qui signifie une nouvelle allocation de mémoire et une gestion des couches plus complexe. N'abusez pas de l'accélération GPU, faites attention à ce que les mises en page composites dépassent 16 ms
Cela dit tant de principes de rendu par navigateur, il est inutile de mesurer sans règle. Alors choisissons une règle à mesurer : la chronologie des outils de développement de Google.
2. Fonctions communes de l'outil de développement Google Timeline
1. Après avoir cliqué sur Enregistrer dans le coin supérieur gauche, l'enregistrement se termine. Ce qui suit sera généré. La zone rouge est l'image Montez et vous pouvez voir la fréquence de chaque image. Si elle est > 60 ips, elle est relativement fluide.
2. Sous la chronologie, vous pouvez voir la consommation de temps de chaque module, et vous pouvez localiser le temps- ceux qui consomment Au-dessus de la fonction, optimisez la fonction.
3. Suivez les étapes ci-dessous pour sélectionner et vous pourrez voir le calque indépendant et mettre en surbrillance la zone redessinée, qui est. pratique Trouvez les zones de redessinage inutiles et optimisez-les
Après sélection, les 2 bordures de couleurs suivantes apparaîtront sur la page actuelle
bordure jaune : Les éléments avec des transformations 3D animées sont placés dans un nouveau calque composite (calque composé) pour restituer
grille bleue : Ces blocs peuvent être considérés comme des unités à un niveau inférieur au calque, Chrome Prenant ces morceaux comme unités, le le contenu d'un morceau est téléchargé sur le GPU à la fois.
Des outils sont également disponibles, et les principes de rendu du navigateur sont également connus. La prochaine étape consiste à optimiser en fonction de projets réels.
3. projets réels optimisation de 16,6 ms
Combiné avec l'organigramme de rendu ci-dessus, nous pouvons analyser et optimiser certaines des étapes suivantes de manière ciblée
Optimiser l'efficacité d'exécution de JavaScript
Réduisez la portée et la complexité du calcul de style
Évitez les mises en page complexes et à grande échelle
Simplifiez la complexité du dessin et réduisez la zone de dessin
Prioriser l'utilisation des couches de rendu pour fusionner les attributs, Nombre de couches de contrôle
Fonction de traitement anti-rebond pour les événements de saisie utilisateur (appareils mobiles)
1. séparation d'écriture, opérations par lots
Lorsque le script JavaScript est en cours d'exécution, les valeurs d'attribut de style d'élément qu'il peut obtenir proviennent toutes du cadre précédent et ce sont toutes d'anciennes valeurs.
Par conséquent, si vous apportez des modifications au nœud de l'élément avant d'obtenir les attributs dans le cadre actuel, le navigateur appliquera d'abord les modifications d'attribut, puis exécutera le processus de mise en page et enfin exécutera la logique JavaScript.
// 先写后读,触发强制布局 function logBoxHeight() { // 更新box样式 box.classList.add('super-big'); // 为了返回box的offersetHeight值 // 浏览器必须先应用属性修改,接着执行布局过程 console.log(box.offsetHeight); }
Après optimisation :
// 先读后写,避免强制布局 function logBoxHeight() { // 获取box.offsetHeight console.log(box.offsetHeight); // 更新box样式 box.classList.add('super-big'); }
2. Résultats du calcul du cache de fermeture (fonctions qui nécessitent des appels et des calculs fréquents)
getMaxWidth: (function () { var cache = {}; function getwidth() { if (maxWidth in cache) { return cache[maxWidth]; } var target = this.node, width = this.width, screen = document.body.clientWidth, num = target.length, maxWidth = num * width + 10 * num + 20 - screen; cache[maxWidth] = maxWidth; return maxWidth; } return getwidth; })(),
Après avoir changé cette méthode, cela fonctionne tout simplement ~ Cela réduit de plus de 10 ms
Anti-rebond de la fonction de traitement des événements d'entrée utilisateur
Si l'élément touché est lié à une fonction d'entrée de traitement d'événements , telle que touchstart/touchmove/touchend, alors le thread de fusion de la couche de rendu doit attendre que ces fonctions de traitement liées se terminent avant l'exécution. l'opération de défilement de la page de l'utilisateur est bloquée et le comportement affiché est que le défilement est retardé ou bloqué.
En bref, vous devez vous assurer que toute fonction de traitement liée à l'événement d'entrée utilisateur peut être exécutée rapidement afin de libérer du temps pour que le thread de fusion de la couche de rendu termine son travail.
Les fonctions de traitement des événements d'entrée, telles que le traitement des événements de défilement/toucher, seront appelées et exécutées avant requestAnimationFrame. Par conséquent, si vous modifiez les attributs de style dans le gestionnaire d'événements d'entrée ci-dessus, ces opérations seront temporairement stockées par le navigateur.
Ensuite, lors de l'appel de requestAnimationFrame, si vous lisez les attributs de style au début, cela déclenchera l'opération de mise en page de synchronisation forcée du navigateur (c'est-à-dire effectuer la mise en page au stade javascript), donc cela entraînera plusieurs mises en page et une faible efficacité.
L'optimisation est la suivante :
window.requestAnimationFrame(function () { context.animateTo(nowPos); //需要更新位置的交给RAF });
4. Réduire les redessinages inutiles
En continuant de ce qui précède, après avoir activé la peinture. clignotant, vous pouvez voir quelles zones le navigateur repeint. J'ai constaté que certaines zones de redessinage inutiles étaient également redessinées~ Activer l'optimisation GPU pour celles-ci (mentionnées ci-dessus)
Regardez directement l'effet de timeline, tout est vert~ J'ai enfin laissé tomber mes soucis
Il existe de nombreux conseils pour le développement mobile Aujourd'hui, je vais vous apporter cette astuce de développement haute performance. Plus Pour plus de connaissances, s'il vous plaît. continuez à prêter attention à notre site Web PHP.cn
Lecture connexe :
Le développement de terminaux mobiles gère les écrans horizontaux et verticaux des appareils mobiles
Quelques conseils pour le développement mobile_html/css_WEB-ITnose
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



Cet outil de programmation assistée par l'IA a mis au jour un grand nombre d'outils de programmation assistée par l'IA utiles à cette étape de développement rapide de l'IA. Les outils de programmation assistés par l'IA peuvent améliorer l'efficacité du développement, améliorer la qualité du code et réduire les taux de bogues. Ils constituent des assistants importants dans le processus de développement logiciel moderne. Aujourd'hui, Dayao partagera avec vous 4 outils de programmation assistés par l'IA (et tous prennent en charge le langage C#). J'espère que cela sera utile à tout le monde. https://github.com/YSGStudyHards/DotNetGuide1.GitHubCopilotGitHubCopilot est un assistant de codage IA qui vous aide à écrire du code plus rapidement et avec moins d'effort, afin que vous puissiez vous concentrer davantage sur la résolution de problèmes et la collaboration. Git

Selon les informations du 23 juillet, le blogueur Digital Chat Station a annoncé que la capacité de la batterie du Xiaomi 15 Pro a été augmentée à 6 000 mAh et prend en charge une charge flash filaire de 90 W. Ce sera le modèle Pro avec la plus grande batterie de la série numérique de Xiaomi. Digital Chat Station a précédemment révélé que la batterie du Xiaomi 15Pro a une densité énergétique ultra-élevée et que la teneur en silicium est bien supérieure à celle des produits concurrents. Après que les batteries à base de silicium aient été testées à grande échelle en 2023, les batteries à anode en silicium de deuxième génération ont été identifiées comme l'orientation future du développement de l'industrie. Cette année marquera le pic de la concurrence directe. 1. La capacité théorique en grammes du silicium peut atteindre 4200 mAh/g, soit plus de 10 fois la capacité en grammes du graphite (la capacité théorique en grammes du graphite est de 372 mAh/g). Pour l'électrode négative, la capacité lorsque la quantité d'insertion d'ions lithium atteint le maximum est la capacité théorique en grammes, ce qui signifie que sous le même poids

Didacticiel d'application mobile de développement du langage Go Alors que le marché des applications mobiles continue de croître, de plus en plus de développeurs commencent à explorer comment utiliser le langage Go pour développer des applications mobiles. En tant que langage de programmation simple et efficace, le langage Go a également montré un fort potentiel dans le développement d'applications mobiles. Cet article présentera en détail comment utiliser le langage Go pour développer des applications mobiles et joindra des exemples de code spécifiques pour aider les lecteurs à démarrer rapidement et à commencer à développer leurs propres applications mobiles. 1. Préparation Avant de commencer, nous devons préparer l'environnement et les outils de développement. tête

Le 3 mars 2022, moins d'un mois après la naissance de Devin, le premier programmeur d'IA au monde, l'équipe NLP de l'Université de Princeton a développé un agent SWE pour programmeur d'IA open source. Il exploite le modèle GPT-4 pour résoudre automatiquement les problèmes dans les référentiels GitHub. Les performances de l'agent SWE sur l'ensemble de tests du banc SWE sont similaires à celles de Devin, prenant en moyenne 93 secondes et résolvant 12,29 % des problèmes. En interagissant avec un terminal dédié, SWE-agent peut ouvrir et rechercher le contenu des fichiers, utiliser la vérification automatique de la syntaxe, modifier des lignes spécifiques et écrire et exécuter des tests. (Remarque : le contenu ci-dessus est un léger ajustement du contenu original, mais les informations clés du texte original sont conservées et ne dépassent pas la limite de mots spécifiée.) SWE-A

"Opération Delta" lancera aujourd'hui (7 mars) un test PC à grande échelle appelé "Codename: ZERO". Le week-end dernier, ce jeu a organisé un événement d'expérience flash mob hors ligne à Shanghai, et 17173 a également eu la chance d'être invité à participer. Ce test remonte à un peu plus de quatre mois depuis le dernier, ce qui nous rend curieux, quels nouveaux points forts et surprises l'Opération Delta apportera-t-elle en si peu de temps ? Il y a plus de quatre mois, j'ai expérimenté « l'Opération Delta » lors d'une séance de dégustation hors ligne et la première version bêta. A cette époque, le jeu n'ouvrait que le mode "Action Dangereuse". Pourtant, l’opération Delta était déjà impressionnante pour l’époque. Dans un contexte où les grands constructeurs se ruent sur le marché du jeu mobile, un tel FPS comparable aux standards internationaux

PHP appartient au backend du développement Web. PHP est un langage de script côté serveur, principalement utilisé pour traiter la logique côté serveur et générer du contenu Web dynamique. Par rapport à la technologie front-end, PHP est davantage utilisé pour les opérations back-end telles que l'interaction avec les bases de données, le traitement des demandes des utilisateurs et la génération du contenu des pages. Ensuite, des exemples de code spécifiques seront utilisés pour illustrer l'application de PHP dans le développement back-end. Tout d'abord, regardons un exemple de code PHP simple pour se connecter à une base de données et interroger des données :

« Comprendre VSCode : à quoi sert cet outil ? » 》En tant que programmeur, que vous soyez débutant ou développeur expérimenté, vous ne pouvez pas vous passer de l'utilisation d'outils d'édition de code. Parmi les nombreux outils d'édition, Visual Studio Code (VSCode en abrégé) est très populaire parmi les développeurs en tant qu'éditeur de code open source, léger et puissant. Alors, à quoi sert exactement VSCode ? Cet article approfondira les fonctions et les utilisations de VSCode et fournira des exemples de code spécifiques pour aider les lecteurs.

Récemment, Honor Mobile a organisé une conférence de lancement de nouveau produit et a officiellement lancé le Honor Magic6RSR Porsche Design. Le 22 mars, CNMO a appris que le Honor Magic 6 RSR Porsche Design était officiellement lancé à la vente, avec seulement une version 24 Go + 1 To disponible pour 9 999 yuans. Honor Magic6 RSR adopte une apparence de design Porsche, inspirée des éléments classiques des super voitures de sport Porsche. Le design de la ligne arrière s'inspire du design de la ligne volante de Porsche, et le module de caméra adopte le design hexagonal emblématique, donnant au produit une sensation tridimensionnelle et dynamique distincte. De plus, le produit est disponible en deux couleurs, gris agate et rose glace, qui sont réglées par les maîtres originaux de Porsche, soulignant encore davantage la beauté unique de son design. En termes de technologie d'écran, Honor Magic6RSR maintient
