ЙажаСценарий / Говнокод #13871 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
function refreshPaymentStatus() {
}

refreshPaymentStatusJob();

function refreshPaymentStatusJob() {
    setInterval("refreshPaymentStatus()", 10000);
}

Бесят люди которые, будучи обмануты кажущейся простотой JS, пишут такие конструкции "по привычке". Job он, @#$%, завёл. А Scheduler, интересно, где забыл? А SchedulerManager? А SchedulerManagerFactory? Зато не забыл передать строкой первый аргумент в setInterval, молодец.

Запостил: madhead madhead, (Updated )

Комментарии (51) RSS

  • Меня больше прикалывали люди, пишущие в подобном стиле на питоне. Попытки обьяснить, что в js setInterval - асинхронный, т.е. метод будет вызван в том же треде, а в питоне Timer запускает новый тред и что аналогом будет while True: ....; time.sleep(...) успехом не увенчались.
    Ответить
      • Плюс мой. Потому что
        function refreshPaymentStatusJob() {
            setInterval(refreshPaymentStatus, 10000);
        }
        Кстати, я не понимаю, за что ставят минусы...
        Ответить
        • Да вообще без джоба:
          (function refreshPaymentStatus() {
              setInterval(refreshPaymentStatus, 300);
          })();

          А минусы - ожидаемо - пришёл сюда негатив слить, а не позитив привнести...
          Ответить
          • > А минусы - ожидаемо - пришёл сюда негатив слить, а не позитив привнести...
            Мне кажется, минусы тут из-за того, что код не очень смотрится. Или минусующим контекста не хватает, или духа энтерпрайза.
            Вы в этом варитесь и испытываете эмоции, а у просматривающих эмоций не возникает.
            Ответить
            • >или духа энтерпрайза.
              Наверно. Оно нам еще не настолько настопизденело. А вообще, неисповедимы пути кармы.
              Ответить
          • Ну мало ли для чего job может быть нужен... Можно его ещё где-то использовать.
            А твой вариант без job'а неправильный, так каждое выполнение функции будет делать ещё один setInterval.
            Ответить
            • Да, понятно, упустил контекст. Нет, этот джоб точно нигде не юзается. Код служит лишь для периодического обновления инфы на одной из страниц: http://clip2net.com/s/5RdPfg.
              Ответить
              • Контекст тут не при чём. Просто setInterval должен быть вне функции, а не внутри. Ну и не видно причин давать ей имя в таком случае.
                Ответить
    • < Попытки обьяснить, что в js setInterval - асинхронный, т.е. метод будет вызван в том же треде, а в питоне Timer запускает новый тред и что аналогом будет while True: ....; time.sleep(...)>

      Асинхронным будет как раз таки дополнительный поток, дурья твоя бошка!
      Во многих скриптовых языках нет возможности создавать доп.поток, поэтому выкручиваются с помощью таймеров.

      P/S.
      гоатсе постить не буду, просто перечитайте пост еще раз.
      Ответить
      • Ты плохо понимаешь, как работает асинхронный код. Там на самом деле все крутится в одном треде, поэтому ни дай бог его заблокировать.
        Ответить
        • я понимаю. Такая же паибота в autoit-e. Отдельный асинхронный поток средствами самой runtime lib создать нереально, разве что на апях, но все же на моем веку CreateThread на автоите никто не вызывал. Псевдо-многопоточность реализуют иногда через анус:

          AdlibRegister("funcname",interval)
          ,
          где funcname - имя метда, который нужно запускать в отдельном потоке, interval - таймаут, по которому основной (и кстати единственный) поток вызывает указанный метод.
          Ответить
          • Ну вот, а в питоне Timer() запускает функцию в отдельном потоке с определенным периодом, а теперь представь себе, что, внезапно, функция не завершилась к запуску следующей, или еще хуже - если она повисла. Через некоторое время у тебя будет 100500 тредов, да и состояние гонки придется разгребать.
            Ответить
              • Дело не в змее, дело в том, что люди тащат свои привычки на другой язык, не разбираясь, почему в одном языке сделано так и почему это может не работать в другом языке. Вместо того, чтобы искать "питон setInterval()", нужно отойти на шаг назад, сформулировать, что (а не как) нужно сделать и это искать.
                Ответить
                • setTimeout() - ну, в таком случае все верно - выполнять код в отдельном потоке, по таймеру.

                  setTimer(), setInterval(),setTimeout() - выбирай на вкус.
                  Ответить
            • Бля, кажется, в бейсике так же(
              Переполнение ж должно быть по идее?
              Ответить
              • Переполнение чего? Не, ну когда-то они могут и всю память выжрать, если не трогать.
                Ответить
              • В дельфях однозначно так. Таймер крутит код в отдельном потоке, проверено на showmessage.
                Ответить
                • При открытом ShowMessage показывается еще один? 🙂

                  Так это нихуя не показатель работы дополнительного потока... Вот таким кодом проверь:
                  procedure TimerTick;
                  begin
                      ShowMessage('Forever alone');
                      repeat until false;
                  end;
                  Если там действительно запускался поток - месседжбоксы показывались бы на каждый тик таймера. Но покажется он ровно 1 раз, после чего все повиснет к хуям. И тогда ты поймешь, что это самая обычная асинхронщина.
                  Ответить
                  • P.S. Ну а для верности выведи результат GetCurrentThreadId() где-нибудь в основном потоке, и по тику таймера. Если покажет разные значения - снимаю шляпу, таймер действительно вызывает обработчик в отдельном потоке 😉
                    Ответить
                    • Прога имеет только 1 поток - я проверял, однако, даже вот такой код:
                      procedure TimerTick;
                      begin
                          ShowMessage('Forever alone');
                          sleep(200000);
                      end;

                      выдает несколько окошек, потом прога подвисает. Если использовать вместо showmessage api messagebox, окошки начинают наслаиваться друг на друга. Их много. Каким образом такое возможно? Я же торможу поток sleep -ом.
                      Ответить
                      • По-братски, скомпилируйте кто-нибудь, у кого есть Делфи.
                        Ответить
                      • > Каким образом такое возможно
                        Внутри showmessage/messagebox вроде бы запускается еще один цикл разгребания сообщений. Видимо он выдергивает следующее событие от таймера из очереди, и исполняет его. А там запускается еще один месседжбокс, внутри которого еще один цикл обработки сообщений и т.п...
                        Ответить
  • А сколько раз в этом коде встречается вызов этого Джоба?
    Ответить
    • > А сколько раз в этом коде встречается вызов этого Джоба?
      Забавно, если это количество - не константа от времени.
      Ответить
      • Не, не количество вызовов в рантайме, а именно вхождений refreshPaymentStatusJob() в тексте.
        Ответить
          • Ну тогда да, setInterval(refreshPaymentStatus, 10000) было бы достаточно, безо всяких джобов... Согласен с вами.
            Ответить
  • ю!ъ!гC(U:B$M(M(P?T"S F?W)OU?V.X)Y(L.M H$D"L,G"X(N F(HV,B)I M!H G$DP.P$C.T"R)I$M$W$W?V"T$V:E$Z?P!X,O?R$Q(K?Q(I$T:O,S)D"V.F!T(T,K!C?U:L(DY(Z:T,YT)W?Y(HD(F)O(T,Y(D,A,F!M$JU)X,V!N!S,B?A:Y,C)G!PQ,XZ$Z(V.Y)E!B!K)C,G$O.V$G.W,P(N?I)P$N"M:X M!Y(C!L C)I"R!N$M.C?I"L:H?I$H$N"S!J Y$D K:U?D)J:Q:I(P"C(S,U,Q?D(K(HСЕМЩDGKRDIHGWBUZPTNGUVGLGUXGTCJAJQZVJKUEMHNZPBGLOQCOWYMZWDQWZYLEKRGHHCWYERYKIMEVAUENYSZKOWSJIJDIDFUAAQFWZRQZUYQEEDISGJNLQSKWGWOMKSVIYXPIBHRESZBSIUXRBISGCFDRKIFXFBMKNIVSWHRRDLHTZRXPMNCKFSGKGMAQQHQUYXRUIIPNJPVTIZHPYVKZAY
    Ответить
  • ч!ь?т(U$E!O.C L$T,C)LY:D,P(R?I:J)R Z:M)C!G,A J:W,T.H:G!HQ?C!R"O$P)N!Q,U)R,H,P$T.T"F$R:L"F.A$L J!C$A)I"C)T"R:U?H?H,D$XУХСМKHTBOIWASBQZUKDYIVNNNYFHPFPDAEXPAYMRQUJDZPAUFNONDNMVABARXHUDQVUIKSJOPUVCQIDYTBRWILSKLLHVDNXWYZITZYWDDLJDFOLRJRZFFJHYYVHGTCPQPFUGETKURLFJHEPFRUADWJKTBDUMKREETYDHR
    Ответить
  • э!ж)шA.O(A:Y!S)K U)K,H.F,Z:Y,B:G)Q.E B!YG(F"OQ.RX"Z(N"H,S!KЪЩВЬRJOZEJWHMBYSQIITVFULWKLBXEEECZCVYVETFOFDGGRIHOPGSVLYXPVFOFSJPABXETFDARKYDWNVDOSLMDLHPPUTROCCIYNBVZVBDGRGUNE
    Ответить
  • х!и,ь?J.FP"K T,S(J$R(B)CМФБПMLWTJMZMPOOUILJNDSHPRJHTCZKMNTINDAIDTXHOCXSYBRVSIDFTJPXDJUIJSYBBBJLNJXCJWAPHNDSKWOAXAMCFRCEEMJEOECRWMXJSQILMOHHJAMWSTKJYKYEUGXZRUUQBBMLHWDXQUDCYSLSQEKDWJNZMPQJEEPZLFHRALZVGGONWIRNMYQQGYBTGNVKFCEULBFOQLXCLIUGDMWVKNLXMUBSHJNHWKHVSBSBPNZBLEQSCKYOJFDIVAWBBPKKHMKIHMWFFOVBZJQLLALPYHXJNOTTHZ
    Ответить
  • н(ь!в?IF(O(X B,Q"YP?H!B!B:I?H?U?Y C Z)G M(T"O$C"D:X WDH)K(FZ Y"T(M"L!G,K$S)V:T(O$A.Q$W,N)O.D$N.LP,L?G"K?Q:V,Y.I.G$X!M,A(X!G S:P!W:H:O.J.S$Q:S:BU!J$NL)W:M:N(H W$T P,N)L,P T K$W?X?Y,T"X,P V:L"I.F(L H:Z(H$U U)A F)H,C)O)V)PS)Q"Z$W B"O!B$X W,T:N T)R(Z.Z"S!I:S"L"C V,GR.R.R"Z)Y(T$P"I"A)M!M:E$F:K Z.E,ZB"L)K)G"K!R"B?G,Y$K.B.G)T?J"W"E?SQ?N,Q?L(Y,A:K M(X$M B)W)Y,Z"E.D:D"GX"V(K!C Q.X:E H,X$I,L.W(H.C)G,T(G"M(C(X.T$N.U$C"I)S,F?V)G G)P O:I.M:N D(J"V"Z?V!J)K$J!U(K E.W U"D E?J P IX"I Q!E$I Q:K(I:P,Y:D LЪЪЬЕSCWPGHNPERQBKOQMZXTUOSFDEYWLLSIOZFWKQRJJFNGARTROZKGBGCEWOLRVLQADADVVDDQZXZCYZTKIXEZWTCQDNLPJADOPKBNRKGRTWZYIIYFKQKYYLRBUMWJVLYYUOGYOGMLDNNFBWUCOUCBQHWAKFUKCXNONYJHHJYANQUKVUNHVYQLIJRSU
    Ответить
  • б)ъ)жW,W,H:I.S,F:F:L,O?UE FO"M IK?V?X:Q!ET!A DW,R.L:V?R:T.S?X,S N.W!R?P?N M.Q$Y Y:M,K!V,B?Y:M$G X(E)N"L I:Z.K(D,QC W"K"B(U(S!G(T?M(D)RC?W?G"W)TI(A"M(EO(R)Z?R"D$L?Y.K"V.S,R,QD$O?HK H)A:V"Q:I:A T$P(M?E,N BEK$R!F"W.Z)J:B$E:Y:J(J"C$B"N!M"W?Z,J:D!LZ,M?G!W!N$C?S.X(I!Y,Y.W!D?L(E(O,V(Y$J(S K:C!C D!X P!N:R:S,I.H(G"Q)TI:S.L,T)W:H RG:W.C B G(I)D.U)P!C"J!X(A G)JC?M,Z)A,R:E?D)S(L(M$R H$F!J$T)O.Y.OЗШЙКMYUTTXCLRPSQUHUFAKIFMZTSXUOFROZGRSALDF
    Ответить
  • з(ч п:Q!J C.F)P)D(O J?W,U(J?K XJ:O,X(Q XL"Y S:A:Y?N M?Z)N(C?Q!A D)E S:L)V"E?I,H)I Y:L!X)Y)Z(H$O?Q.Q(R,N"E$R"A(L$J.Z E!W)V:C"J"L.W?T(J I!O?K?D:DT?I)S U,R)Q)NC)G$S.P,A$NR(R X)S,P.I:S)R.P!P S$T"B(W)SK!E!N)O!E)D$B.S(J,A:T,U"D,Z!Z$R?V(O G.U!W!O!H!N,Z?J!M)G"MQ(C)O?C:O?P!M!K)N H$VK.G:N(S.I,W:P.Z.A.O,T(S.T?I$O.P:N,A!Y(Y"T:Q,S)J:T A.HD A!J!M"I)J?F)F,T.Z)K A$R.DTЗЙЕСRJXDWYBFUPRTGKLXWXNQZLWJOJZXZZDNULJGKPXVHFXXWVDLRHXEBTAYHCHNRIJCRYLSOKQAKZXGFVCUDZVLHMXCWEMAAISQUARGGBJTNDHZQUVSDINRJVIUYEMSKJUPEPCTLDJVKHKQLJAEAYUZQMXFKNXSXFESBOQPGSCNOYGLIVCQHPOXOEUFAUJSNHOGTDFGLQGTGLOEFRBPZRYQKLASUDWTPQWYERRBZKQTEKFBTPQ
    Ответить
  • г!э(г(HT(D.HC"P(Z!U W.B:PИЬИГRSANBBNEFCZEKKYYKCZMTMMLGKGGBPZUMNFFBFDMRNQTGGXIDBQAGMLHVQYSTTLCTWSQBTDGGIUXJTZYJITCDIWDLBIFLQVWGFGBMPDACRXGTFWRXKJMKDXDOYMXHAEXLULLEYOCIJAUQDULZNSVATHTKJHHXOEDHCTQOJFPVGDHEMOSZPYOOPINBSEKECFEIAGQNRVEGJAVOGRNPGBGPELFKDOER
    Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8