SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
Feinabstimmung für Ihr Lotusscript




       Jens-B. Augustiny, LIGONET GmbH




9. März 2010             Entwicklercamp 2010 / LIGONET GmbH   1
Who is who?


  ●   Jens-B. Augustiny, LIGONET GmbH
        Biel, Schweiz / Sindelfingen
  ●   Seit über 15 Jahren im Notes-Umfeld tätig
  ●   Entwicklung und Administration




9. März 2010        Entwicklercamp 2010 / LIGONET GmbH   2
Agenda

 ●   Was denken Sie, ist langsam?
               –   Wo tauchen Leistungsprobleme auf?
 ●   Woher nur kommt das?
               –   Tips und Werkzeuge, die Schwachstellen zu
                     erkennen
 ●   Nie mehr da durch!
               –   Tips zur Vermeidung von Leistungsschwächen



9. März 2010                 Entwicklercamp 2010 / LIGONET GmbH   3
Was glauben Sie ist langsam?




9. März 2010          Entwicklercamp 2010 / LIGONET GmbH   4
Schlechte Leistung – was genau
              meinen wir eigentlich?
      ●   Schlechtes Programm ....
      ●   Lieferzeiten statt Antwortzeiten
      ●   Unmöglich damit zu arbeiten!
      ●   Dieser Ablauf muss unbedingt
            verbessert werden

      ●   Wer hat diese Argumente nicht schon gehört?

      ●   Stellen Sie sicher, dass Sie das richtige Problem
            angehen!
9. März 2010           Entwicklercamp 2010 / LIGONET GmbH     5
9. März 2010   Entwicklercamp 2010 / LIGONET GmbH   6
Leistung – wovon eigentlich?
         ●   Empfundene Leistung
         ●   Der Benutzer empfindet, dass die Applikation nicht das
               gewünschte Resultat liefert.
         ●   Sehr schwer zu analysieren
         ●   Mögliche Lösungen:
                    ●   Bessere Ausbildung der Benutzer: Funktionalität erklären
                    ●   Verbesserung der Wahrnehmung: Mehr Informationen während der
                         Verarbeitung oder der Dateneingabe
                    ●   Den Workflow überarbeiten und verbessern
     ●       Das Empfinden der Benutzer kann stark beeinflussen, wie die
             Leistung eingeschätzt wird: Frustrierende oder langwierige
             Eingaben können als schlechte Leistung angekreidet werden
9. März 2010                     Entwicklercamp 2010 / LIGONET GmbH                    7
Reale Leistung
          ..... oder eher das Fehlen derselben ....
      ●   Flaschenhälse, die durch Messung erkannt werden
      ●   Fast unmöglich, diese vorauszusagen
      ●   Unterschiede zwischen Test- und Produktionsumgebung
      ●   Jede Aussage ohne Messung ist Spekulation
      ●   Die Messung selbst kann das Resultat beeinflussen


      ●   Enorm wichtig, Messdaten zu haben, bevor man etwas
            ändert. Genau wie bei den Endusern haben auch
            Entwickler ihre eigenen Ideen, welches die Ursache
            von Problemen sein könnte ...
9. März 2010                    Entwicklercamp 2010 / LIGONET GmbH   8
Beispiel

  ●   Viermal derselbe Code
  ●   2 Variablen werden verändert: Die Loop-Logik und
        die Art, wie auf die Datenbank-Eigenschaften
        zugegriffen wird.
  ●   Fragen:
               –   Welche der 4 Varianten ist die Schnellste?
               –   Warum ist die von Ihnen gewählte Variante schnell?



9. März 2010                  Entwicklercamp 2010 / LIGONET GmbH        9
Der Beispielcode
          Forall v In db.views                        u = Ubound(db.views)
A             s = v.name
              Print s
                                                      For i = 0 To u
                                                           s =db.Views(i).name
                                                                                 C
          End Forall                                       Print    s
                                                      Next

          tmpView = db.Views                          tmpView = db.Views

          Forall v In tmpView                         u = Ubound(tmpView)

B             s = v.name
              Print s
                                                      For i = 0 To u
                                                           s =tmpView(i).name
                                                                                 D
          End Forall                                       Print    s
                                                      Next




    9. März 2010                  Entwicklercamp 2010 / LIGONET GmbH             10
Resultate
    Erster Lauf: B – D – A – C




    Zweiter Lauf (caching): D – B – A – C




9. März 2010               Entwicklercamp 2010 / LIGONET GmbH   11
Folgerungen

  ●   Ergebnisse können Ueberraschen
  ●   Messungen sollten in realistischer Umgebung
       durchgeführt werden
  ●   Datenmenge und Datenstruktur sollte der Realität
       entsprechen, die meisten Testumgebungen sind
       ungenüngend
  ●   Die Analyse muss extrem systematisch
       durchgeführt werden, zB. systematische
       Eingrenzung
9. März 2010        Entwicklercamp 2010 / LIGONET GmbH   12
Woher kommt das den alles?




                     ●Sie benötigen aktuelle Werte, um
                       die Arbeit etwas aufzubessern zu
                       begründen. Woher sollen die
                       kommen?
9. März 2010          Entwicklercamp 2010 / LIGONET GmbH   13
Now für die Zeitmessung

     ●   Beispiel:
                                  BaseTime = Now
                                    [.... Code hier ... ]
                                  Print “Time used: “ & Now – BaseTime
    ●    Vorteil:
               –   Einfach und billig
    ●    Nachteile:
               –   Veränderung des Codes
               –   Platzierung ist kritisch
               –   Ungenügende Auflösung
