anonymous@RULINUX.NET~# Last login: 2024-12-26 22:28:18
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

Прием патчей к исходникам LOR-NG

Раз уж исходники стали более-менее доступны, предлагаю прикрепить в этом разделе тему с предложениями по их улучшению. Для затравки два предложения:

1. Повыбрасывать из кода в classes/*.class.php вызовы "mysql_close();" - насколько я понимаю, из-за этих вызовов каждый вызов метода класса будет переустанавливать соединение к БД.

Да и пролог, устанавливающий соединение к БД, выбирающий зачем-то базу и устанавливающий кодировку для сессии - лучше куда-нить в глобальный инклюд вытащить и делать это всё однократно при инициализации обработки запроса, чем на каждый вызов метода.

2. Из метода pages::get_meta_data (classes/pages.class.php) следующие строки:

  1. if (mysql_numrows($meta_res)<=0){
  2. mysql_close();return -1;
  3. }
ибо возвращённое значение нигде не проверяется (и при пустом наборе данных даёт ошибки при использовании в foreach, например в incs/header.inc.php), а пустой массив - вполне адкватная репрезентация пустого набора данных

anonymous(*) (2009-05-11 18:03:12)

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: Прием патчей к исходникам LOR-NG от anonymous 2009-05-11 18:03:12
avatar
Скрыть

Re:Прием патчей к исходникам LOR-NG

> 1. Повыбрасывать из кода в classes/*.class.php вызовы "mysql_close();"

Принято. Начинал писать достаточно сумбурно, а сейчас все руки не доходят подобный мусор выкинуть

> 2. Из метода pages::get_meta_data (classes/pages.class.php) следующие строки:

ИМХО, лучше оставить return, mysql_close естественно выбросить. А тут - мало ли где понадобится его проверка

temy4(*)(2009-05-11 21:11:25)

Opera/9.64 (X11; Linux i686; U; en) Presto/2.1.1
[#] [Добавить метку] [Редактировать] Ответ на: Прием патчей к исходникам LOR-NG от anonymous 2009-05-11 18:03:12
avatar
Скрыть

Re:Прием патчей к исходникам LOR-NG

> мало ли где понадобится его проверка

-1 там говорит, что не нашлось строк в наборе данных. То же самое скажет и пустой массив. Если понадобится проверка - можно просто будет проверить длину массива.

anonymous(*)(2009-05-11 21:25:30)

[#] [Добавить метку] [Редактировать] Ответ на: Прием патчей к исходникам LOR-NG от anonymous 2009-05-11 18:03:12
avatar
Скрыть

Re:Прием патчей к исходникам LOR-NG

Я пытался унифицировать вывод ошибок функциями

temy4(*)(2009-05-11 21:59:31)

Opera/9.64 (X11; Linux i686; U; en) Presto/2.1.1
[#] [Добавить метку] [Редактировать] Ответ на: Прием патчей к исходникам LOR-NG от anonymous 2009-05-11 18:03:12
avatar
Скрыть

Re:Прием патчей к исходникам LOR-NG

> Нечего оправдываться и переводить стрелки на туксойда - никто же не говорю, что разработчиков надо убить прямо сейчас :)

Я говорю про то что времени не было их досканально просмотреть :-)

> это не оптимизация а то, что хотелось бы поиметь

пд оптимизацией я имел в виду минимизацию вызовов к СУБД

> Вообще, было бы неплохо если бы разрабы взяли бы за правило складывать сорцы в конце дня куда-нить в ФС сервера, раз уж cvs пока нет.

Да погоди, свн скоро будет уже

temy4(*)(2009-05-12 21:46:28)

Opera/9.64 (X11; Linux i686; U; en) Presto/2.1.1
[#] [Добавить метку] [Редактировать] Ответ на: Прием патчей к исходникам LOR-NG от anonymous 2009-05-11 18:03:12
avatar
Скрыть

Re:Прием патчей к исходникам LOR-NG

> Да погоди, свн скоро будет уже

Через неделю я уеду в отпуск, а за это время мог бы попробовать наваять трекер.пхп (в принципе я тоже на пыхе не писец).

anonymous(*)(2009-05-12 21:52:47)

[#] [Добавить метку] [Редактировать] Ответ на: Прием патчей к исходникам LOR-NG от anonymous 2009-05-11 18:03:12
avatar
Скрыть

Re:Прием патчей к исходникам LOR-NG

А можешь в forum.php заменить последовательность действий:

$ath = mysql_query("INSERT INTO forum_threads(name, user_name, posting_date, forum_id) VALUES('$title', '$username', '$posting_date', '$forumid')");

...

$tbl = mysql_query("SELECT thread_id FROM forum_threads WHERE name = '$title' AND posting_date = '$posting_date' AND forum_id = '$forumid'");

...

$thr = mysql_fetch_array($tbl);

$thread_id = $thr['thread_id'];

на:

$ath = mysql_query("INSERT INTO forum_....

$thread_id = mysql_insert_id($ath);

И не понял для чего после создания треда повторно брать дату для сообщения, а потом апдейтить тред новой датой. Наверное это можно закоментить нафиг.

Вообще, хотелось бы в базе иметь timestamp'ы и даты в полях типа timestamp а не в виде строки или целого. Можешь добавить колонку created_at типа timestamp в таблицы news, comments, forum_messages, forum_threads etc? Они будут автоматически инициализироваться текущим временем при создании записи.

И ещё хотелось бы поиметь полный набор сорцов, включая файлик view-message.php и х/з что там ещё было пропущено. Тестовый набор данных был бы тоже не вреден.

anonymous(*)(2009-05-12 07:45:41)

[#] [Добавить метку] [Редактировать] Ответ на: Прием патчей к исходникам LOR-NG от anonymous 2009-05-11 18:03:12
avatar
Скрыть

Re:Прием патчей к исходникам LOR-NG

форум Туксойд писал, я его исходники хоть и правил, но не оптимизировал

temy4(*)(2009-05-12 09:08:40)

Opera/9.64 (X11; Linux i686; U; en) Presto/2.1.1
[#] [Добавить метку] [Редактировать] Ответ на: Прием патчей к исходникам LOR-NG от anonymous 2009-05-11 18:03:12
avatar
Скрыть

Re:Прием патчей к исходникам LOR-NG

Нечего оправдываться и переводить стрелки на туксойда - никто же не говорю, что разработчиков надо убить прямо сейчас :)

К тому же таймстампы, актуальные сорцы и тестовые данные - это не оптимизация а то, что хотелось бы поиметь, что бы тракер.пхп пририсовать.

Вообще, было бы неплохо если бы разрабы взяли бы за правило складывать сорцы в конце дня куда-нить в ФС сервера, раз уж cvs пока нет.

anonymous(*)(2009-05-12 13:46:02)

[#] [Добавить метку] [Редактировать] Ответ на: Прием патчей к исходникам LOR-NG от anonymous 2009-05-11 18:03:12
avatar
Скрыть

Re:Прием патчей к исходникам LOR-NG

  1. #ifndef nsHTMLReflowMetrics_h___
  2. #define nsHTMLReflowMetrics_h___
  3. #include <stdio.h>
  4. #include "nsISupports.h"
  5. #include "nsMargin.h"
  6. #include "nsRect.h"
  7. // for MOZ_MATHML
  8. #include "nsIRenderingContext.h" //to get struct nsBoundingMetrics
  9. //———————————————————————-
  10. // Option flags
  11. #define NS_REFLOW_CALC_MAX_WIDTH 0x0001
  12. #ifdef MOZ_MATHML
  13. #define NS_REFLOW_CALC_BOUNDING_METRICS 0x0002
  14. #endif
  15. /**
  16. * An nsCollapsingMargin represents a vertical collapsing margin between
  17. * blocks as described in section 8.3.1 of CSS2,
  18. * <URL: http://www.w3.org/TR/REC-CSS2/box.html#collapsing-margins >.
  19. *
  20. * All adjacent vertical margins collapse, and the resulting margin is
  21. * the sum of the largest positive margin included and the smallest (most
  22. * negative) negative margin included.
  23. */
  24. struct nsCollapsingMargin {
  25. private:
  26. nscoord mMostPos; // the largest positive margin included
  27. nscoord mMostNeg; // the smallest negative margin included
  28. public:
  29. nsCollapsingMargin()
  30. : mMostPos(0),
  31. mMostNeg(0)
  32. {
  33. }
  34. nsCollapsingMargin(const nsCollapsingMargin& aOther)
  35. : mMostPos(aOther.mMostPos),
  36. mMostNeg(aOther.mMostNeg)
  37. {
  38. }
  39. nsCollapsingMargin& operator=(const nsCollapsingMargin& aOther)
  40. {
  41. mMostPos = aOther.mMostPos;
  42. mMostNeg = aOther.mMostNeg;
  43. return *this;
  44. }
  45. void Include(nscoord aCoord)
  46. {
  47. if (aCoord > mMostPos)
  48. mMostPos = aCoord;
  49. else if (aCoord < mMostNeg)
  50. mMostNeg = aCoord;
  51. }
  52. void Include(const nsCollapsingMargin& aOther)
  53. {
  54. if (aOther.mMostPos > mMostPos)
  55. mMostPos = aOther.mMostPos;
  56. if (aOther.mMostNeg < mMostNeg)
  57. mMostNeg = aOther.mMostNeg;
  58. }
  59. void Zero()
  60. {
  61. mMostPos = 0;
  62. mMostNeg = 0;
  63. }
  64. PRBool IsZero() const
  65. {
  66. return (mMostPos == 0) && (mMostNeg == 0);
  67. }
  68. nscoord get() const
  69. {
  70. return mMostPos + mMostNeg;
  71. }
  72. };

