Ik heb een applescriptje geschreven wat onder Tiger prima draait. Nu heb ik al enige tijd Leopard draaien en draait het applescript mega traag. Het werkt nog zoals geadverteerd maar het duurt nu tot wel 25 minuten voor dat hij klaar is, waar het onder Tiger luttele seconden waren. Processor gebruik is ook erg hoog.
Nu heb ik het stukje code getraceerd waar het probleem in zit.
-->Schoon het HTML zooitje opon remove_markup() set copy_flag to true set the clean_text to "" repeat with this_char in theContents set this_char to the contents of this_char if this_char is "<" then set the copy_flag to false else if this_char is "&" then set the copy_flag to false else if this_char is ">" then set the copy_flag to true else if the copy_flag is true then set the clean_text to the clean_text & this_char as string end if end repeat set AlleItemsSchoon to the paragraphs of clean_text return AlleItemsSchoonend remove_markup
Zijn er meer mensen die gelijke problemen hebben, of is mijn amateur geprogrammeer echt zo slecht?Zo ja voor het eerste, hebben jullie dit kunnen oplossen?Zo ja voor het tweede, valt mijn code nog te redden zodat hij als nog weer op normale snelheid kan draaien?
Grtzzz,
BeNoOne
Het is me niet geheel duidelijk wat je in theContents hebt staan. Als dat gewoon text is, zou het volgende iets sneller moeten zijn:
on remove_markup(theContents) set the clean_text to "" repeat with this_char in theContents if this_char is not in "<&>" then set the clean_text to the clean_text & this_char end if end repeat return clean_textend remove_markup
Groet,
Mark
Maar ik heb jou code even getest en ook hier geldt dat het onder Tiger als een speer door loopt en onder Leopard niet. Ik ben bang dat ik toch bij Apple aan moet kloppen.
Hoe voer je jouw code precies uit? Is je script onderdeel van iets groters?
Mijn script doet inderdaad iets anders dan het jouwe, zie ik nu. Toch kan jouw script wel enigszins geoptimaliseerd worden door < and & samen te nemen in 1 if-statement.
Maar optimalisatie heeft totaal geen zin. Ik bedoel een paar tiende van een seconde op 20 minuten zet geen zode aan de dijk. Er lijkt iets fundamenteels mis met applescript onder Leopard. Onder Tiger is het totale programma in een paar seconden volledig afgerond. Onder Leopard duurt het toch al gauw 20 minuten dit heeft niets meer met een beetje optimaliseren te maken.
Bert
Bijvoorbeeld: Als je hier-- set the clean_text to the clean_text & this_char as string twee streepjes voorzet en het script loopt weer als een speer, dan is dat het probleem. Zo zijn er meer regels die je kunt testen. Ook al doet het script dan niet wat je wilt, je komt er wel achter waar het probleem zit. In plaats van de repeat kun je een andere repeat nemen. Gewoon, lengte van de string bepalen en dan ander type lus gebruiken.
Ber
set the clean_text to the clean_text & this_char as string
Ik heb het stukje code van marksch ook geprobeerd en hier hetzelfde effect. Ik zal idd nog in mijn eigen code wat outcommenten. T'is wel vreemd moet ik zeggen.
@ hitchhikerMijn programmeer kennis gaat nu ook weer niet zover dat ik weet hoe ik het eerst in een buffer kan zetten. Maar ik ben bang dat je wel gelijk hebt dat het in deze regel fout gaat. Ik ga ff kijken of ik zonder deze regel iets zinnigs kan testen.
(Bewerkt door BeNoOne om 18:52, 12-02-2008)
on remove_markup() set copy_flag to true set the clean_text to "" set clean_buffer to "" repeat with this_char in theContents set this_char to the contents of this_char if this_char is "<" then set the copy_flag to false else if this_char is "&" then set the copy_flag to false else if this_char is ">" then set the copy_flag to true set the clean_text to the clean_text & the clean_buffer set clean_buffer to "" else if the copy_flag is true then set the clean_buffer to the clean_buffer & this_char as string end if end repeat set the clean_text to the clean_text & the clean_buffer set AlleItemsSchoon to the paragraphs of clean_text return AlleItemsSchoon end remove_markup
Ik heb niks getest, er zal dus nog wel wat fout gaan.
BeNoOne om 18:14, 12-02-2008Idd wat het totale programma doet is een HTML file ophalen met rooster gegevens en deze gegevens weer in iCal zetten. Om de gegevens uit deze file te filteren haal ik eerst alle HTML code er uit, dit is de taak van deze routine.Maar optimalisatie heeft totaal geen zin. Ik bedoel een paar tiende van een seconde op 20 minuten zet geen zode aan de dijk. Er lijkt iets fundamenteels mis met applescript onder Leopard. Onder Tiger is het totale programma in een paar seconden volledig afgerond. Onder Leopard duurt het toch al gauw 20 minuten dit heeft niets meer met een beetje optimaliseren te maken.
Waarom denk je dat dit gedeelte van het programma er de oorzaak van is dat de uitvoering van het programma zo lang duurt?
Meestal doet AppleScript er erg lang over om uit te vinden waar een bepaalt component of benodigd programma zich bevindt, als het die component of dat programma niet kan vinden op de verwachte locatie. Is het mogelijk dat de upgrade naar Leopard het pad naar een benodigd component heeft veranderd?
Zelfs jou code heb ik tot de core terug gebracht.
set theContents to read (choose file)-->Schoon het HTML zooitje opset the clean_text to ""repeat with this_char in theContents if this_char is not in "<&>" then set the clean_text to the clean_text & this_char end ifend repeatreturn clean_text
Dit doet er al 20 minuten over om af te ronden onder Leopard. Onder Tiger in seconden. Ik zie hier echt geen componenten die gezocht moeten worden.
(Bewerkt door BeNoOne om 19:43, 12-02-2008)
........
Oké 9 minuten later is hij klaar. Ik had de file een beetje kleiner gemaakt zodat ik niet te lang hoef te wachten. Om 19:56 heb ik mijn eigen routine gestart. Teller loopt.
Fotofinish allebei ongeveer 9 minuten.
Toch maar eens met Apple contact zoeken. Het maakt overigens niet uit of ik op PPC draai of intel.
(Bewerkt door BeNoOne om 20:09, 12-02-2008)
Vertel (rustig en beleefd) dat het onder Tiger in seconden gaat en onder Leopard in minuten.
Met vriendelijke groeten,
Voorbeeldtekst:I use AppleScript to process a text to remove all HTML tags using AppleScript. My script ran under Tiger in seconds. With Leopard it takes about 20 minutes for the average text to be processed. I have trimmed down the script to isolate the problem. You will be able to use the script below to verify the problem under Leopard. A fix is highly appreciated. Thanks.
-- select an HTML file[rest van je script]
Maar dat schiet niet echt op, ik heb nog steeds geen antwoord.
Tsja, het is niet gezegd dat ze het repareren (maar ik heb al weet ik niet hoevaak gehad dat iets dat ik meldde uiteindelijk gefixt werd). Aangezien je het probleem zo goed geanalyseerd hebt, kunnen ze het gemakkelijk reproduceren en de bug gemakkelijk fixen. Goede feedback geven helpt.
Trouwens, als je de regel-- set the clean_text to the clean_text & this_char outcomment, is het script dan wel snel (ik wil zeker weten dat het niet de repeat is).
-- set the clean_text to the clean_text & this_char Heb ik idd er even uitgehaald geen resultaat.
Ook heb ik deze er uitgehaald.-- set this_char to the contents of this_char
Zelfde resultaat.
(Bewerkt door BeNoOne om 22:14, 12-02-2008)