9. März 2010                 Entwicklercamp 2010 / LIGONET GmbH      14
High Resolution Timing -
                       GetThreadInfo()
      ●   Von Brude Perry einst publizierter nicht dokumentierter
            Funktionsaufruf, mittlerweile gilt das Verfahren als legal:
      ●   http://searchdomino.techtarget.com/tip/1,289483,sid4_gci895240,00.html?FromTaxonomy=%2Fpr%2F283841

                stc = GetThreadInfo(LSI_THREAD_TICKS) ' get the
               starting tick count
                  '[....the code you want To Time...]
               'get the final tick count
               ftc = GetThreadInfo(LSI_THREAD_TICKS)
               'get the ticks per second
               tps = GetThreadInfo(LSI_THREAD_TICKS_PER_SEC)
               'final tick count minus starting tick count divided by
               ticks per second yields duration.
               t = (ftc - stc) / tps




9. März 2010                             Entwicklercamp 2010 / LIGONET GmbH                                    15
GetThreadInfo

    ●   Vorteile:
               –   Einfache Implementierung
               –   Bessere Auflösung als Now
   ●    Nachteile:
               –   Veränderung des Codes
               –   Falsche Platzierung ergibt falsche Resultate
               –   GetThreadInfo ist nicht garantiert vorhanden


9. März 2010                 Entwicklercamp 2010 / LIGONET GmbH   16
Wie bekommt man die Resultate?

●   PRINT: Resultat in der Statusleiste (Client) oder in
     log.nsf (Server)
●   Besser:
                   –   Ausgabe in ein Dokument
                   –   Ausgabe in ein Profile-Dokument
                   –   Ausgabe in eine Analyse-Datenbank .... ähhh … Anwendung




9. März 2010           Entwicklercamp 2010 / LIGONET GmbH                17
Beispiel: Man mache es
                 wiederverwendbar
  Class debugTimer
          Private Start As Variant
     Private fnName As String

    Sub New( fn As String )
       Set Start = Now
      fnName = fn
    End Sub
    Sub Delete
      Print fnName & " benötigte " & Now-Start & " Sekunden."
    End Sub
  End Class




9. März 2010           Entwicklercamp 2010 / LIGONET GmbH       18
Beispiel: Man mache es
                 wiederverwendbar
  Sub Initialize()
    Dim fnTime As New debugTimer( GetThreadInfo(LSI_THREAD_PROC) )
    Dim i As Integer

      While i < 1000
        Print i
        i = i + 1
      Wend

  End Sub




9. März 2010           Entwicklercamp 2010 / LIGONET GmbH     19
Systemeigenes Profiling

  ●   Eingeführt mit Lotus Notes / Domino 7
                              ®           ®              ®




  ●   Nur für Agenten und Web Services
  ●   Java und LotusScript
  ●   Aktivierung in den Eigenschaften des Agenten/WS
  ●   Resultate durch Rechtsklick auf Agent oder WS
  ●   Es gibt nur Werte für reine Notes/Domino Objekte


9. März 2010        Entwicklercamp 2010 / LIGONET GmbH       20
Systemeigenes Profiling: Beispiel

    Sub Initialize
       Dim db As New NotesDatabase( "", "names.nsf" )
       i = 0
       Dim s As String
       For i = 0 To UBound(db.views)
          s =db.Views(i).name
       Print   s
       Next
    End Sub




9. März 2010        Entwicklercamp 2010 / LIGONET GmbH   21
Systemeigenes Profiling: Beispiel



                        Agent laufen
                          lassen




9. März 2010      Entwicklercamp 2010 / LIGONET GmbH   22
Systemeigenes Profiling: Beispiel




9. März 2010      Entwicklercamp 2010 / LIGONET GmbH   23
Teamstudio Profiler
  ●   Messung eigener Funktionen und Routinen
  ●   Zeitangaben pro Zeile
  ●   Eine Menge an zusätzlichen Analysewerten
  ●   Server und Client
  ●   LotusScript only
  ●   Anwendung wird sehr stark verlangsamt
  ●   Kostenpflichtig

9. März 2010        Entwicklercamp 2010 / LIGONET GmbH   24
Teamstudio Profiler - Beispiel




9. März 2010           Entwicklercamp 2010 / LIGONET GmbH   25
Nein, ich will da nicht wieder durch




9. März 2010   Entwicklercamp 2010 / LIGONET GmbH   26
Häufige Probleme

      ●   Hilfsmittel sind zwingend bei bestehenden
           Programmen und Leistungsproblemen. Besser
           ist jedoch, die Probleme von Anfang an zu
           vermeiden.

      ●   Manche Probleme sind reale Fehler, andere
           häufig nur Sorglosigkeit



9. März 2010          Entwicklercamp 2010 / LIGONET GmbH   27
GetNthDocument()

      ●   Durchlaufen einer Doc-Collection mit
           GetNThDocument(n) ist bedeutend langsamer
           als mit GetFirstDocument und
           GetNextDocument (doc)
      ●   Viel wurde darüber schon gesagt, einiges ist
           online nachlesbar

      ●   http://bobzblog.com/tuxedoguy.nsf/dx/getnth-revisited-helpful-function-or-spawn-of-the-devil
      ●   http://www.lotusgeek.com/LotusGeek/LotusGeekBlog.nsf/d6plinks/ROLR-7HHPER



9. März 2010                       Entwicklercamp 2010 / LIGONET GmbH                                    28
Ueberprüfen Sie Ihre Loops

found=False

Do Until (selected_doc Is Nothing)
   If (selected_doc.Form(0)="fa_Term") Then
       found=True
   End If
   Set selected_doc=term_collection.GetNextDocument(selected_doc)
Loop

Set selected_doc=term_collection.GetFirstDocument()

If Not(found=True) Then
   MessageBox NO_TERM_DOCUMENTS_SELECTED_TO_DELETE, 16, DELETE_ERROR
   Exit Sub
End If


 9. März 2010          Entwicklercamp 2010 / LIGONET GmbH           29
… und korrigieren Sie die Fehler

found=False

Do Until (selected_doc Is Nothing)
   If (selected_doc.Form(0)="fa_Term") Then
       found=True
       ' loop sollte hier abgebrochen werden!!
   End If
   Set selected_doc=term_collection.GetNextDocument(selected_doc)
Loop

Set selected_doc=term_collection.GetFirstDocument()

If Not(found=True) Then
   MessageBox NO_TERM_DOCUMENTS_SELECTED_TO_DELETE, 16, DELETE_ERROR
   Exit Sub
End If

 9. März 2010          Entwicklercamp 2010 / LIGONET GmbH           30
Fehler beheben: Verrotteter Code
         ●   Tatsache ist, dass Code sich verändert:
                man entdeckt bessere Wege
         ●   Stellen Sie sicher, dass Codeänderungen zu Ende geführt werden, sonst kann
                die Leistung leiden.
              Sub Queryopen(...)
                 Dim session As New NotesSession
                 Set db = session.currentdatabase
                 Set view = db.getview("People")

                 Set ProfileDoc = db.getprofiledocument("PickerView")
              ' ProfileDoc.Pview = "People"
              End Sub

     ●       Die Variable “view” wird nirgends im Code verwendet. Db.Getview ist ein teurer
                Funktionsaufruf, speziell dann, wenn das Resultat nie verwendet wird.



9. März 2010                       Entwicklercamp 2010 / LIGONET GmbH                         31
Achtung mit verschachtelten IF

        ●   Anders als Sprachen wie C und Java wird
             bei LotusScript immer die gesamte
             Bedingung ausgewertet
            x = 1
            If x = 0 And checkresult( res ) = 0 Then
              'do some stuff
            End If
    ●   Checkresult() wird in jedem Fall ausgeführt, auch wenn x nicht 0 ist.
          Leistungsprobleme können sich in solch einfachen Anweisungen
          verstecken.



9. März 2010                 Entwicklercamp 2010 / LIGONET GmbH                 32
Achtung mit verschachtelten IF:
                  die Lösung


           x = 1
           If x = 0 Then
              If checkresult( res ) Then
                 'do some stuff
              End If
           End If
    ●   Durch die Auflösung der Bedingung in zwei Aufrufe wirde Checkresult()
          nur noch aufgerufen, wenn die erste Bedingung True ergibt.




9. März 2010                Entwicklercamp 2010 / LIGONET GmbH                  33
Variablen – Variant ist langsamer
●    Abgesehen davon, dass Variants
      allgemein häufig zu Fehlern führen,
      sind sie ausserdem sehr langsam.
●    LotusScript muss bei jedem Zugriff den
       Typ bestimmen und eine
       Datenkonversion durchführen.
●    Keine falsche Müdigkeit!
      Option Declare gehört in jedes
      LotusScript Programm


    9. März 2010        Entwicklercamp 2010 / LIGONET GmbH   34
Loops – Es gibt schnellere und
                    langsamere
●Forall ist viel schneller beim Durchlauf von Arrays
●For ... Next ist schneller als Do ..... Loop oder While ..... Wend




9. März 2010                Entwicklercamp 2010 / LIGONET GmbH        35
Und was noch ....

  ●   Zugriff auf ausgewählte Documente ist schneller
       mit Hilfe einer Ansicht als einer Document
       Collection
  ●   Zugriff auf Notes Objecte ist schneller durch eine
       temporäre Variable als durch einen Direktzugriff
       – wenn man den Wert mehr als einmal benötigt.




9. März 2010         Entwicklercamp 2010 / LIGONET GmbH    36
Zusammenfassung
  ●   Es gibt technische und nicht technische Gründe für
        fehlende Performance
  ●   Wenn es technische Gründe sind, ist jede Aussage ohne
       Messung reine Spekulation
  ●   Es gibt keine zwei gleiche Fälle
  ●   Systematische Top down Analyse ist extrem wichtig
  ●   Manchmal ist ein Redesign die beste Lösung
  ●   Es gibt ein paar “best practices”


9. März 2010           Entwicklercamp 2010 / LIGONET GmbH     37
Danke!

Fragen?
●


          Vielleicht gibt es sogar Antworten ..... :-)


          Jens-B. Augustiny - LIGONET GmbH
          augustiny.j@ligonet.ch
          www.ligonet.ch




9. März 2010                    Entwicklercamp 2010 / LIGONET GmbH   38

Contenu connexe

En vedette

Easy Diplomacy Summer Party, 13 giugno 2013
Easy Diplomacy Summer Party, 13 giugno 2013Easy Diplomacy Summer Party, 13 giugno 2013
Easy Diplomacy Summer Party, 13 giugno 2013Easy Diplomacy
 
Autobiography Of Steve Jobs
Autobiography Of Steve JobsAutobiography Of Steve Jobs
Autobiography Of Steve JobsJahzan Ahamed
 
Vienna Convention Bureau - Christian Mutschlechner
Vienna Convention Bureau - Christian MutschlechnerVienna Convention Bureau - Christian Mutschlechner
Vienna Convention Bureau - Christian Mutschlechnerbcnmoments
 
