паляпшаў хуткасьць будаваньня адчотаў у адной з нашых праграмаў, сутыкнуўся з тым, што вельмі цяжка адшукаць дзе і калі ўжываецца пэўны клас, ну фігня нейкая, звычайны pojo • жменя гетэраў-сэтэраў, кожны торгаецца з процьмы месцаў • і запаўняецца кожны з такіх аб'ектаў цягам некалькіх метадаў, па-частах • кароча, і чорт і баба, і жук і жаба •
павыдаляў нахер усе сэтэры, пакінуў адзін канструктар дзе ўсё ініцыялізуецца, ўсе члены класа зрабіў final • знайшоў дзе чырвонае - не кампіліцца, перарэфактарыў • цяпер усё проста і чотка: усё ствараецца ў адным месцы • і можна прасачыць, чаму падчас будаваньня адчота з 4000 цэлямі пэўная функцыя завецца 4.5 мільёна разоў •
заптымізаваў час: было каля 1 хвіліны, зараз 10-13 сякундаў •
сёньня калегі аптымізавалі метады захоўваньня і вычытваньня, таксама скардзіліся, што шмат часу выдаткоўваецца на кланаваньне, "робім поўную копію DOM-а, бо пакінуць тую структуру - небясьпечна, невядома, дзе і калі і хто можа яе зьмяніць і ўсё паламаць" • казалі, што было б добра, каб наш DOM мог аддаваць пэўныя свае часткі як немадыфікуемыя калекцыі • я жартую: трэба пераходзіць на Scala (пра Clojure не згадваю, бо ня ведаюць, хаця і Скалу таксама ня чулі), дзе яўна дэкляруюцца зьменныя і нязьменныя аб'екты • яны мне: "а чым Жаба горш? тут таксама ёсьць UnmodifiableCollections" - я кажу, "пашукай, колькі раз у нашых 6227 жава-файлах ужываецца хоць адна з іх?" нуль цэлых, нуль дробных • і не таму, што ў жаве іх няма, не таму, што іх складана ўжываць, а проста таму, што
ня ўмеюць і ня хочуць •
а нядаўна калегі сутыкнуліся з праблемай: гібернэйт перад кожным insert-ам робіць дадатковы запыт, каб дастаць з oracle чарговы id з пасьлядоўнасьці (sequence) • аракловыя пасьлядоўнасьці гарантавана выдаюць унікальныя нумары, гібэрнэйт таксама па-за падазрэньнем • але неяк часам здараецца так, што ў базу лезуць запісы з аднолькавым id • недзе ў нашым кодзе адно й тое значэньне ўжываецца некалькі разоў • як знайсьці дзе і калі? я параіў: адшукайце на ўзроўні работы з БД усе зьменныя, якія не пазначаны як final, гэта будуць кандыдаты • калегі сьмяюцца • сьмейцеся, вам шукаць, а я пакуль займуся "Internet Explorer determines that a script is long-running by the total amount of statements the JScript engine has executed. By default, the value is 5 million statements" • трэба ўсё, што робіцца на кліенце, выконвалася часткамі ня больш чым 5 мільёнаў аперацый (а потым setTimeout і ў наступную частку) •