Профессиональное программирование на PHP

Страница 425 из 591


Профилирование более крупного приложения 441

247 $link = $serendipity["serendipityHTTPPath"] ;;

248 if (date("m") == $month &&

249 dateC'Y") == $year &&

250 dateC'j") == currDay) {

251 echo "<I>";

252 }

253 if ($activeDays[$currDay] > 1) {

254 print ("<A HREF='$link'>");

255 }

256 print ($currDay);

257 if ($activeDays [$currDay] > 1) print ("</A>"),-

258 if (dateC'm") == $month &&

259 dateC'Y") == $year &&

260 dateC'j") == $currDay) {

261 echo "</I>";

262 }

263 print("</TD>");

264 $ currDay+ +;

265 }

266 else {

267 print "<TD CLASS=1serendipity_calendarBlahkDay$cellProp'>" ;

268 print "&nbsp;</TD>";

269 }

270 }

271 print ("</TR>");

Выше приведен фрагмент функции serendipity_drawcalendar (), которая рисует календарь в панели навигации. Из строки 244 ясно, что вызов date () зависит от переменных $month, $currDay и $уеаг. Значение $currDay увеличивается на каждой итерации цикла, поэтому полностью избежать этого вызова не удастся. Однако можно заменить строку:

dateC'Ymd", mktime(0,0,0, $month, $currDay, $year))

Она создает строковое представление даты из значений $month, $currDay и $уеаг. Избежать использования функций date () и mktime () можно просто путем форматирования строки:

sprintf("%4d%02d%02d:, $year, $month," $currDay)

Вызовы функции date () в строках 248, 249, 250, 258, 259 и 260 не зависят от переменных, поэтому их можно вынести за пределы цикла. После этого перед началом цикла следует организовать предвычисление трех необходимых результатов date ():

227 $date_m = dateC'm");

228 $date_Y = dateC'Y");

229 $date_j = dateC'j");

230 print ("<TR CLASS='serendipity_calendar1>");

231 for ($y=0; $y<7; $y++) {

232 /* ... */

Теперь строки 248-250 и 258-261 должны выглядеть так:

if ($date_m == $month && $date_Y == $year && $date_j == $currDay) {




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006