Gonzato Contract Portfolio 2014
Gonzato Contract Portfolio 2014Gonzato Contract Portfolio 2014
Gonzato Contract Portfolio 2014TwenAfric bv
 
R4U DENIM FATORY.business plan
R4U DENIM FATORY.business planR4U DENIM FATORY.business plan
R4U DENIM FATORY.business planR4U DENIM FACTORY
 
RESTful modules in zf2
RESTful modules in zf2RESTful modules in zf2
RESTful modules in zf2Corley S.r.l.
 
Manual xsara-and-xsara-picasso-bsi-operating-principles
Manual  xsara-and-xsara-picasso-bsi-operating-principlesManual  xsara-and-xsara-picasso-bsi-operating-principles
Manual xsara-and-xsara-picasso-bsi-operating-principlesJeronimo Nunes
 
Mythes, légendes et monstres: Obstacles sur le chemin vers le Graal de l'Entr...
Mythes, légendes et monstres: Obstacles sur le chemin vers le Graal de l'Entr...Mythes, légendes et monstres: Obstacles sur le chemin vers le Graal de l'Entr...
Mythes, légendes et monstres: Obstacles sur le chemin vers le Graal de l'Entr...François Bachmann
 
Fannie mae bmc remedy its mv7 interface diagram_v6_021009
Fannie mae bmc remedy its mv7 interface diagram_v6_021009Fannie mae bmc remedy its mv7 interface diagram_v6_021009
Fannie mae bmc remedy its mv7 interface diagram_v6_021009Accenture
 

En vedette (17)

Dokumentation
DokumentationDokumentation
Dokumentation
 
Nacho blanco tp1
Nacho   blanco tp1Nacho   blanco tp1
Nacho blanco tp1
 
Rincon Ser0209
Rincon Ser0209Rincon Ser0209
Rincon Ser0209
 
Easy Diplomacy Summer Party, 13 giugno 2013
Easy Diplomacy Summer Party, 13 giugno 2013Easy Diplomacy Summer Party, 13 giugno 2013
Easy Diplomacy Summer Party, 13 giugno 2013
 
Proyecto empresarial
Proyecto empresarialProyecto empresarial
Proyecto empresarial
 
2016-11-16 infoveranstaltung-hrm2_def
2016-11-16 infoveranstaltung-hrm2_def2016-11-16 infoveranstaltung-hrm2_def
2016-11-16 infoveranstaltung-hrm2_def
 
Autobiography Of Steve Jobs
Autobiography Of Steve JobsAutobiography Of Steve Jobs
Autobiography Of Steve Jobs
 
Vienna Convention Bureau - Christian Mutschlechner
Vienna Convention Bureau - Christian MutschlechnerVienna Convention Bureau - Christian Mutschlechner
Vienna Convention Bureau - Christian Mutschlechner
 
Actitud frente a la búsqueda de empleo
Actitud frente a la búsqueda de empleo Actitud frente a la búsqueda de empleo
Actitud frente a la búsqueda de empleo
 
Gonzato Contract Portfolio 2014
Gonzato Contract Portfolio 2014Gonzato Contract Portfolio 2014
Gonzato Contract Portfolio 2014
 
R4U DENIM FATORY.business plan
R4U DENIM FATORY.business planR4U DENIM FATORY.business plan
R4U DENIM FATORY.business plan
 
RESTful modules in zf2
RESTful modules in zf2RESTful modules in zf2
RESTful modules in zf2
 
Manual xsara-and-xsara-picasso-bsi-operating-principles
Manual  xsara-and-xsara-picasso-bsi-operating-principlesManual  xsara-and-xsara-picasso-bsi-operating-principles
Manual xsara-and-xsara-picasso-bsi-operating-principles
 
Joe & the Juice
Joe & the JuiceJoe & the Juice
Joe & the Juice
 
Technology Roadmapping
Technology RoadmappingTechnology Roadmapping
Technology Roadmapping
 
Mythes, légendes et monstres: Obstacles sur le chemin vers le Graal de l'Entr...
Mythes, légendes et monstres: Obstacles sur le chemin vers le Graal de l'Entr...Mythes, légendes et monstres: Obstacles sur le chemin vers le Graal de l'Entr...
Mythes, légendes et monstres: Obstacles sur le chemin vers le Graal de l'Entr...
 
Fannie mae bmc remedy its mv7 interface diagram_v6_021009
Fannie mae bmc remedy its mv7 interface diagram_v6_021009Fannie mae bmc remedy its mv7 interface diagram_v6_021009
Fannie mae bmc remedy its mv7 interface diagram_v6_021009
 

Similaire à Fine tuning Lotus Script (german)

Dnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookUlrich Krause
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
Interaction & Information Design: User first: Mit klarem Fokus eine ambitiöse...
Interaction & Information Design: User first: Mit klarem Fokus eine ambitiöse...Interaction & Information Design: User first: Mit klarem Fokus eine ambitiöse...
Interaction & Information Design: User first: Mit klarem Fokus eine ambitiöse...ONE Schweiz
 
DNUG ak-anwendungsentwicklung.18042011
DNUG ak-anwendungsentwicklung.18042011DNUG ak-anwendungsentwicklung.18042011
DNUG ak-anwendungsentwicklung.18042011Ulrich Krause
 
Expert system webinar 29.6.2017 cogito und deep learning
Expert system webinar  29.6.2017   cogito und deep learningExpert system webinar  29.6.2017   cogito und deep learning
Expert system webinar 29.6.2017 cogito und deep learningStefan Geißler
 
