Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 10 из 10
  1. #1
    Аватар для underwoker
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Сообщений
    331
    Репутация:
    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
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    По поводу OnPlayerUpdate вообще много разных сказок до нашего времени дошло. При том точно так же, как рассказы передавали от отца к сыну на Руси, опуская некоторые детали предыдущего рассказчика и добавляя отсебятину.
    Я лишь скажу следующее. Естественно, вставлять в OnPlauerUpdate, например, проверку на деньги игрока как-то глупо, ибо деньги - штука, которая обновляется исключительно сервером и на сервере, поэтому и проверять можно при обновлении, а не по 10 раз за секунду. Но если ваша система требует точных данных - ничего плохого в использовании OnPlayerUpdate не будет. Но и про оптимизацию в этом коллбэке забывать не стоит. В данном случае позволительна даже пессимизация в плане читаемости кода, ибо чем быстрее машина прожуёт и проглотит ваш код, тем ей же и лучше (ведь вызываться код будет часто). В общем, опять же, упор идёт на адекватно написанный код. Если он таков - о нагрузке особо беспокоиться не стоит


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

    Широко известно, что идеи стоят 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
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от OKStyle Посмотреть сообщение
    Я вообще приверженец старой школы, для меня важна работоспособность, а не оптимизация. При правильном распределении "нагрузки" по пабликам всё будет работать как часы.
    Вот именно это я и пытался передать всей этой писаниной.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 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
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Zeror_Dalglish Посмотреть сообщение
    OnPlayerUpdate хорошо использовать по систему AFK.

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

    Широко известно, что идеи стоят 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
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Zeror_Dalglish Посмотреть сообщение
    А вот, точно сколько нет?
    То 20, то 8 :)
    Зависит от действий игрока на сервере. Чем больше действий надо синхронизировать, тем больше пакетов будет отправлено на сервер и тем чаще будет вызываться OnPlauerUpdate. А частота этих самых запросов на синхронизацию зависит от настроек в server.cfg
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 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)

Ваши права

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