Иллюстрированный самоучитель по Web-разработке на Macromedia Studio MX



              

Работа с автоматически сгенерированными программами в Dreamweaver MX и Fireworks MX


Причиной того, что программисты называют код, автоматически сгенерированный Dreamweaver MX и Fireworks MX, программами-заготовками (ugly code), является то, что эти программы обобщают все возможные сценарии работы пользователя. Естественно, размер программ при этом увеличивается.

Примером может служить такой вот код, обслуживающий обычную операцию замещения (rollover):

function MM_findObj (n, d) //v4.01 var p, i, x; if (!d) d=document;

if ((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p); if(!(x=d[n]&&d.all) x=d.all[n];

for (i=0; !x&&i<d.forms.length; i++) x=d.forms[i][n]; for (i=0; !x&&d.layers&&i<d.layers.lendth; i++)

x=MM_findObj(n,d.layers[i].document); if (!x&&d.GetElementById) x=d.getElementBy!d(n); return x; } function MM_swapImageО { //v.3.0

var i, j=0, x, a=MM_swapImage.arguments; document.MM_sr= new Array; for(i=0;i< (a.length-2);i+=3) if ((MM_findObj(a[i]))!=null) {document.MM_sr[j++]=x; if (Ix.oSrc) x.oSrc=x.src; x.src=a[i+2];} }

Попросту говоря, функция MM_SwapImage () получает список аргументов, содержащих данные в форме адресов URL, имен файлов рисунков или пустых строк. Например, искомые данные при помещении курсора мыши над объектом будут выглядеть следующим образом:

onMouseOver = "MM_swapImage('shoes', '',

'images/shoes_f2.gif',

'hats','','images/hats_f2.gif',!)")

Проблема состоит в том, что в функции не используется последний оператор If. Вместо этого функция проходит в цикле по всем наборам данных и исследует в поисках объекта весь документ.

После этого адрес URL старой графики сохраняется, если используется функция swaplmageRestore (), а сам адрес URL изменяется и указывает уже на новый рисунок.

Все это немного напоминает использование атомной бомбы для жарки барбекю. Естественно, барбекю поджарится, но при этом будет израсходована масса излишней энергии.

В данном примере не только содержится избыточный код, но и несколько излишних циклов процессора, так как для поиска объекта используется рекурсивная функция (древоподобная функция, сохраняющая вызовы на каждой ветви обработки, пока поиск проводится на всех дочерних ветвях).



Содержание  Назад  Вперед