T4 S1 Objektorienierte Entwicklung
T4 S1 Objektorienierte EntwicklungT4 S1 Objektorienierte Entwicklung
T4 S1 Objektorienierte Entwicklungdominion
 
AdminCamp 2011 Performance
AdminCamp 2011 PerformanceAdminCamp 2011 Performance
AdminCamp 2011 PerformanceUlrich Krause
 
Dr. Martin Bartonitz @ BPMN 2010
Dr. Martin Bartonitz @ BPMN 2010Dr. Martin Bartonitz @ BPMN 2010
Dr. Martin Bartonitz @ BPMN 2010bpmn2010
 
Die Zukunft der Webformulare
Die Zukunft der WebformulareDie Zukunft der Webformulare
Die Zukunft der WebformulareFlorian Wieser
 
Von Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem Vormarsch
Von Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem VormarschVon Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem Vormarsch
Von Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem VormarschAndreas Koop
 
Von Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem Vormarsch
Von Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem VormarschVon Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem Vormarsch
Von Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem Vormarschenpit GmbH & Co. KG
 
Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...
Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...
Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...Camptocamp
 
Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...
Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...
Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...OPITZ CONSULTING Deutschland
 
Best Practices: Intranet Nationale Suisse
Best Practices: Intranet Nationale SuisseBest Practices: Intranet Nationale Suisse
Best Practices: Intranet Nationale SuisseKongress Media
 
Wie Sie Mit Design Sprints Echten Digitalen Wandel Schaffen
Wie Sie Mit Design Sprints Echten Digitalen Wandel SchaffenWie Sie Mit Design Sprints Echten Digitalen Wandel Schaffen
Wie Sie Mit Design Sprints Echten Digitalen Wandel SchaffeniTiZZiMO
 

Similaire à Fine tuning Lotus Script (german) (20)

Dnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbook
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Interaction & Information Design: User first: Mit klarem Fokus eine ambitiöse...
Interaction & Information Design: User first: Mit klarem Fokus eine ambitiöse...Interaction & Information Design: User first: Mit klarem Fokus eine ambitiöse...
Interaction & Information Design: User first: Mit klarem Fokus eine ambitiöse...
 
XPages - The Basics
XPages - The BasicsXPages - The Basics
XPages - The Basics
 
Ec13 xpages-basic
Ec13 xpages-basicEc13 xpages-basic
Ec13 xpages-basic
 
DNUG ak-anwendungsentwicklung.18042011
DNUG ak-anwendungsentwicklung.18042011DNUG ak-anwendungsentwicklung.18042011
DNUG ak-anwendungsentwicklung.18042011
 
2010 09 21 AdminCamp News Tuesday
2010 09 21 AdminCamp News Tuesday2010 09 21 AdminCamp News Tuesday
2010 09 21 AdminCamp News Tuesday
 
Expert system webinar 29.6.2017 cogito und deep learning
Expert system webinar  29.6.2017   cogito und deep learningExpert system webinar  29.6.2017   cogito und deep learning
Expert system webinar 29.6.2017 cogito und deep learning
 
T4 S1 Objektorienierte Entwicklung
T4 S1 Objektorienierte EntwicklungT4 S1 Objektorienierte Entwicklung
T4 S1 Objektorienierte Entwicklung
 
Kurzvorstellung Fort Fantastic 2.54
Kurzvorstellung Fort Fantastic  2.54Kurzvorstellung Fort Fantastic  2.54
Kurzvorstellung Fort Fantastic 2.54
 
AdminCamp 2011 Performance
AdminCamp 2011 PerformanceAdminCamp 2011 Performance
AdminCamp 2011 Performance
 
Dr. Martin Bartonitz @ BPMN 2010
Dr. Martin Bartonitz @ BPMN 2010Dr. Martin Bartonitz @ BPMN 2010
Dr. Martin Bartonitz @ BPMN 2010
 
Die Zukunft der Webformulare
Die Zukunft der WebformulareDie Zukunft der Webformulare
Die Zukunft der Webformulare
 
Von Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem Vormarsch
Von Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem VormarschVon Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem Vormarsch
Von Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem Vormarsch
 
Von Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem Vormarsch
Von Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem VormarschVon Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem Vormarsch
Von Big Data zu Künstlicher Intelligenz - Maschinelles Lernen auf dem Vormarsch
 
Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...
Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...
Topsoft 2017: Praxisbericht: Welche Fehler bei der Implementierung eines ERP-...
 
Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...
Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...
Wie baue ich eine KI, die besser als jeder Mensch ein Problem und dessen Ursa...
 
Best Practices: Intranet Nationale Suisse
Best Practices: Intranet Nationale SuisseBest Practices: Intranet Nationale Suisse
Best Practices: Intranet Nationale Suisse
 
2010 09 22 AdminCamp News Wednesday
2010 09 22 AdminCamp News Wednesday2010 09 22 AdminCamp News Wednesday
2010 09 22 AdminCamp News Wednesday
 
Wie Sie Mit Design Sprints Echten Digitalen Wandel Schaffen
Wie Sie Mit Design Sprints Echten Digitalen Wandel SchaffenWie Sie Mit Design Sprints Echten Digitalen Wandel Schaffen
Wie Sie Mit Design Sprints Echten Digitalen Wandel Schaffen
 

Plus de dominion

What is a itil and how does it relate to your collaborative environment uklug
What is a itil and how does it relate to your collaborative environment   uklugWhat is a itil and how does it relate to your collaborative environment   uklug
What is a itil and how does it relate to your collaborative environment uklugdominion
 
iOS enterprise
iOS enterpriseiOS enterprise
iOS enterprisedominion
 