temy4(*)(2009-05-13 00:36:56)

Opera/9.64 (X11; Linux i686; U; en) Presto/2.1.1
[#] [Добавить метку] [Редактировать] Ответ на: Прием патчей к исходникам LOR-NG от anonymous 2009-05-11 18:03:12
avatar
Скрыть

Re:Прием патчей к исходникам LOR-NG

  1. #ifndef nsHTMLReflowMetrics_h___
  2. #define nsHTMLReflowMetrics_h___
  3. #include <stdio.h>
  4. #include "nsISupports.h"
  5. #include "nsMargin.h"
  6. #include "nsRect.h"
  7. // for MOZ_MATHML
  8. #include "nsIRenderingContext.h" //to get struct nsBoundingMetrics
  9. //———————————————————————-
  10. // Option flags
  11. #define NS_REFLOW_CALC_MAX_WIDTH 0x0001
  12. #ifdef MOZ_MATHML
  13. #define NS_REFLOW_CALC_BOUNDING_METRICS 0x0002
  14. #endif
  15. /**
  16. * An nsCollapsingMargin represents a vertical collapsing margin between
  17. * blocks as described in section 8.3.1 of CSS2,
  18. * <URL: http://www.w3.org/TR/REC-CSS2/box.html#collapsing-margins >.
  19. *
  20. * All adjacent vertical margins collapse, and the resulting margin is
  21. * the sum of the largest positive margin included and the smallest (most
  22. * negative) negative margin included.
  23. */
  24. struct nsCollapsingMargin {
  25. private:
  26. nscoord mMostPos; // the largest positive margin included
  27. nscoord mMostNeg; // the smallest negative margin included
  28. public:
  29. nsCollapsingMargin()
  30. : mMostPos(0),
  31. mMostNeg(0)
  32. {
  33. }
  34. nsCollapsingMargin(const nsCollapsingMargin& aOther)
  35. : mMostPos(aOther.mMostPos),
  36. mMostNeg(aOther.mMostNeg)
  37. {
  38. }
  39. nsCollapsingMargin& operator=(const nsCollapsingMargin& aOther)
  40. {
  41. mMostPos = aOther.mMostPos;
  42. mMostNeg = aOther.mMostNeg;
  43. return *this;
  44. }
  45. void Include(nscoord aCoord)
  46. {
  47. if (aCoord > mMostPos)
  48. mMostPos = aCoord;
  49. else if (aCoord < mMostNeg)
  50. mMostNeg = aCoord;
  51. }
  52. void Include(const nsCollapsingMargin& aOther)
  53. {
  54. if (aOther.mMostPos > mMostPos)
  55. mMostPos = aOther.mMostPos;
  56. if (aOther.mMostNeg < mMostNeg)
  57. mMostNeg = aOther.mMostNeg;
  58. }
  59. void Zero()
  60. {
  61. mMostPos = 0;
  62. mMostNeg = 0;
  63. }
  64. PRBool IsZero() const
  65. {
  66. return (mMostPos == 0) && (mMostNeg == 0);
  67. }
  68. nscoord get() const
  69. {
  70. return mMostPos + mMostNeg;
  71. }
  72. };

temy4(*)(2009-05-13 00:38:13)

Opera/9.64 (X11; Linux i686; U; en) Presto/2.1.1
[#] [Добавить метку] [Редактировать] Ответ на: Прием патчей к исходникам LOR-NG от anonymous 2009-05-11 18:03:12
avatar
Скрыть

Re:Прием патчей к исходникам LOR-NG

  1. #ifndef nsHTMLReflowMetrics_h___
  2. #define nsHTMLReflowMetrics_h___
  3. #include <stdio.h>
  4. #include "nsISupports.h"
  5. #include "nsMargin.h"
  6. #include "nsRect.h"
  7. // for MOZ_MATHML
  8. #include "nsIRenderingContext.h" //to get struct nsBoundingMetrics
  9. //———————————————————————-
  10. // Option flags
  11. #define NS_REFLOW_CALC_MAX_WIDTH 0x0001
  12. #ifdef MOZ_MATHML
  13. #define NS_REFLOW_CALC_BOUNDING_METRICS 0x0002
  14. #endif
  15. /**
  16. * An nsCollapsingMargin represents a vertical collapsing margin between
  17. * blocks as described in section 8.3.1 of CSS2,
  18. * <URL: http://www.w3.org/TR/REC-CSS2/box.html#collapsing-margins >.
  19. *
  20. * All adjacent vertical margins collapse, and the resulting margin is
  21. * the sum of the largest positive margin included and the smallest (most
  22. * negative) negative margin included.
  23. */
  24. struct nsCollapsingMargin {
  25. private:
  26. nscoord mMostPos; // the largest positive margin included
  27. nscoord mMostNeg; // the smallest negative margin included
  28. public:
  29. nsCollapsingMargin()
  30. : mMostPos(0),
  31. mMostNeg(0)
  32. {
  33. }
  34. nsCollapsingMargin(const nsCollapsingMargin& aOther)
  35. : mMostPos(aOther.mMostPos),
  36. mMostNeg(aOther.mMostNeg)
  37. {
  38. }
  39. nsCollapsingMargin& operator=(const nsCollapsingMargin& aOther)
  40. {
  41. mMostPos = aOther.mMostPos;
  42. mMostNeg = aOther.mMostNeg;
  43. return *this;
  44. }
  45. void Include(nscoord aCoord)
  46. {
  47. if (aCoord > mMostPos)
  48. mMostPos = aCoord;
  49. else if (aCoord < mMostNeg)
  50. mMostNeg = aCoord;
  51. }
  52. void Include(const nsCollapsingMargin& aOther)
  53. {
  54. if (aOther.mMostPos > mMostPos)
  55. mMostPos = aOther.mMostPos;
  56. if (aOther.mMostNeg < mMostNeg)
  57. mMostNeg = aOther.mMostNeg;
  58. }
  59. void Zero()
  60. {
  61. mMostPos = 0;
  62. mMostNeg = 0;
  63. }
  64. PRBool IsZero() const
  65. {
  66. return (mMostPos == 0) && (mMostNeg == 0);
  67. }
  68. nscoord get() const
  69. {
  70. return mMostPos + mMostNeg;
  71. }
  72. };

temy4(*)(2009-05-13 00:39:25)

Opera/9.64 (X11; Linux i686; U; en) Presto/2.1.1
[#] [Добавить метку] [Редактировать] Ответ на: Прием патчей к исходникам LOR-NG от anonymous 2009-05-11 18:03:12
avatar
Скрыть

Re:Прием патчей к исходникам LOR-NG

> Повыбрасывать из кода в classes/*.class.php вызовы "mysql_close();" - насколько я понимаю, из-за этих вызовов каждый вызов метода класса будет переустанавливать соединение к БД.

не, так было давно. Сейчас в действительности имеется пул соединений, и при запросе соединения с бд новое обычно не создаётся, а используется из пула. При mysql_close() соединение не закрывается, а возвращается в пул и может быть повторно использовано при новом запросе. Убирание вызовов mysql_close() в действительности мало на что повлияет, так как по завершении скрипта все его открытытые дескрипторы всё равно закрываются.

bugmaker(*)(2009-05-22 07:14:46)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!