Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zbyt długie wykonywanie skryptu php
Forum PHP.pl > Forum > PHP
sylwekb
Dostawca hostingu zwrócił uwagę na zbyt długie wykonywanie poniższego kodu skryptu forum W-AGORA, w czym może być problem, czyżby jakieś polecenia php uległy modyfikacji i po aktualizacji wersji php są problemy, czy można to jakoś zmodyfikować?

  1. <?php
  2.  
  3. $bn_action="download";
  4. $bn_action_mode="R";
  5. require ("init.inc");
  6.  
  7. function displayNote ($key) {
  8. global $inc_dir, $ext, $site, $bn, $db, $auth, $bn_db, $bn_action, $bn_pad;
  9. global $bn_dir, $bn_dir_notes, $bn_dir_default, $icon_dir, $bn_before_access, $bn_doc_var;
  10. global $bn_user_mail, $bn_thread, $bn_modify, $bn_delete, $is_moderator;
  11. global $bn_win_width, $bn_win_height;
  12.  
  13. $has_children=is_array($db->children[$key]);
  14.  
  15. $bn_action="view";
  16.  
  17. // evaluate all variables
  18. if ($key>0) {
  19. extract ($db->entries[$key]);
  20. }
  21.  
  22. // we don't display key 0 (administrative note)
  23. // and don't display old notes (if list only new)
  24. if ( ($hidden && $auth->level<MODER) || ($key == 0) ) {
  25. $hidden_note = true;
  26. } else {
  27. // initialize links variables
  28. if ($bn_user_mail && $bn_thread) {
  29. $subscribe_thread_url = "subscribe_thread.$ext?site=$site&bn=$bn&thread=$thread";
  30. $subscribe_thread_text = LABEL_SUBSCRIBE_THREAD;
  31. $subscribe_thread_link = anchorWindow ($subscribe_thread_url, $subscribe_thread_text, ALT_RECEIVE_UPDATES, 620, 460);
  32. }
  33.  
  34. // CLOSE
  35. $close_url = "";
  36. if ($is_moderator && $bn_thread) {
  37. $close_url = "close.$ext?bn=$bn&key=$key";
  38. $close_text = LABEL_CLOSE_OPEN_THREAD;
  39. $close_link = anchor ($close_url, "", $close_text, $close_text );
  40. }
  41.  
  42. if (!empty($bn_before_access)) {
  43. if (file_exists ("$bn_dir/$bn_before_access") ) {
  44. include "$bn_dir/$bn_before_access";
  45. } else {
  46. include "$bn_dir_default/$bn_before_access";
  47. }
  48. } elseif (file_exists ("$bn_dir_default/before_access.$ext") ) {
  49. include ("$bn_dir_default/before_access.$ext");
  50. }
  51. printf ("\n<a name=\"N%s\"></a>\n", $key);
  52. $viewkey = $key;
  53. require ("$inc_dir/viewnote.$ext");
  54. }
  55.  
  56. if ( is_array($db->children[$key]) ) {
  57. // display all replies to this thread
  58. reset ($db->children[$key]);
  59. while ( $child=current($db->children[$key]) ) {
  60. $nextchild = next($db->children[$key]);
  61. if ($parent == 0) {
  62. printf ("\n<p><a name=\"T%s\"></a><div align=\"right\">", $child);
  63. printf ("<a href=\"#top\">%s</a>&nbsp;&nbsp;&nbsp;&nbsp;</div>\n", LABEL_TOP);
  64. if ($nextchild) {
  65. printf ("<div align=right><a href=\"#T${nextchild}\">%s</a>&nbsp;</div>", LABEL_NEXT_THREAD);
  66. }
  67. }
  68. // print "<blockquote>";
  69. displayNote ($child);
  70. // print "</blockquote>";
  71. }
  72. }
  73. }
  74.  
  75. /* Execute before_access program */
  76. if (!empty($bn_before_access)) {
  77. if (file_exists ("$bn_dir/$bn_before_access") ) {
  78. include "$bn_dir/$bn_before_access";
  79. } else {
  80. include "$bn_dir_default/$bn_before_access";
  81. }
  82. } elseif (file_exists ("$bn_dir_default/before_access.$ext") ) {
  83. include ("$bn_dir_default/before_access.$ext");
  84. }
  85.  
  86. display_header (TITLE_DOWNLOAD_FORUM, $header_footer);
  87. if (empty($bn)) {
  88. msgForm (ERROR_NO_FORUM_SPECIFIED, "$main_page", "", "_top");
  89. }
  90.  
  91. $unit = (isset($unit)) ? $unit : "7";
  92.  
  93. if ( 0 == (integer)$unit ) {
  94. $period = "";
  95. } else {
  96. $period = (empty($period)) ? "1" : $period;
  97. }
  98.  
  99. beginForm();
  100. print ("<a name=\"top\"></a>");
  101. print LABEL_SHOW_ACTIVE_THREADS;
  102. textField ("period", $period, 3);
  103. $units = array (
  104. "0" => LABEL_SHOW_ALL,
  105. "1" => LABEL_DAYS,
  106. "7" => LABEL_WEEKS,
  107. "30" => LABEL_MONTHS
  108. );
  109. listBox ("unit", $units, $unit);
  110. submitButton ("go", LABEL_GO);
  111. endForm();
  112.  
  113. # Gets listing outline
  114. # --------------------
  115. if (!empty($bn_list_vars) && file_exists ("$bn_dir/$bn_list_vars") ) {
  116. include "$bn_dir/$bn_list_vars";
  117. } elseif (file_exists ("$bn_dir_default/list.$ext") ) {
  118. include ("$bn_dir_default/list.$ext");
  119. }
  120.  
  121. if (empty($bn_digest_even_first_line) ) { // even first line should not be empty if defined
  122. $bn_digest_header = "<div align=left><ul>";
  123. $bn_digest_odd_first_line = "<li><font size=-1>\$formated_date</font> <a href='#N\$key'><em>\$subject</em></a> \$att_icon (\$username)";
  124. $bn_digest_even_first_line = "<li><font size=-1>\$formated_date</font> <a href='#N\$key'><em>\$subject</em></a> \$att_icon (\$username)";
  125. $bn_digest_begin_level = "<ul>";
  126. $bn_digest_odd_line = "<li><font size=-1>\$formated_date</font> <a href='#N\$key'><em>\$subject</em></a> \$att_icon (\$username)";
  127. $bn_digest_even_line = "<li><font size=-1>\$formated_date</font> <a href='#N\$key'><em>\$subject</em></a> \$att_icon (\$username)";
  128. $bn_digest_end_level = "</ul>";
  129. $bn_digest_footer = "</ul></div>";
  130. }
  131.  
  132. # gets all notes from the forum
  133. # -----------------------------
  134. $list_var["body"]=1;
  135. $expnd="all";
  136.  
  137. if ($period>0) {
  138. $last = $now - ($period * $unit * 24*60*60);
  139. } else {
  140. $last = 0;
  141. }
  142.  
  143. if ($totalnotes == 0) {
  144. msgWarning (sprintf(ERROR_NO_ENTRY_FOUND, $msg[0]));
  145. echo "</body></html>";
  146. }
  147.  
  148. $ret = $db->listThreads ($bn_db, 0, 0, "newest>$last", 1, 0);
  149.  
  150. # displays notes listing
  151. # -----------------------
  152. if (!is_array ($ret) || ($ret < 0)) {
  153. echo "<CENTER><strong>"; printf(ERROR_DATABASE, $ret); echo "</STRONG></CENTER>";
  154. } else {
  155. require_once "$inc_dir/listrenderer.$ext";
  156. $list =& new ListRenderer($db);
  157. $list->displayList(0, 'digest');
  158. }
  159.  
  160. # Now display each individual note
  161. # --------------------------------
  162. $bn_action="view";
  163.  
  164. # include Note template
  165. # ----------------------
  166. if (!empty($bn_template) && file_exists ("$bn_dir/$bn_template") ) {
  167. include "$bn_dir/$bn_template";
  168. } elseif (file_exists ("$bn_dir_default/template.$ext") ) {
  169. include ("$bn_dir_default/template.$ext");
  170. }
  171.  
  172. ## $bn_doc_var="<p><STRONG>\$formated_date <font color=\"#339900\">\$subject</font></strong><P>\$body<br><P><a href='mailto:\$useraddress?subject=[\$bn] \$subject'>\$username</a>";
  173.  
  174. if (is_array($db->entries)) {
  175. reset($db->entries);
  176. displayNote(0);
  177. }
  178.  
  179. # Display footer
  180. # --------------
  181. display_footer ($header_footer);
  182. ?>
  183.  