cloud session uklug
cloud session uklugcloud session uklug
cloud session uklugdominion
 
Uklug 2011 administrator development synergy
Uklug 2011 administrator development synergyUklug 2011 administrator development synergy
Uklug 2011 administrator development synergydominion
 
Uklug 2011 client management
Uklug 2011 client managementUklug 2011 client management
Uklug 2011 client managementdominion
 
JavaScript blast
JavaScript blastJavaScript blast
JavaScript blastdominion
 
Populating your domino directory or any domino database with tivoli directory...
Populating your domino directory or any domino database with tivoli directory...Populating your domino directory or any domino database with tivoli directory...
Populating your domino directory or any domino database with tivoli directory...dominion
 
Uklug2011 Know your Notes
Uklug2011 Know your NotesUklug2011 Know your Notes
Uklug2011 Know your Notesdominion
 
Taking themes to the next level
Taking themes to the next levelTaking themes to the next level
Taking themes to the next leveldominion
 
Supersize me
Supersize meSupersize me
Supersize medominion
 
Aussie outback
Aussie outbackAussie outback
Aussie outbackdominion
 
Learning to run
Learning to runLearning to run
Learning to rundominion
 
Implementing xpages extension library
Implementing xpages extension libraryImplementing xpages extension library
Implementing xpages extension librarydominion
 
Abb presentation uklug
Abb presentation uklugAbb presentation uklug
Abb presentation uklugdominion
 
Uklug2011.lotus.on.linux.report.technical.edition.v1.0
Uklug2011.lotus.on.linux.report.technical.edition.v1.0Uklug2011.lotus.on.linux.report.technical.edition.v1.0
Uklug2011.lotus.on.linux.report.technical.edition.v1.0dominion
 
Domino testing presentation
Domino testing presentationDomino testing presentation
Domino testing presentationdominion
 
Composite applications tutorial
Composite applications tutorialComposite applications tutorial
Composite applications tutorialdominion
 
Maximizing application performance
Maximizing application performanceMaximizing application performance
Maximizing application performancedominion
 
Error handling in XPages
Error handling in XPagesError handling in XPages
Error handling in XPagesdominion
 

Plus de dominion (20)

What is a itil and how does it relate to your collaborative environment uklug
What is a itil and how does it relate to your collaborative environment   uklugWhat is a itil and how does it relate to your collaborative environment   uklug
What is a itil and how does it relate to your collaborative environment uklug
 
iOS enterprise
iOS enterpriseiOS enterprise
iOS enterprise
 
cloud session uklug
cloud session uklugcloud session uklug
cloud session uklug
 
Uklug 2011 administrator development synergy
Uklug 2011 administrator development synergyUklug 2011 administrator development synergy
Uklug 2011 administrator development synergy
 
Uklug 2011 client management
Uklug 2011 client managementUklug 2011 client management
Uklug 2011 client management
 
JavaScript blast
JavaScript blastJavaScript blast
JavaScript blast
 
Populating your domino directory or any domino database with tivoli directory...
Populating your domino directory or any domino database with tivoli directory...Populating your domino directory or any domino database with tivoli directory...
Populating your domino directory or any domino database with tivoli directory...
 
Uklug2011 Know your Notes
Uklug2011 Know your NotesUklug2011 Know your Notes
Uklug2011 Know your Notes
 
Quickr
QuickrQuickr
Quickr
 
Taking themes to the next level
Taking themes to the next levelTaking themes to the next level
Taking themes to the next level
 
Supersize me
Supersize meSupersize me
Supersize me
 
Aussie outback
Aussie outbackAussie outback
Aussie outback
 
Learning to run
Learning to runLearning to run
Learning to run
 
Implementing xpages extension library
Implementing xpages extension libraryImplementing xpages extension library
Implementing xpages extension library
 
Abb presentation uklug
Abb presentation uklugAbb presentation uklug
Abb presentation uklug
 
Uklug2011.lotus.on.linux.report.technical.edition.v1.0
Uklug2011.lotus.on.linux.report.technical.edition.v1.0Uklug2011.lotus.on.linux.report.technical.edition.v1.0
Uklug2011.lotus.on.linux.report.technical.edition.v1.0
 
Domino testing presentation
Domino testing presentationDomino testing presentation
Domino testing presentation
 
Composite applications tutorial
Composite applications tutorialComposite applications tutorial
Composite applications tutorial
 
Maximizing application performance
Maximizing application performanceMaximizing application performance
Maximizing application performance
 
Error handling in XPages
Error handling in XPagesError handling in XPages
Error handling in XPages
 

