Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

StringBuilder en JavaScript : concatenation de String

En JavaScript, comme en .net ou ava, les strings sont immutables cela veut dire que l'objet ne peut pas être modifié après sa création.

Si nous oublions les optimisations des compilateurs, l'exécution du code ci dessous créé 3 instances de la classe String : "hello", "Cyril" et "hello Cyril".

var s = "hello"; s += " Cyril"

De ce fait, concaténer de nombreuses string va rapidement causer des problèmes de performance (mémoire et CPU) :

var d = new Date(); var s = ''; for(var i = 0; i < 100000; i++) s += 'c'; Sys.Debug.trace(new Date() - d);

Le code ci-dessus met plus de 8 secondes sous IE7 et environ 150ms pour FF

Une des solutions consiste à utiliser un tableau afin de rajouter toutes les parties de String à l'intérieur puis d'utiliser la méthode join.

var d = new Date(); var s = []; for(var i = 0; i < 100000; i++) s[s.length] = 'c'; s = s.join(''); Sys.Debug.trace(new Date() - d);

Grâce à cette astuce, on passe de plus de 8000ms à 110ms pour IE7 et de 150ms à 140ms pour FF. Il est intéressant de constater que l'on utilise s[s.length] plutôt que la méthode s.push, en effet cette astuce se trouve plus rapide.

Vous pouvez également utiliser le tableau / StringBuilder dans une version allêgé, exemple :

var xaml = [ '<Canvas xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ', ' x:Name="NavigationTray" Visibility="Collapsed">', ' <Canvas.RenderTransform>', ' <TranslateTransform x:Name="SlideTransform" />', ' </Canvas.RenderTransform>', ' <Canvas.Resources>', ' <Storyboard x:Name="FadeStoryboard" Storyboard.TargetName="NavigationTray"', ' Storyboard.TargetProperty="Opacity">', ' <DoubleAnimation x:Name="FadeAnimation" />', ' </Storyboard>', ' <Storyboard x:Name="SlideStoryboard" Storyboard.TargetName="SlideTransform"', ' Storyboard.TargetProperty="Y">', ' <DoubleAnimationUsingKeyFrames> ', ' <SplineDoubleKeyFrame x:Name="SlideKeyFrame1" ', ' KeySpline="0,0 0,0" KeyTime="0:0:0" />', ' <SplineDoubleKeyFrame ', ' x:Name="SlideKeyFrame2" KeySpline="0,0 0,1" />', ' </DoubleAnimationUsingKeyFrames> ', ' </Storyboard>', ' </Canvas.Resources>', '</Canvas>' ].join('');

Microsoft Ajax Library introduit même une classe toute faite : Sys.StringBuilder

L'équipe JScript à annoncé qu'on aura plus un tel écart de performances avec IE8 : Performance issues with "String Concatenation" in JScript.

Posted: dimanche 17 février 2008 03:19 par cyril
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01