daniel1302
My ci tutaj nie pomożemy, stosujesz nieznane dla nas klasy, funkcje itp. Kod wygląda ble... Bardzo razi w oczy global.....
Użyj funkcji
na początku i na końcu, potem odejmij od siebie czasy i usuwaj po kolei fragmenty kodu i zobatrz co tak długo trwa.
Czytnij:
http://php.webtutor.pl/pl/2011/04/12/jak-o...zez-skrypt-php/
sylwekb
Wielkie dzięki, dla jasności nie jestem autorem tego "ble" skryptu tylko W-AGORA, także nie mogę się w nim połapać dlatego zadałem pytanie, może ktoś z tym "wynalazkiem" się kiedyś spotkał i pomoże. Rzuciłem zapytanie na forum twórcy skryptu ale na razie bez odpowiedzi, w sumie nie piszą tam nic o wysyceniu procesora, a jak widzę były zakładane i funkcjonują we Francji, Anglii i USA.
Uriziel01
1)O Boże ta ilość Global'i, ten kto to pisał miał `nieciekawą` technikę tworzenia kodu.
2)Ogarniasz jakiekolwiek modyfikację tego kodu mając taka ilość kodu HTML we wnętrzu logiki ?
3)Widzimy tutaj zbyt mało, po tak małym kawałku kodu można jedynie powiedzieć że jest źle nieciekawie napisny, nic poza tym.
4)Zainteresuj sie narzędziami w stylu XDebug, posiada on tak zwany Profiler który potrafi ci ładnie (no ok, wiem że nie ładnie, ale sa skrypty które potrafią to ładnie opakować biggrin.gif) wypisać ile czasu trwały poszczególne etapy generowania strony w PHP (i nie tylko).
LINK:
http://xdebug.org/
by_ikar
Cytat
1)O Boże ta ilość Global'i, ten kto to pisał miał `nieciekawą` technikę tworzenia kodu.

Moje pierwsze wrażenie było identyczne wink.gif

Tak jak kolega wyżej, również polecam ci nawet na localhost wrzucić stronę (wampserver ma wbudowany xdebug), odpalić xdebuga, podejrzeć wyniki w webgrind i zobaczyć na co idzie najwięcej czasu.

Cytat
2)Ogarniasz jakiekolwiek modyfikację tego kodu mając taka ilość kodu HTML we wnętrzu logiki ?

Są cms'y które mają jeszcze bardziej html pomieszany z php, niekiedy w taki sposób żeby do czegokolwiek dojść, trzeba znać cms na wylot tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.