Fine tuning Lotus Script (german)

  • 1. Feinabstimmung für Ihr Lotusscript Jens-B. Augustiny, LIGONET GmbH 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 1
  • 2. Who is who? ● Jens-B. Augustiny, LIGONET GmbH Biel, Schweiz / Sindelfingen ● Seit über 15 Jahren im Notes-Umfeld tätig ● Entwicklung und Administration 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 2
  • 3. Agenda ● Was denken Sie, ist langsam? – Wo tauchen Leistungsprobleme auf? ● Woher nur kommt das? – Tips und Werkzeuge, die Schwachstellen zu erkennen ● Nie mehr da durch! – Tips zur Vermeidung von Leistungsschwächen 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 3
  • 4. Was glauben Sie ist langsam? 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 4
  • 5. Schlechte Leistung – was genau meinen wir eigentlich? ● Schlechtes Programm .... ● Lieferzeiten statt Antwortzeiten ● Unmöglich damit zu arbeiten! ● Dieser Ablauf muss unbedingt verbessert werden ● Wer hat diese Argumente nicht schon gehört? ● Stellen Sie sicher, dass Sie das richtige Problem angehen! 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 5
  • 6. 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 6
  • 7. Leistung – wovon eigentlich? ● Empfundene Leistung ● Der Benutzer empfindet, dass die Applikation nicht das gewünschte Resultat liefert. ● Sehr schwer zu analysieren ● Mögliche Lösungen: ● Bessere Ausbildung der Benutzer: Funktionalität erklären ● Verbesserung der Wahrnehmung: Mehr Informationen während der Verarbeitung oder der Dateneingabe ● Den Workflow überarbeiten und verbessern ● Das Empfinden der Benutzer kann stark beeinflussen, wie die Leistung eingeschätzt wird: Frustrierende oder langwierige Eingaben können als schlechte Leistung angekreidet werden 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 7
  • 8. Reale Leistung ..... oder eher das Fehlen derselben .... ● Flaschenhälse, die durch Messung erkannt werden ● Fast unmöglich, diese vorauszusagen ● Unterschiede zwischen Test- und Produktionsumgebung ● Jede Aussage ohne Messung ist Spekulation ● Die Messung selbst kann das Resultat beeinflussen ● Enorm wichtig, Messdaten zu haben, bevor man etwas ändert. Genau wie bei den Endusern haben auch Entwickler ihre eigenen Ideen, welches die Ursache von Problemen sein könnte ... 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 8
  • 9. Beispiel ● Viermal derselbe Code ● 2 Variablen werden verändert: Die Loop-Logik und die Art, wie auf die Datenbank-Eigenschaften zugegriffen wird. ● Fragen: – Welche der 4 Varianten ist die Schnellste? – Warum ist die von Ihnen gewählte Variante schnell? 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 9
  • 10. Der Beispielcode Forall v In db.views u = Ubound(db.views) A s = v.name Print s For i = 0 To u s =db.Views(i).name C End Forall Print s Next tmpView = db.Views tmpView = db.Views Forall v In tmpView u = Ubound(tmpView) B s = v.name Print s For i = 0 To u s =tmpView(i).name D End Forall Print s Next 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 10
  • 11. Resultate Erster Lauf: B – D – A – C Zweiter Lauf (caching): D – B – A – C 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 11
  • 12. Folgerungen ● Ergebnisse können Ueberraschen ● Messungen sollten in realistischer Umgebung durchgeführt werden ● Datenmenge und Datenstruktur sollte der Realität entsprechen, die meisten Testumgebungen sind ungenüngend ● Die Analyse muss extrem systematisch durchgeführt werden, zB. systematische Eingrenzung 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 12
  • 13. Woher kommt das den alles? ●Sie benötigen aktuelle Werte, um die Arbeit etwas aufzubessern zu begründen. Woher sollen die kommen? 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 13
  • 14. Now für die Zeitmessung ● Beispiel: BaseTime = Now [.... Code hier ... ] Print “Time used: “ & Now – BaseTime ● Vorteil: – Einfach und billig ● Nachteile: – Veränderung des Codes – Platzierung ist kritisch – Ungenügende Auflösung 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 14
  • 15. High Resolution Timing - GetThreadInfo() ● Von Brude Perry einst publizierter nicht dokumentierter Funktionsaufruf, mittlerweile gilt das Verfahren als legal: ● http://searchdomino.techtarget.com/tip/1,289483,sid4_gci895240,00.html?FromTaxonomy=%2Fpr%2F283841 stc = GetThreadInfo(LSI_THREAD_TICKS) ' get the starting tick count '[....the code you want To Time...] 'get the final tick count ftc = GetThreadInfo(LSI_THREAD_TICKS) 'get the ticks per second tps = GetThreadInfo(LSI_THREAD_TICKS_PER_SEC) 'final tick count minus starting tick count divided by ticks per second yields duration. t = (ftc - stc) / tps 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 15
  • 16. GetThreadInfo ● Vorteile: – Einfache Implementierung – Bessere Auflösung als Now ● Nachteile: – Veränderung des Codes – Falsche Platzierung ergibt falsche Resultate – GetThreadInfo ist nicht garantiert vorhanden 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 16
  • 17. Wie bekommt man die Resultate? ● PRINT: Resultat in der Statusleiste (Client) oder in log.nsf (Server) ● Besser: – Ausgabe in ein Dokument – Ausgabe in ein Profile-Dokument – Ausgabe in eine Analyse-Datenbank .... ähhh … Anwendung 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 17
  • 18. Beispiel: Man mache es wiederverwendbar Class debugTimer Private Start As Variant Private fnName As String Sub New( fn As String ) Set Start = Now fnName = fn End Sub Sub Delete Print fnName & " benötigte " & Now-Start & " Sekunden." End Sub End Class 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 18
  • 19. Beispiel: Man mache es wiederverwendbar Sub Initialize() Dim fnTime As New debugTimer( GetThreadInfo(LSI_THREAD_PROC) ) Dim i As Integer While i < 1000 Print i i = i + 1 Wend End Sub 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 19
  • 20. Systemeigenes Profiling ● Eingeführt mit Lotus Notes / Domino 7 ® ® ® ● Nur für Agenten und Web Services ● Java und LotusScript ● Aktivierung in den Eigenschaften des Agenten/WS ● Resultate durch Rechtsklick auf Agent oder WS ● Es gibt nur Werte für reine Notes/Domino Objekte 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 20
  • 21. Systemeigenes Profiling: Beispiel Sub Initialize Dim db As New NotesDatabase( "", "names.nsf" ) i = 0 Dim s As String For i = 0 To UBound(db.views) s =db.Views(i).name Print s Next End Sub 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 21
  • 22. Systemeigenes Profiling: Beispiel Agent laufen lassen 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 22
  • 23. Systemeigenes Profiling: Beispiel 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 23
  • 24. Teamstudio Profiler ● Messung eigener Funktionen und Routinen ● Zeitangaben pro Zeile ● Eine Menge an zusätzlichen Analysewerten ● Server und Client ● LotusScript only ● Anwendung wird sehr stark verlangsamt ● Kostenpflichtig 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 24
  • 25. Teamstudio Profiler - Beispiel 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 25
  • 26. Nein, ich will da nicht wieder durch 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 26
  • 27. Häufige Probleme ● Hilfsmittel sind zwingend bei bestehenden Programmen und Leistungsproblemen. Besser ist jedoch, die Probleme von Anfang an zu vermeiden. ● Manche Probleme sind reale Fehler, andere häufig nur Sorglosigkeit 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 27
  • 28. GetNthDocument() ● Durchlaufen einer Doc-Collection mit GetNThDocument(n) ist bedeutend langsamer als mit GetFirstDocument und GetNextDocument (doc) ● Viel wurde darüber schon gesagt, einiges ist online nachlesbar ● http://bobzblog.com/tuxedoguy.nsf/dx/getnth-revisited-helpful-function-or-spawn-of-the-devil ● http://www.lotusgeek.com/LotusGeek/LotusGeekBlog.nsf/d6plinks/ROLR-7HHPER 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 28
  • 29. Ueberprüfen Sie Ihre Loops found=False Do Until (selected_doc Is Nothing) If (selected_doc.Form(0)="fa_Term") Then found=True End If Set selected_doc=term_collection.GetNextDocument(selected_doc) Loop Set selected_doc=term_collection.GetFirstDocument() If Not(found=True) Then MessageBox NO_TERM_DOCUMENTS_SELECTED_TO_DELETE, 16, DELETE_ERROR Exit Sub End If 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 29
  • 30. … und korrigieren Sie die Fehler found=False Do Until (selected_doc Is Nothing) If (selected_doc.Form(0)="fa_Term") Then found=True ' loop sollte hier abgebrochen werden!! End If Set selected_doc=term_collection.GetNextDocument(selected_doc) Loop Set selected_doc=term_collection.GetFirstDocument() If Not(found=True) Then MessageBox NO_TERM_DOCUMENTS_SELECTED_TO_DELETE, 16, DELETE_ERROR Exit Sub End If 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 30
  • 31. Fehler beheben: Verrotteter Code ● Tatsache ist, dass Code sich verändert: man entdeckt bessere Wege ● Stellen Sie sicher, dass Codeänderungen zu Ende geführt werden, sonst kann die Leistung leiden. Sub Queryopen(...) Dim session As New NotesSession Set db = session.currentdatabase Set view = db.getview("People") Set ProfileDoc = db.getprofiledocument("PickerView") ' ProfileDoc.Pview = "People" End Sub ● Die Variable “view” wird nirgends im Code verwendet. Db.Getview ist ein teurer Funktionsaufruf, speziell dann, wenn das Resultat nie verwendet wird. 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 31
  • 32. Achtung mit verschachtelten IF ● Anders als Sprachen wie C und Java wird bei LotusScript immer die gesamte Bedingung ausgewertet x = 1 If x = 0 And checkresult( res ) = 0 Then 'do some stuff End If ● Checkresult() wird in jedem Fall ausgeführt, auch wenn x nicht 0 ist. Leistungsprobleme können sich in solch einfachen Anweisungen verstecken. 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 32
  • 33. Achtung mit verschachtelten IF: die Lösung x = 1 If x = 0 Then If checkresult( res ) Then 'do some stuff End If End If ● Durch die Auflösung der Bedingung in zwei Aufrufe wirde Checkresult() nur noch aufgerufen, wenn die erste Bedingung True ergibt. 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 33
  • 34. Variablen – Variant ist langsamer ● Abgesehen davon, dass Variants allgemein häufig zu Fehlern führen, sind sie ausserdem sehr langsam. ● LotusScript muss bei jedem Zugriff den Typ bestimmen und eine Datenkonversion durchführen. ● Keine falsche Müdigkeit! Option Declare gehört in jedes LotusScript Programm 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 34
  • 35. Loops – Es gibt schnellere und langsamere ●Forall ist viel schneller beim Durchlauf von Arrays ●For ... Next ist schneller als Do ..... Loop oder While ..... Wend 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 35
  • 36. Und was noch .... ● Zugriff auf ausgewählte Documente ist schneller mit Hilfe einer Ansicht als einer Document Collection ● Zugriff auf Notes Objecte ist schneller durch eine temporäre Variable als durch einen Direktzugriff – wenn man den Wert mehr als einmal benötigt. 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 36
  • 37. Zusammenfassung ● Es gibt technische und nicht technische Gründe für fehlende Performance ● Wenn es technische Gründe sind, ist jede Aussage ohne Messung reine Spekulation ● Es gibt keine zwei gleiche Fälle ● Systematische Top down Analyse ist extrem wichtig ● Manchmal ist ein Redesign die beste Lösung ● Es gibt ein paar “best practices” 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 37
  • 38. Danke! Fragen? ● Vielleicht gibt es sogar Antworten ..... :-) Jens-B. Augustiny - LIGONET GmbH augustiny.j@ligonet.ch www.ligonet.ch 9. März 2010 Entwicklercamp 2010 / LIGONET GmbH 38