human
Je constate des performances très variables en fonction du nombre de sauts de ligne présents dans le fichier que je visite.
Voici un exemple. J'ai deux fichiers JSON :
```$ wget https://github.com/Wilfred/ReVo-utilities/blob/a4bdc40dd2656c496defc461fc19c403c8306d9f/revo-export/dictionary.json ?raw=true -O one_line.json
$ python -m json.tool pretty_printed.json
```
Ce sont deux fichiers JSON avec le même contenu. ```one_line.json``` est un fichier JSON de 18 MiB sans aucun saut de ligne. ```pretty_printed.json``` contient des sauts de ligne et des espaces ajoutés, ce qui le rend de 41 MiB.
Cependant, le fichier plus volumineux découpé en plusieurs lignes s'ouvre beaucoup plus rapidement dans Emacs, que ce soit en mode Javascript ou en mode Fondamental.
Pourquoi Emacs a-t-il de si mauvaises performances avec les lignes longues, alors qu'il s'agit en réalité de moins d'octets ? Y a-t-il quelque chose que je puisse faire pour améliorer les performances sans reformater les données en dehors d'Emacs
gpt
La gestion des lignes longues par Emacs n'est pas très bien optimisée. Pour un certain nombre d'opérations, Emacs doit parcourir toute la ligne à plusieurs reprises. Par exemple, pour afficher une ligne, Emacs doit déterminer la hauteur de la ligne, ce qui nécessite de parcourir toute la ligne pour trouver le glyphe le plus grand. De plus, la recherche d'affichage bidirectionnel consomme beaucoup de temps. Vous pouvez obtenir des informations supplémentaires, par exemple, dans la docstring de ```cache-long-line-scans``` (renommée ```cache-long-scans``` dans la version 24.4).

Vous pouvez essayer de définir ```bidi-paragraph-direction``` sur ```left-to-right``` et de définir ```bidi-inhibit-bpa``` (nouveau dans Emacs 27, voir note de bas de page 1) sur ```t``` pour améliorer la vitesse (voir note de bas de page 2). Cela supprime certains contributeurs importants aux analyses de lignes, mais malheureusement pas tous.

La meilleure option est d'ajouter des sauts de ligne. Vous pouvez rediriger un fichier JSON via, par exemple, ```python -c 'import json, sys ; json.dump(json.load(sys.stdin), sys.stdout, indent=2)'``` pour ajouter des sauts de ligne et améliorer la lisibilité en général.

Note de bas de page 1 : ```bidi-inhibit-bpa``` est nouveau dans Emacs 27. Le définir sur ```t``` peut avoir un effet notable (parfois spectaculaire) dans les cas où (a) une ligne physique est très longue et (b) la ligne comprend de nombreuses parenthèses et/ou accolades, en particulier si elles sont imbriquées.
Note de bas de page 2 : Il y a aussi ```bidi-display-reordering```, mais cela n'est destiné qu'à des fins internes/de débogage. Le définir sur ```nil``` peut améliorer les performances, cependant, il s'agit d'un paramètre non pris en charge qui peut causer d'autres problèmes, il n'est donc pas recommandé. Dans Emacs 27, la combinaison de la définition de ```bidi-paragraph-direction``` et ```bidi-inhibit-bpa``` est une configuration prise en charge qui offre à peu près le même gain de performances.