Code Performance Issue

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Martin

    Code Performance Issue

    Hi Guys,

    I am a bit of a JavaScript rookie, so please bear with me ....

    Some time ago, I asked for help with some code to populate a drop down
    country box based on a value I was returning from a popup menu.

    This is all now working fine (Thanks !) but I have noticed, it
    unfortunately does not scale well, and is causing quite some delay
    [approx 5 - 10 secs] between the user hitting 'go', and the country
    being writing back to the drop down in the calling window.

    I have been trying to re-write the code, but have not been able
    achieve efficiency and get the code working correctly.

    Does anyone have any ideas I might try to shave those seconds off, and
    get back to a near instantanious results not matter how many countries
    are in the drop down list?

    All suggestions welcome, and much appreciated.

    Thanks guys,
    Martin


    Example Code
    ************

    <html>
    <body>

    <script>functio n Goodbye()
    {
    for (var i = 0; i <
    document.Defaul tFormName.IgsPe PersonAddrCount ry.length; i++)
    {
    if (document.Defau ltFormName.IgsP ePersonAddrCoun try.options[i].value.match(do cument.InputFor m.countrycode.v alue))
    {
    document.Defaul tFormName.IgsPe PersonAddrCount ry.selectedInde x =
    i;
    break;
    }
    }
    }
    </script>
    <p>Example Code</p>
    <p>Child Form : Window Spawned from Parent</p>
    <form name ="InputForm" >
    <table>
    <tr>
    <td>
    <input type="text" name="countryco de"></td><td> e.g. GB or US
    </td>
    </tr>
    <tr>
    <td>
    <input type="button" value="Go!" onclick="javasc ript:Goodbye(); return
    false;"></a>
    </td>
    </tr>
    </table>
    </form>
    <hr>
    <p>Parent Form</p>
    <form name ="DefaultFormNa me">
    <table>
    <tr>
    <td vAlign=top noWrap>
    <SELECT id=IgsPePersonA ddrCountry title=Country onchange=""
    name=IgsPePerso nAddrCountry>
    <OPTION value="" selected></OPTION><OPTION
    value=AF>Afghan istan</OPTION><OPTION
    value=AL>Albani a</OPTION><OPTION
    value=DZ>Algeri a</OPTION><OPTION value=AS>Americ an
    Samoa</OPTION><OPTION
    value=AD>Andorr a</OPTION><OPTION
    value=AO>Angola </OPTION><OPTION
    value=AI>Anguil la</OPTION><OPTION
    value=AQ>Antarc tica</OPTION><OPTION
    value=AG>Antigu a and
    Barbuda</OPTION><OPTION
    value=AR>Argent ina</OPTION><OPTION
    value=AM>Armeni a</OPTION><OPTION
    value=AW>Aruba</OPTION><OPTION
    value=AU>Austra lia</OPTION><OPTION
    value=AT>Austri a</OPTION><OPTION
    value=AZ>Azerba ijan</OPTION><OPTION
    value=BS>Bahama s</OPTION><OPTION
    value=BH>Bahrai n</OPTION><OPTION
    value=BD>Bangla desh</OPTION><OPTION
    value=BB>Barbad os</OPTION><OPTION
    value=BY>Belaru s</OPTION><OPTION
    value=BE>Belgiu m</OPTION><OPTION
    value=BZ>Belize </OPTION><OPTION
    value=BJ>Benin</OPTION><OPTION
    value=BM>Bermud a</OPTION><OPTION
    value=BT>Bhutan </OPTION><OPTION
    value=BO>Bolivi a</OPTION><OPTION value=BA>Bosnia
    and
    Herzegovina</OPTION><OPTION
    value=BW>Botswa na</OPTION><OPTION value=BV>Bouvet
    Island</OPTION><OPTION
    value=BR>Brazil </OPTION><OPTION
    value=IO>Britis h Indian Ocean
    Territory</OPTION><OPTION
    value=BN>Brunei Darussalam</OPTION><OPTION
    value=BG>Bulgar ia</OPTION><OPTION value=BF>Burkin a
    Faso</OPTION><OPTION
    value=BI>Burund i</OPTION><OPTION
    value=KH>Cambod ia</OPTION><OPTION
    value=CM>Camero on</OPTION><OPTION
    value=CA>Canada </OPTION><OPTION value=CV>Cape
    Verde</OPTION><OPTION
    value=XC>Catalo nia</OPTION><OPTION
    value=KY>Cayman Islands</OPTION><OPTION
    value=CF>Centra l
    African Republic</OPTION><OPTION
    value=TD>Chad</OPTION><OPTION
    value=CL>Chile</OPTION><OPTION
    value=CN>China</OPTION><OPTION value=CX>Christ mas
    Island</OPTION><OPTION value=CC>Cocos (Keeling)
    Islands</OPTION><OPTION
    value=CO>Colomb ia</OPTION><OPTION
    value=KM>Comoro s</OPTION><OPTION
    value=CG>Congo</OPTION><OPTION value=CD>Congo, The
    Democratic Republic of the</OPTION><OPTION
    value=CK>Cook
    Islands</OPTION><OPTION value=CR>Costa
    Rica</OPTION><OPTION
    value=CI>Cote d'Ivoire</OPTION><OPTION
    value=HR>Croati a</OPTION><OPTION
    value=CU>Cuba</OPTION><OPTION
    value=CY>Cyprus </OPTION><OPTION value=CZ>Czech
    Republic</OPTION><OPTION
    value=DK>Denmar k</OPTION><OPTION
    value=DJ>Djibou ti</OPTION><OPTION
    value=DM>Domini ca</OPTION><OPTION
    value=DO>Domini can
    Republic</OPTION><OPTION value=TP>East
    Timor</OPTION><OPTION
    value=EC>Ecuado r</OPTION><OPTION
    value=EG>Egypt</OPTION><OPTION value=SV>El
    Salvador</OPTION><OPTION value=GQ>Equato rial
    Guinea</OPTION><OPTION
    value=ER>Eritre a</OPTION><OPTION
    value=EE>Estoni a</OPTION><OPTION
    value=ET>Ethiop ia</OPTION><OPTION
    value=FK>Falkla nd Islands
    (Malvinas)</OPTION><OPTION value=FO>Faroe
    Islands</OPTION><OPTION
    value=FJ>Fiji</OPTION><OPTION
    value=FI>Finlan d</OPTION><OPTION
    value=FR>France </OPTION><OPTION value=GF>French
    Guiana</OPTION><OPTION value=PF>French
    Polynesia</OPTION><OPTION value=TF>French Southern
    Territories</OPTION><OPTION
    value=GA>Gabon</OPTION><OPTION
    value=GM>Gambia </OPTION><OPTION
    value=GE>Georgi a</OPTION><OPTION
    value=DE>German y</OPTION><OPTION
    value=GH>Ghana</OPTION><OPTION
    value=GI>Gibral tar</OPTION><OPTION
    value=GR>Greece </OPTION><OPTION
    value=GL>Greenl and</OPTION><OPTION
    value=GD>Grenad a</OPTION><OPTION
    value=GP>Guadel oupe</OPTION><OPTION
    value=GU>Guam</OPTION><OPTION
    value=GT>Guatem ala</OPTION><OPTION
    value=GN>Guinea </OPTION><OPTION
    value=GW>Guinea-Bissau</OPTION><OPTION
    value=GY>Guyana </OPTION><OPTION
    value=HT>Haiti</OPTION><OPTION value=HM>Heard
    Island and
    McDonald Islands</OPTION><OPTION value=VA>Holy See
    (Vatican
    City State)</OPTION><OPTION
    value=HN>Hondur as</OPTION><OPTION value=HK>Hong
    Kong</OPTION><OPTION
    value=HU>Hungar y</OPTION><OPTION
    value=IS>Icelan d</OPTION><OPTION
    value=IN>India</OPTION><OPTION
    value=ID>Indone sia</OPTION><OPTION value=IR>Iran
    (Islamic
    Republic of)</OPTION><OPTION
    value=IQ>Iraq</OPTION><OPTION
    value=IE>Irelan d</OPTION><OPTION
    value=IL>Israel </OPTION><OPTION
    value=IT>Italy</OPTION><OPTION
    value=JM>Jamaic a</OPTION><OPTION
    value=JP>Japan</OPTION><OPTION
    value=JO>Jordan </OPTION><OPTION
    value=KZ>Kazakh stan</OPTION><OPTION
    value=KE>Kenya</OPTION><OPTION
    value=KI>Kiriba ti</OPTION><OPTION value=KP>Korea,
    Democratic
    People's Republic of</OPTION><OPTION
    value=KR>Korea,
    Republic of</OPTION><OPTION
    value=KW>Kuwait </OPTION><OPTION
    value=KG>Kyrgyz stan</OPTION><OPTION value=LA>Lao
    People's
    Democratic Republic</OPTION><OPTION
    value=LV>Latvia </OPTION><OPTION
    value=LB>Lebano n</OPTION><OPTION
    value=LS>Lesoth o</OPTION><OPTION
    value=LR>Liberi a</OPTION><OPTION value=LY>Libyan
    Arab
    Jamahiriya</OPTION><OPTION
    value=LI>Liecht enstein</OPTION><OPTION
    value=LT>Lithua nia</OPTION><OPTION
    value=LU>Luxemb ourg</OPTION><OPTION
    value=MO>Macau</OPTION><OPTION value=MK>Macedo nia,
    The
    Former Yugoslav Republic of</OPTION><OPTION
    value=MG>Madaga scar</OPTION><OPTION
    value=MW>Malawi </OPTION><OPTION
    value=MY>Malays ia</OPTION><OPTION
    value=MV>Maldiv es</OPTION><OPTION
    value=ML>Mali</OPTION><OPTION
    value=MT>Malta</OPTION><OPTION
    value=MH>Marsha ll Islands</OPTION><OPTION
    value=MQ>Martin ique</OPTION><OPTION
    value=MR>Maurit ania</OPTION><OPTION
    value=MU>Maurit ius</OPTION><OPTION
    value=YT>Mayott e</OPTION><OPTION
    value=MX>Mexico </OPTION><OPTION
    value=FM>Micron esia
    (Federated States of)</OPTION><OPTION
    value=MD>Moldov a,
    Republic of</OPTION><OPTION
    value=MC>Monaco </OPTION><OPTION
    value=MN>Mongol ia</OPTION><OPTION
    value=MS>Montse rrat</OPTION><OPTION
    value=MA>Morocc o</OPTION><OPTION
    value=MZ>Mozamb ique</OPTION><OPTION
    value=MM>Myanma r</OPTION><OPTION
    value=NA>Namibi a</OPTION><OPTION
    value=NR>Nauru</OPTION><OPTION
    value=NP>Nepal</OPTION><OPTION
    value=NL>Nether lands</OPTION><OPTION
    value=AN>Nether lands
    Antilles</OPTION><OPTION value=NC>New
    Caledonia</OPTION><OPTION value=NZ>New
    Zealand</OPTION><OPTION
    value=NI>Nicara gua</OPTION><OPTION
    value=NE>Niger</OPTION><OPTION
    value=NG>Nigeri a</OPTION><OPTION
    value=NU>Niue</OPTION><OPTION value=NF>Norfol k
    Island</OPTION><OPTION value=MP>Northe rn Mariana
    Islands</OPTION><OPTION
    value=NO>Norway </OPTION><OPTION
    value=ZR>Obsole te see CD territory</OPTION><OPTION
    value=FX>Obsole te see FR territory</OPTION><OPTION
    value=LX>Obsole te see LT territory</OPTION><OPTION
    value=OM>Oman</OPTION><OPTION
    value=PK>Pakist an</OPTION><OPTION
    value=PW>Palau</OPTION><OPTION
    value=PS>Palest inian
    Territory,Occup ied</OPTION><OPTION
    value=PA>Panama </OPTION><OPTION value=PG>Papua New
    Guinea</OPTION><OPTION
    value=PY>Paragu ay</OPTION><OPTION
    value=PE>Peru</OPTION><OPTION
    value=PH>Philip pines</OPTION><OPTION
    value=PN>Pitcai rn</OPTION><OPTION
    value=PL>Poland </OPTION><OPTION
    value=PT>Portug al</OPTION><OPTION value=PR>Puerto
    Rico</OPTION><OPTION
    value=QA>Qatar</OPTION><OPTION
    value=RE>Reunio n</OPTION><OPTION
    value=RO>Romani a</OPTION><OPTION value=RU>Russia n
    Federation</OPTION><OPTION
    value=RW>Rwanda </OPTION><OPTION
    value=SH>Saint Helena</OPTION><OPTION
    value=KN>Saint Kitts
    and Nevis</OPTION><OPTION value=LC>Saint
    Lucia</OPTION><OPTION value=PM>Saint Pierre and
    Miquelon</OPTION><OPTION value=VC>Saint Vincent
    and the
    Grenadines</OPTION><OPTION
    value=WS>Samoa</OPTION><OPTION
    value=SM>San Marino</OPTION><OPTION value=ST>Sao
    Tome and
    Principe</OPTION><OPTION value=SA>Saudi
    Arabia</OPTION><OPTION
    value=SN>Senega l</OPTION><OPTION
    value=SC>Seyche lles</OPTION><OPTION
    value=SL>Sierra
    Leone</OPTION><OPTION
    value=SG>Singap ore</OPTION><OPTION
    value=SK>Slovak ia</OPTION><OPTION
    value=SI>Sloven ia</OPTION><OPTION value=SB>Solomo n
    Islands</OPTION><OPTION
    value=SO>Somali a</OPTION><OPTION
    value=ZA>South Africa</OPTION><OPTION
    value=GS>South Georgia
    and the South Sandwich Island</OPTION><OPTION
    value=ES>Spain</OPTION><OPTION value=LK>Sri
    Lanka</OPTION><OPTION
    value=SD>Sudan</OPTION><OPTION
    value=SR>Surina me</OPTION><OPTION
    value=SJ>Svalba rd and Jan
    Mayen Islands</OPTION><OPTION
    value=SZ>Swazil and</OPTION><OPTION
    value=SE>Sweden </OPTION><OPTION
    value=CH>Switze rland</OPTION><OPTION
    value=SY>Syrian Arab
    Republic</OPTION><OPTION
    value=TW>Taiwan </OPTION><OPTION
    value=TJ>Tajiki stan</OPTION><OPTION
    value=TZ>Tanzan ia,
    United Republic of</OPTION><OPTION
    value=TH>Thaila nd</OPTION><OPTION
    value=TG>Togo</OPTION><OPTION
    value=TK>Tokela u</OPTION><OPTION
    value=TO>Tonga</OPTION><OPTION value=TT>Trinid ad
    and
    Tobago</OPTION><OPTION
    value=TN>Tunisi a</OPTION><OPTION
    value=TR>Turkey </OPTION><OPTION
    value=TM>Turkme nistan</OPTION><OPTION
    value=TC>Turks and
    Caicos Islands</OPTION><OPTION
    value=TV>Tuvalu </OPTION><OPTION
    value=UG>Uganda </OPTION><OPTION
    value=UA>Ukrain e</OPTION><OPTION value=AE>United
    Arab
    Emirates</OPTION><OPTION value=GB>United
    Kingdom</OPTION><OPTION value=US>United
    States</OPTION><OPTION value=UM>United States
    Minor Outlying
    Islands</OPTION><OPTION
    value=UY>Urugua y</OPTION><OPTION
    value=UZ>Uzbeki stan</OPTION><OPTION
    value=VU>Vanuat u</OPTION><OPTION
    value=VE>Venezu ela</OPTION><OPTION value=VN>Viet
    Nam</OPTION><OPTION value=VG>Virgin Islands,
    British</OPTION><OPTION value=VI>Virgin Islands,
    U.S.</OPTION><OPTION value=WF>Wallis and
    Futuna</OPTION><OPTION value=EH>Wester n
    Sahara</OPTION><OPTION
    value=YE>Yemen</OPTION><OPTION
    value=YU>Yugosl avia</OPTION><OPTION
    value=ZM>Zambia </OPTION><OPTION
    value=ZW>Zimbab we</OPTION></SELECT>
    </td>
    </tr>
    </table>
    </form>
    </body></html>

    ************
  • Richard Cornford

    #2
    Re: Code Performance Issue

    "Martin" <martinorourke1 5@hotmail.com> wrote in message
    news:cc11d8c3.0 402130320.7b667 8a1@posting.goo gle.com...
    <snip>[color=blue]
    > <script>functio n Goodbye()[/color]

    Where is your type attribute?
    [color=blue]
    > {
    > for (var i = 0; i <
    > document.Defaul tFormName.IgsPe PersonAddrCount ry.length; i++)
    > {
    > if[/color]
    (document.Defau ltFormName.IgsP ePersonAddrCoun try.options[i].value.match(
    document.InputF orm.countrycode .value))[color=blue]
    > {
    > document.Defaul tFormName.IgsPe PersonAddrCount ry.selectedInde x =
    > i;
    > break;
    > }
    > }
    > }[/color]
    <snip>

    Resolving absolute property accessors for forms repeatedly will be
    relatively time consuming. You should create local variables that refer
    to the form object, possibly the select element and certainly the select
    element's - options - collection and then make future references to the
    properties of those objets relative to the local variable.

    var frm = document.forms. DefaultFormName ;
    var selectEl = frm.elements.Ig sPePersonAddrCo untry;
    var selOptions = selectEl.option s;

    var cntryCode = frm.elements.co untrycode.value ;
    /* no need to repeatedly look up that string as it
    should be constant while the function runs.
    */


    Then the number of options is - selOptions.leng th - the option element
    at index - c - is - selOptions[c] - and its value is -
    selOptions[c].value - and assigning a selected index is -
    selectEl.select edIndex = n - . Generally, if you reference the same
    object repeatedly with a property accessor in a function you will get
    better performance by assigning a reference to that object to a local
    variable so that each identifier does not need to be repeatedly
    resolved.

    After you have done that question the use of the - match - method.
    (should it be a comparison? Where failure to equate can be determined
    quite quickly. But I have never directly speed tested those two so match
    might be quicker, though I doubt it.)

    It won't make much difference but you could also loop through the
    options collection backwards with:-

    for(var c = selOptions.leng th;c--;){

    Comment

    • Bas Cost Budde

      #3
      Re: Code Performance Issue

      Richard Cornford wrote:
      [color=blue]
      > for(var c = selOptions.leng th;c--;){[/color]

      Ah, the old assembler trick. Thanks for showing me, I like that. :-)
      [color=blue]
      > Incidentally, I use - c - in newsgroup posts because - i - is less easy
      > to identify and my word processor likes to capitalise it.[/color]

      Food for thought. For non-native english people (like me) the danger of
      identification is not so present. You have a word processor with a
      strong feeling for personality? ;-)
      --
      Bas Cost Budde

      but the domain is nl

      Comment

      • DU

        #4
        Re: Code Performance Issue

        Bas Cost Budde wrote:
        [color=blue]
        > Richard Cornford wrote:
        >[color=green]
        >> for(var c = selOptions.leng th;c--;){[/color]
        >
        >
        > Ah, the old assembler trick. Thanks for showing me, I like that. :-)
        >[color=green]
        >> Incidentally, I use - c - in newsgroup posts because - i - is less easy
        >> to identify and my word processor likes to capitalise it.[/color]
        >
        >
        > Food for thought. For non-native english people (like me) the danger of
        > identification is not so present. You have a word processor with a
        > strong feeling for personality? ;-)[/color]

        Another policy is to give fully intuitive, meaningful identifier to such
        variable so that the code is much more understandable and, as a side
        effect, avoid this readability issue.
        E.g.:
        for(var CountryIterator = 0; CountryIterator < objSelect.lengt h;
        CountryIterator ++)
        {...}

        DU

        Comment

        Working...