Forum Programmation.shell [Optimisation] Mieux vaut utiliser : des programmes ? Ou des fonctions ?

Posté par .
3
6
août
2012

Bonjour,
Je suis en train de réaliser un projet. Et j'ai deux organisations possibles :

1] Config 1 : 1 utilité = 1 prog
(Résultat d'un ls sur le répertoire contenant le programme) :

0xToDec.sh*
decTo0x.sh*
do_clever_relative_resize_for_near_windows2.sh*
do_clever_relative_resize_for_near_windows.sh*
do_clever_relative_resize.sh*
do_close_current_window.sh*
do_minimize.sh*
do_move_in_real_space.sh*
do_relative_move.sh*
do_relative_resize.sh*
do_resize_with_real_dimension.sh*
do_unminimize.sh*
final_focus_next_visible_window.sh*
final_focus_next_window.sh*
final_organise.sh*
final_resize_half.sh*
get_border_for_screen.sh*
get_border_for_window.sh*
get_dimension_for_screen.sh*
get_dimension_for_window.sh*
get_list_of_windows.sh
get_list_of_windows.sh~
#get_next_visible_window_on_workspace.sh#*
get_next_visible_window_on_workspace.sh*
get_next_window_on_workspace.sh*
get_number_of_visible_window_for_workspace.sh*
get_number_of_window_for_workspace.sh*
get_number_of_worspaces.sh*
get_position_for_window.sh*
get_real_dimension_for_window.sh*
get_real_position_for_window.sh*
get_util_dimension_for_screen.sh*
get_visible_windows_on_workspace.sh*
get_windows_near_from.sh*
get_windows_on_workspace.sh*
get_workspace_for_window.sh*
killing_feature.sh*

2] Config 2 : Utilisation d'un fichier "librairie" qui regroupe tous les "sous-programmes"

cmd_close_current_window.sh*
cmd_focus_next_visible_window.sh*
cmd_focus_next_window.sh*
cmd_focus_next_window.sh~*
cmd_half_manage.sh*
cmd_killing_feature.sh*
cmd_minimize.sh*
cmd_organise.sh*
cmd_relative_move.sh*
cmd_relative_move.sh~*
cmd_relative_resize_all.sh*
cmd_relative_resize_all.sh~*
cmd_relative_resize.sh*
cmd_relative_resize.sh~*
cmd_unminimize.sh*

twm_lib.sh*

Voila. Dans ce post on m'avait conseillé de passer de la configuration 1 à la 2, (créer une librairie) c'est donc ce que j'ai fait.
J'ai créer des fonctions dans une librairie pour tous les programmes secondaires.

Mais en faisant des tests avec time :
J'obtiens une moyenne de 0m0.055s sec pour la config 1 (pleins de sous programmes) et une moyenne de 0m0.070 sec pour la config 2 (avec la librairie).

Du coup, je me demande quelle version je dois choisir … Vous que feriez vous ?
(Mon programme est un genre de gestionnaire de fenêtre)

Merci

  • # vitesse d'execution ou facilité de maintenance

    Posté par . Évalué à 6.

    les tests avec time, oui, ok, c'est un indicateur, mais fais-tu exactement les memes choses ?
    as-tu redemarré ta machine entre les deux essais pour purger les divers caches.

    l'etape suivante si tu en es à grapiller des millisecondes (15millisecondes dans ton cas), c'est
    - optimiser tes boucles et tes fonctions, tes sous shell
    - voire utiliser un langage compilé plutot que le shell

    les regrouper sous formes de bibliotheques, ca permet de ne pas avoir 50 fichiers quand tu cherches une fonction, ca aide quand il va falloir distribuer ton programme.

  • # Divers

    Posté par (page perso) . Évalué à 7.

    Je vais encore passer pour un vieux relou, mais tu gagneras plus (si ce n'est pas déjà fait) en utilisant toutes les fonctionnalités internes de bash, et à ne pas utiliser les syntaxes obsolètes
    Ensuite éviter certains fork, genre les "cat fichiers | while" les cut inutiles que l'on peut souvent remplacer par des "Parameter expansion" (aucune idée de comment le traduire celui là), les "| grep | awk" remplacable par "awk '/str/ { print $1 }'" les expr a remplacer par du "$(( ))"

    Is it a Bird? Is it a Plane?? No, it's Super Poil !!!

    • [^] # Re: Divers

      Posté par . Évalué à 2.

      Parameter expansion

      Le terme le plus exact est « développement des paramètres », comme on développe le contenu des parenthèses dans une équation. Seulement, quand on ne sait pas déjà de quoi il s'agit, le terme peut laisser perplexe quand même parce que le mot « développement » est déjà utilisé sous un grand nombre de formes différentes.

    • [^] # Re: Divers

      Posté par (page perso) . Évalué à 0.

      Je me dois de me ranger dans le rang des vieux relou, ça me fait mal mais c'est la vérité…
      100% d'accord avec toutes ces précisions.

  • # Optimisation

    Posté par . Évalué à 1.

    Ok, je vais voir de ce coté là plutôt.
    J'ai comprit l'intérêt de la lib et donc je vais rester sur cette configuration.

    En réalité si je cherche à optimiser c'est surtout parce que l'un de mes scripts (qui "organise les fenêtres pour les aligner à l'écran) dure plus de 3,5 secs.
    (Il faudrait que j'essaye de paralléliser des taches à ce niveau. Par exemple redimensionner et déplacer toutes les fenêtres en même temps, au lieu de chacune une à une.

    Pour les optimisations :
    - les cut | tr … C'est bon, car j'utilise des sed.
    - expr et $(()) , j'ai les deux formes dans mes codes …

    Et pour les boucles je vais essayer de voir si je peux arranger des choses là dessus.

    Merci pour tes conseils.

    • [^] # Re: Optimisation

      Posté par . Évalué à 2.

      Une autre piste d'optimisation est de changer d'interpréteur. En utilisant dash, par exemple, le chargement du shell sera bien plus rapide… mais les fonctionnalités étant plus limitées, tu devras faire appel à plus de fonctions externes. À l'inverse, tu pourrais utiliser zsh qui peut quasiment tout faire tout seul mais dont le chargement initial est assez lourd.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.