21. oktober 2005 - 21:10Der er
58 kommentarer og 1 løsning
Hjælp tilgennemsyn/optimering af script
Jeg har lavet fælgende script... som med mindre jeg har taste eller tænkt helt tosset skule virker efter hensigt... Men jeg er igen ørn til javascript og håber derfor noge vil gennemse det og komme med kommentare/forslg til evnt. forbedringer ol...
------------------------------------------
var pagewidth = 0; if ( widthunit = 0){ normwidth = normwidth/100;
else (normwidth = normwidth); var ubwidth = document.body.offsetWidth; var pagewidth = ubwidth*normwidth; if ( pagewidth < mminwidth){ pagewidth = mminwidth; } if ( pagewidth > mmaxwidth){ pagewidth = mmaxwidth; } var ua = navigator.userAgent.toLowerCase(); if(ua.indexOf('msie 5.1')>-1 && ua.indexOf('mac')>-1){ if ( maciewidth = 1){ pagewidth = mmaxwidth; } if ( maciewidth = 2){ pagewidth = mminwidth; } if ( maciewidth = 3){ pagewidth = ubwidth*normwidth; } } elm = document.getElementById('plname').style; elm.width = pagewidth +"px"; }
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
else (normwidth = normwidth); og i samme linie: det betyder noget hvor du sætter semikolon.
else skulle da være god nok ??...f(år inge fejl) Og hvad mener du med mit semikolon
Sammenligning er med ==, så IKKE: Øhhh... De virker da ellers ?? Skal alle skiftes ud med == Må indrømme du er den første der siger det....mange har ellers testet og set det intil nu
var widthunit = 0; action[1] var normwidth = 801; action[2] var mminwidth = 450; action[3] var mmaxwidth = 600; action[4] var plname = "controle"; action[5] var maciewidth = 0; action[6]
var pagewidth = 0; if ( widthunit == 0){ normwidth = normwidth/100;
if (normwidth == normwidth); var ubwidth = document.body.offsetWidth; var pagewidth = ubwidth*normwidth; if ( pagewidth < mminwidth){ pagewidth = mminwidth; } if ( pagewidth > mmaxwidth){ pagewidth = mmaxwidth; } var ua = navigator.userAgent.toLowerCase(); if(ua.indexOf('msie 5.1')>-1 && ua.indexOf('mac')>-1){ if ( maciewidth == 1){ pagewidth = mmaxwidth; } if ( maciewidth == 2){ pagewidth = mminwidth; } if ( maciewidth == 3){ pagewidth = ubwidth*normwidth; } } elm = document.getElementById('plname').style; elm.width = pagewidth +"px"; }
Linier skal ikke slutte med ; - men sætninger/statements skal.
Der er ingen grund til at sammenligne noget med sig selv, det vil altid være sandt.
Men maciewidth ændrer sig jo ikke.
Hvis du vil have kommentarer til noget, vil du så ikke godt vise den kode, du vil have kommentarer til, for ellers ved vi jo ikke hvad vi (delvist) skal se bort fra.
Ahh...*S*...jamen det er da rigtigt...retter straks
--> Hvis du vil have kommentarer til noget, vil du så ikke godt vise den kode, du vil have kommentarer til, for ellers ved vi jo ikke hvad vi (delvist) skal se bort fra.
Jamen har da vist hele koden.... Det er kun selve variablernes værdi jeg mener man pt skal se nortfra da de kan ændre sig... (derfor de er lagt for sig sel,)
scriptet virker skam fint nok (hvertfald de steder jeg har testet),,, eneste problem er mac IE 5.1x...derfor den del af scriptet...
Jeg vil bare gerne om mit script kan skrive bedre/kortere osv.. Og...som du fandt en af...fejl og som du også så....overflødige ting---
Mht værdierne af de variabler....så er det område lidt specielt.....når scriptet køre vil de alle blive skiftet ude med action[X], og den egenlige værdi vil blive genereret via noget C++ ...men det er en helt anden sag.. Så hvad jeg er ude på er at få mit script så godt som muligt, med mulighed for dette.
Da jeg er temmelig grøn i javascript spørger jeg derfor hvad i mener der kan gøre bedre i scriptet
"virker skam fint nok" - hvis du mener det script du viste i selve spørgsmålet, så kan det ikke have virket "fint nok" med de fejl, der var i. Så du skal en tur rundt og teste igen. Jeg tror ikke, der i den seneste version er noget, der kan laves bedre.
Nu er det jo sådan at nogle kan lide datteren, mens andre vil have moderen - og preferencer ændrer sig i øvrigt med tiden - men hvis man er til shorthands, er dette måske en anelse mere sexy:
var pagewidth = 0; if ( widthunit == 0){ var ubwidth, pagewidth, ua;
Den væsentilgste anke i forhold til dit eget eksempel - udover den overflødige betingelse - er din indrykning. Jeg ville få små, grønne fluer bag øjenbrynene, hvis jeg skulle sidde og fedte rundt med sådan en kode.
Slip af med en seriøs fejlmulighed i din kode ... vær sirlig med din indrykning! Dels undgår du at lave en masse fejl - dels springer dine fejl øjeblikkeligt i øjnene, hvis du alligevel skulle begå nogen - og sidst, men ikke mindst, kan du med stolthed aflevere den til en evt. koder, der skal overtage den. Han vil garanteret også finde den overskuelig og let at gå til ;o)
>>Så kan det ikke have virket "fint nok" med de fejl, der var i.
fatisk var der == i originalen...men dieforsvandt ved copy paste ?? ....(må være en mac tegn ting, fik også en del underlige teng... så )... Kunne heller ikker forstå hovrfor du brokkede dig der...*G*... og nok derfor det har har virket for mig...*G*
>>Jeg tror ikke, der i den seneste version er noget, der kan laves bedre.
- og så har jeg - udover indrykning - en anden lille 'pernittengryn' ting: Jeg kan godt lide at erklære alle mine lokale variabler i første linje af en funktion. Det giver mig et godt overblik over, hvor skidtet kommer fra ... og jeg opdaterer konstant den linje, mens jeg koder (som regel står det meste der i forvejen fra pseudokoden, jeg har vænnet mig til at begynde større ting med) :)
*S*...vorfor vented jeg du ville blande dig....*G*
Flot script du har lavet btw... Copy paste det lige og ser om jeg fatter hvad du har lavet, ikke meget ved at bruge et script man ikke fatter...oki,... måske er det bedre...men jeg har sværdt ved at stå inden for noget jeg ikke forstår ;-) ... så tager lige et ekstra kik på din kode.... (ser rimligt forståelig ud *S*
Takker
>> Den væsentilgste anke i forhold til dit eget eksempel - udover den overflødige betingelse - er din indrykning.
Sory...tro halvdelen er fra min copy paste til her...(mac lave sjove tegn) Og så holder jeg personligt meget af tab indrykninger...så har sat min WISIWYG til at lave dem ...*S*...(men de forsvinder ved opload...*S*)
>> Det eneste jeg kan tilføje er, at det er totalt spild af alles tid, at vise noget kode, som ikke den rigtige kode. Indrykning og grønne fluer - har der været et godt tilbud på Frascati? ;)
Hvordan an det være tidsspild...?? For mig er det reet seriøst ???
Du misforstår det med variablerne :) Når jeg skriver: var ubwidth, pagewidth, ua, pagewidth = 0 - er det det samme som:
var ubwidth; var pagewidth; var ua; var pagewidth = 0;
Det, jeg godt kan lide er, at de er erklæret helt i toppen af en funktion. Om så det er på én eller flere linjer, er ligemeget - bare de står i toppen ... jeg skriver dem dog selv i én.
De eneste lokale variabler, jeg erklærer nede i en funktionskode på det sted, de skal bruges, er iteratorer: for (var i=0; i<noget; i++) {
Det er absolut en vanesag, men det giver mig personligt et godt overblik. Samtidig er det en nødvendighed i andre sprog ... f.eks. Visual Basic
sætter lige points op til 100 til hver ;-) tålmodighed har i da...*S*
Starter lige forfra....
Har lavet scriptet til at søger for at en side har en vis min og max str... Alt har indtil nu kørt uden scriptfejl ol... eneste fejl er en MSIE5.17 bug som jeg i scriptet har forsøgt at omgås... dette er også den svageste part af scriptet.... for har ikke selv haft mulighed for at teste på msie 5.2+
Jeg kunne have sat alle parameterne ind i scriptet fra starten, men ha vlagt at lave en liste der sætter værdien af disse, da de senerer vil blive sat via et andet pogram direkte istedet for variblerne... (var widthunit = 0; var normwidth = 80|1; var mminwidth = 450; var mmaxwidth = 600; var plname = "controle"; var maciewidth = 0|1|2|3;) er midlertiddige settings...og kan alle være forskellige
Så selve scriptet heder egenligt; var pagewidth = 0; if ( widthunit = 0){ normwidth = normwidth/100; var ubwidth = document.body.offsetWidth; var pagewidth = ubwidth*normwidth; if ( pagewidth < mminwidth){ pagewidth = mminwidth; } if ( pagewidth > mmaxwidth){ pagewidth = mmaxwidth; } var ua = navigator.userAgent.toLowerCase(); if(ua.indexOf('msie 5.1')>-1 && ua.indexOf('mac')>-1){ if ( maciewidth = 1){ pagewidth = mmaxwidth; } if ( maciewidth = 2){ pagewidth = mminwidth; } if ( maciewidth = 3){ pagewidth = ubwidth*normwidth; } } elm = document.getElementById('plname').style; elm.width = pagewidth +"px"; } window.onload = JMFlexWidthControle; window.onresize = JMWidthControle;
(med nuværende rettleser)
Ole >> Jeg vil kigge dybt i din version...er flot og lille....
Så mit spørgsmål er egenligt...kan mit script laves bedre til formålet...(Med muligehde for de givne varianter )...kan de enkelte liner i mit script laves bedre.... er der noget udeladt eller overflødigt (Tak til erikjacobsen ;-) ... er der dele der ikke vil fungere...osv. osv...
Og så er der lige den med om MSIE5.2 vil blive berørt af MSIE5.1x delen.... dette skal jeg nok få opklaret ordenligt...indtil nu ser det ikke spdan ud
Jeg synes, det er noget rod - og jeg kan stadig ikke se, hvad det er, du vil med scriptet ... specielt kan jeg ikke se, hvorfor body'ens offsetWidth er interessant :)
ole >> Dit kodeeksemple (21/10-2005 23:31:46) er lige noget af det jeg er ude efter... bedre måder at skrive script på .... jeg skal "bare" lige forstå hvad du egenligt har lavet... :-)
Feks var pagewidth = 0; if ( widthunit == 0){ var ubwidth, pagewidth, ua; normwidth = normwidth/100; Hvad laver var ubwidth, pagewidth, ua; ??? pagewidth har vi lige sat, ubwidthog ua kommer senere i scriptet ?? og en anden ting der undre mig lidt var pagewidth = 0; er den eneste med var foran... er var valgfri ???
*S*.... hej roenving...velkommen her i min tråd...*S*
Tak for oplysningen... er dog usikker på hvad du mener med lokal ?
Jeg har kigget meget på oles eksemple og har skrevet scriptet lidt om... nu ser det sådanne ud
<script type="text/javascript"><!-- function JMFlexWidthControle() { var widthunit = 0; var normwidth = 80; var mminwidth = 450; var mmaxwidth = 600; var plname = "controle"; var maciewidth = 0;
var pagewidth = 0; if ( widthunit == 0){ normwidth = normwidth/100; }
var ubwidth = document.body.offsetWidth; var pagewidth =parseInt(ubwidth)*normwidth; pagewidth = (pagewidth<mminwidth)? mminwidth : (pagewidth>mmaxwidth)? mmaxwidth : pagewidth;
Hvis jeg forstår dig rigtigt bør jeg alså også nulstille "uawidth" ,"ubwidth," og "pagewidth," ?? feks ændre starten til: var normwidth = 80; var mminwidth = 450; var mmaxwidth = 600; var plname = "controle"; var widthunit = 0; var maciewidth, uawidth, ubwidth, pagewidth,
???
De test jeg har lavet indikere at scriptet fungere som jeg ønsker... det jeg gerne vil er at optimere det mest muligt, og her er jeres oplysninger lige den slags jeg leder efter
en lille ekstra oplysning. ... Jeg har medvilje lagt alle variable i starten af scriptet, Da disse vil være forskellige fra site til site, og scriptet skal bruges til mange sites..... Hele den del vil blive genereret atomatisk og sat ind i scriptet (Den del er der styr på og det virker)... derfor har jeg lavet det på den måde
Takker...spænende...men kan ikke se hvad/hvordan det kommer ind i billedet?? Det er slet ikke det jeg mente med min sidste oplysing...
Det er selve var normwidth = 80; var mminwidth = 450; var mmaxwidth = 600; var plname = "controle"; var widthunit = 0; delen der automatisk bliver skrevet ind i scriptet (før opload)
Det var for at illustrere lokale variabler, som du spurgte til, ikke et forsøg på at optimere dit script !-)
Du får 7 alerts, 4 kontrol-alerts navngivet med Global 1-4, og derimellem 3 alerts fra forskellige funktioner, som alle alerter en variabel med samme navn som den globale, men den første har en parameter, der hedder det samme, og er derfor lokal, den anden henviser bare til den globale og den sidste har sin egen lokale variabel ...
-- som det fremgår påvirkes den globale variabel ikke af, at der lokalt (i funktionerne !-) er variabler med det samme navn !o]
*S*...takker....tror jeg forstår nogenunde hvad det går ud på.... og jeg...kan se det kan være yderst praktisk i mange situationer :-) For fuld forståelse skal jeg nok prøve at arbejde lidt mere konkret med det... men tror grund ideen er på plads.... takker for enu et lille guldkorn....
De variable jeg har i starten af scriptet er egenligt faste værdier der ikke vil ændre sig når siden køre, så jo. jeg kunne sætte dem direkte ind i scriptet.. men.... 1. det er nemmere at ændre et sted en 5 undervejs i opbygningen 2. scriptet skal når det er færdigt laves til en action/funktion.... og så bliver alle de sætbare variabler skiftet ud med action[X] . Så kan jeg, når jeg skal bruge scriptet blot intaste de paramete det skal have...og de bliver så indsat... Da koderne til disse er lidt skumle er det ikke morsomt at lave scriptet fra bunden i det...men langt nemmere at lave scriptet på "almindelig" vis... og så ombygge det... Da det vil blive et script jeg vil bruge en del gange vil det jovære lækkert at det er så godt som jeg nu kan få de til at være...derfor mine mange spørgsmål.... Det er sjovere at rette undevejs...end blive spurgt om hvorfor man har valgt så dårlig en løsning efter man har lavet siden ;-)
Selv er jeg efterhånden ganske godt tilfreds med scriptet (I kunne garentere lave noge meget smartere :-P ) har nogle forbedringer/flere muligheder i tankerne for scriptet... men det må blive en anden version en anden gang...
Så hvis i ikke har andre bemærkninger og ellers mener at det er iorden, så smid et svar....*S*
I er begge til stor hjælp... hvad enten det angår ting jeg spørg om eller ting jeg ikke engang anede at jeg ikke viste ;-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.