Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 10 из 10
  1. #1
    Аватар для underwoker
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Сообщений
    333
    Репутация:
    47 ±

    Таинственная нагрузка и оптимизация кода ради пары миллисекунд

    Всем привет. Я бы хотел обсудить с вами тему оптимизирования кода и мистической всеубивающей нагрузки, которой все так бояться.
    Хочу заметить сразу. Я не считаю себя профессионалом pawn. Есть много людей, которые знают о pawn в разы больше меня. Так что всё, что я буду писать ниже, будет являться моим скромным мнением.

    Первая тема:
    Как и большинство скриптеров, я частенько почитываю форумы, ища для себя какую-то интересную информацию. И я очень часто стал замечать сообщения, типа "Не используй то-то, ибо это нагрузка на сервер!". Меня довольно сильно стал напрягать этот вопрос, ибо часто люди обращаются ко мне в скайп за помощью и периодически я слышу "...но это же нагрузка на сервер!...". И самое главное то, что такие люди, по незнанию, ограничивают себя во многом, боясь мистической нагрузки. По моему, времена, когда нужно было бояться любой лишней нагрузки и когда надо было считать каждый килобайт использованной памяти, давно прошли и сейчас компьютеры способны на гораздо большее, чем "обновление текстдрава каждую секунду". Лично мне ещё ни разу не удавалось положить свой сервер мистической нагрузкой. Кривым кодом - да. Но вот нагрузкой ни разу. И мне хочется плакать от смеха, когда читаешь в темах что-то типа: "Не используйте паблик OnPlayerUpdate!!!! Нельзя!!! Нагрузка, ололо!!!!". Я бы лично оторвал людям, которые пишут подобные сообщения, руки и засунул их в одно место...
    Я лишь хочу сказать то, что, по моему, нужно бояться не нагрузки, а кривого кода. Ибо если код построен правильно, вся нагрузка будет незаметна (выделил память - использовал - отчистил. И не нужно бояться нагрузки). Именно кривой код кладёт сервера (код, создающий рекурсию, например), а не нагрузка от обновления чего-либо.
    Если я не прав, хотелось бы услышать аргументированный ответ =)

    Вторая тема:
    Так же очень часто стал замечать мега-уроки, в которых люди помогают оптимизировать код. Нет, против оптимизации я ничего не имею и даже поддерживаю эту тему (часто именно по теме оптимизации ищу новую информацию). Я против того, что пишут в этих самых уроках. А пишут там частенько подобное:
    "Добрый день. Бла-бла-бла. Сегодня я вам покажу как оптимизировать "бла-бла". Это очень просто. Берёте "бла" и заменяете на мою функцию - "алб". Всё. И помните, использовать "бла-бла" плохо! Это очень нагружает мод! Мой способ ускоряет функцию на целых пару миллисекунд!"
    Примерно так. То есть, часто читаешь уроки и понимаешь, что автор пытается сказать "Использовать стандартные функции - плохо". Примерно такая тема была про PVar. Какой-то парень утверждал, что если использовать обычные массивы new, а не PVar, значит можно быть уверенным, что твой мод будет лагать и т.д. Я, если честно, не очень помню всего того, что он писал. Но писал он полную ересь. И таких людей очень много. Я называю их жертвами оптимизации. Именно от таких людей я слышал не раз "Используешь старую функцию, а не новую? Нуб!" (Один парень задал вопрос на форуме и я ему написал готовый код с использованием if/else, а не switch/case. И тут же прибежал какой-то парень, крича то, что я нуб и надо использовать switch/case, ведь нагрузки меньше!!!!). В общем, я хочу сказать, что очень глупо бегать за миллисекундами. Ни один игрок не оценит вашего старания. Да и вы сами не увидите никакой разницы. И если вы не можете разобраться в каком-то новомодном способе, ускоряющем работу кода на целые ПАРУ МИЛЛИСЕКУНД, просто пользуйтесь старым, проверенным способом. Помните, что раньше не было никаких "switch/case", "pVar" и прочего, но сервера спокойно работали, держа в паблике OnPlayerUpdate целые системы, которые не заставляли лагать сервер. Просто стройте свой код логически и тогда всё будет хорошо. Повторюсь, сервера падают не от нагрузки, а исключительно от кривого кода.

    Я бы хотел услышать ваше мнение по этому поводу. Писал тему на ходу + уставший, поэтому мысли могут быть немного не связаны между собой Только прошу аргументировать свои ответы =)

    ************************************************** ************************************************** ******
    P.s. Выложил сюда т.к. когда то он мне этой темой очень помог, а сейчас наш раздел "Вопросы" забит вопросами о оптимизации. И думаю эта тема не будет лишней.

    Текст писал: DeIMoS
    Скопировал и вставил сюда: underwoker
    Над сценарием работал: DeIMoS
    Дата выкладывания на Г-И: 16.06.2013, 16:43(Годовщина блин)
    "Власть, кровь, няш-мяш, кровь, власть, Крым наш!" - (c) Наталья Поклонская.

    Критик должен быть готов и способен в любой момент и по первому требованию занять место критикуемого им и выполнять его дело продуктивно и компетентно. В противном случае критика превращается в наглую, самодовлеющую силу и становится тормозом на пути прогресса. (с) AXE

  2. Пользователь сказал cпасибо:
    #ball (25.06.2014)
  3. #2
    Аватар для Дёня
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.03.2014
    Сообщений
    152
    Репутация:
    13 ±
    Ну просто шикарно. А я раньше думал совсем наоборот :)

    Спасибо тебе DaIMoS за данную тему, особенно про OnPlayerUpdate, я старался самый минимум кода использовать в этом паблике.

    И тебе спасибо underwoker, за то, что скопировал и вставил сюда эту тему(статью :D)

  4. #3
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    По поводу OnPlayerUpdate вообще много разных сказок до нашего времени дошло. При том точно так же, как рассказы передавали от отца к сыну на Руси, опуская некоторые детали предыдущего рассказчика и добавляя отсебятину.
    Я лишь скажу следующее. Естественно, вставлять в OnPlauerUpdate, например, проверку на деньги игрока как-то глупо, ибо деньги - штука, которая обновляется исключительно сервером и на сервере, поэтому и проверять можно при обновлении, а не по 10 раз за секунду. Но если ваша система требует точных данных - ничего плохого в использовании OnPlayerUpdate не будет. Но и про оптимизацию в этом коллбэке забывать не стоит. В данном случае позволительна даже пессимизация в плане читаемости кода, ибо чем быстрее машина прожуёт и проглотит ваш код, тем ей же и лучше (ведь вызываться код будет часто). В общем, опять же, упор идёт на адекватно написанный код. Если он таков - о нагрузке особо беспокоиться не стоит


    А статья немного упоротая :) Точнее я был немного упорот, когда создавал ту тему.
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. 2 пользователя(ей) сказали cпасибо:
    #ball (25.06.2014)Zeror_Dalglish (26.06.2014)
  6. #4
    Аватар для OKStyle
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    12.05.2013
    Сообщений
    205
    Репутация:
    49 ±
    Цитата Сообщение от underwoker Посмотреть сообщение
    Именно кривой код кладёт сервера (код, создающий рекурсию, например), а не нагрузка от обновления чего-либо.
    PHP код:
    if(strcmp(cmdtext"/enter1"true) == 0) return OnPlayerCommandText(playerid"/enter2"); 
    Примерно такой код тоже даст рекурсию. Нагрузки тут нет. Рекурсия губит - этот тезис из тех же глупых уст, что и нагрузка в OnPlayerUpdate.

    Я вообще приверженец старой школы, для меня важна работоспособность, а не оптимизация. При правильном распределении "нагрузки" по пабликам всё будет работать как часы.

  7. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от OKStyle Посмотреть сообщение
    Я вообще приверженец старой школы, для меня важна работоспособность, а не оптимизация. При правильном распределении "нагрузки" по пабликам всё будет работать как часы.
    Вот именно это я и пытался передать всей этой писаниной.
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  8. 2 пользователя(ей) сказали cпасибо:
    #ball (25.06.2014)Zeror_Dalglish (26.06.2014)
  9. #6
    Аватар для Zeror_Dalglish
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    04.06.2014
    Сообщений
    224
    Репутация:
    -1 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Вот именно это я и пытался передать всей этой писаниной.
    OnPlayerUpdate хорошо использовать по систему AFK.

    Вот только я не помню скок раз в секунды он срабатывает?

  10. #7
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от Zeror_Dalglish Посмотреть сообщение
    OnPlayerUpdate хорошо использовать по систему AFK.

    Вот только я не помню скок раз в секунды он срабатывает?
    http://pro-pawn.ru/showthread.php?91...82%D1%81%D1%8F
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  11. Пользователь сказал cпасибо:
    Zeror_Dalglish (26.06.2014)
  12. #8
    Аватар для Zeror_Dalglish
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    04.06.2014
    Сообщений
    224
    Репутация:
    -1 ±
    А вот, точно сколько нет?
    То 20, то 8 :)

  13. #9
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от Zeror_Dalglish Посмотреть сообщение
    А вот, точно сколько нет?
    То 20, то 8 :)
    Зависит от действий игрока на сервере. Чем больше действий надо синхронизировать, тем больше пакетов будет отправлено на сервер и тем чаще будет вызываться OnPlauerUpdate. А частота этих самых запросов на синхронизацию зависит от настроек в server.cfg
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  14. Пользователь сказал cпасибо:
    Zeror_Dalglish (26.06.2014)
  15. #10
    Аватар для Zeror_Dalglish
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    04.06.2014
    Сообщений
    224
    Репутация:
    -1 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Зависит от действий игрока на сервере. Чем больше действий надо синхронизировать, тем больше пакетов будет отправлено на сервер и тем чаще будет вызываться OnPlauerUpdate. А частота этих самых запросов на синхронизацию зависит от настроек в server.cfg
    Отлично, спасибо :)

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •