Viena no 1C:Enterprise tehnoloÄ£ijas jaukajÄm iezÄ«mÄm ir tÄ, ka lietojumprogrammu risinÄjumu, kas izstrÄdÄts, izmantojot pÄrvaldÄ«to formu tehnoloÄ£iju, var palaist gan plÄnÄ (izpildÄmÄ) klientÄ operÄtÄjsistÄmai Windows, Linux, MacOS X, gan kÄ tÄ«mekļa klientu 5 pÄrlÅ«kprogrammÄm - Chrome, Internet Explorer, Firefox, Safari, Edge un tas viss, nemainot lietojumprogrammas pirmkodu. TurklÄt ÄrÄji lietojumprogramma plÄnÄ klientÄ un pÄrlÅ«kprogrammÄ darbojas un izskatÄs gandrÄ«z identiski.
Atrodiet 10 atŔķirÄ«bas (2 attÄli zem griezuma):
PlÄns klienta logs operÄtÄjsistÄmÄ Linux:
Tas pats logs tÄ«mekļa klientÄ (pÄrlÅ«kÄ Chrome):
KÄpÄc mÄs izveidojÄm tÄ«mekļa klientu? Nedaudz nožÄlojami izsakoties, laiks mums ir izvirzÄ«jis Å”Ädu uzdevumu. Darbs internetÄ jau sen ir bijis priekÅ”noteikums biznesa lietojumprogrammÄm. PirmkÄrt, mÄs savam plÄnajam klientam pievienojÄm iespÄju strÄdÄt, izmantojot internetu (daži no mÅ«su konkurentiem, starp citu, apstÄjÄs pie tÄ; citi, gluži pretÄji, atteicÄs no plÄnÄ klienta un aprobežojÄs ar tÄ«mekļa klienta ievieÅ”anu). MÄs nolÄmÄm sniegt saviem lietotÄjiem iespÄju izvÄlÄties sev piemÄrotÄko klienta iespÄju.
TÄ«mekļa iespÄju pievienoÅ”ana plÄnajam klientam bija liels projekts, kurÄ tika pilnÄ«bÄ mainÄ«ta klienta-servera arhitektÅ«ra. TÄ«mekļa klienta izveide ir pilnÄ«gi jauns projekts, kas sÄkas no nulles.
ProblÄmas paziÅojums
TÄtad, projekta prasÄ«bas: tÄ«mekļa klientam ir jÄdara tas pats, kas plÄnajam klientam, proti:
Displeja lietotÄja interfeiss
Izpildiet klienta kodu, kas rakstÄ«ts 1C valodÄ
LietotÄja saskarne 1C ir aprakstÄ«ta vizuÄlÄ redaktorÄ, bet deklaratÄ«vi, bez elementu izkÄrtojuma pa pikseļiem; Tiek izmantoti aptuveni trÄ«s desmiti interfeisa elementu veidi - pogas, ievades lauki (teksts, skaitļi, datums/laiks), saraksti, tabulas, grafiki utt.
Klienta kods 1C valodÄ var saturÄt servera zvanus, darbu ar vietÄjiem resursiem (failiem utt.), DrukÄÅ”anu un daudz ko citu.
Gan plÄnais klients (strÄdÄjot, izmantojot tÄ«mekli), gan tÄ«mekļa klients izmanto vienu un to paÅ”u tÄ«mekļa pakalpojumu kopu, lai sazinÄtos ar 1C lietojumprogrammu serveri. Klientu implementÄcijas, protams, ir dažÄdas - plÄnais klients ir rakstÄ«ts C++, tÄ«mekļa klients ir rakstÄ«ts JavaScript.
Nedaudz vÄstures
TÄ«mekļa klienta projekts tika uzsÄkts 2006. gadÄ, komandÄ (vidÄji) 5 cilvÄki. AtseviŔķos projekta posmos tika piesaistÄ«ti izstrÄdÄtÄji, lai ieviestu konkrÄtu funkcionalitÄti (izklÄjlapu dokuments, diagrammas utt.); parasti tie bija tie paÅ”i izstrÄdÄtÄji, kuri veica Å”o funkcionalitÄti plÄnÄ klientÄ. Tie. izstrÄdÄtÄji pÄrrakstÄ«ja komponentus JavaScript, ko viÅi iepriekÅ” bija izveidojuÅ”i programmÄ C++.
No paÅ”a sÄkuma mÄs noraidÄ«jÄm ideju par jebkÄdu automÄtisku (pat daļÄju) C++ plÄnÄ klienta koda pÄrveidoÅ”anu par JavaScript tÄ«mekļa klientu, jo starp abÄm valodÄm pastÄv spÄcÄ«gÄs konceptuÄlÄs atŔķirÄ«bas; tÄ«mekļa klients tika uzrakstÄ«ts JavaScript no jauna.
PirmajÄs projekta iterÄcijÄs tÄ«mekļa klients klienta kodu iebÅ«vÄtajÄ 1C valodÄ pÄrveidoja tieÅ”i par JavaScript. PlÄnais klients darbojas atŔķirÄ«gi - kods iebÅ«vÄtajÄ 1C valodÄ tiek apkopots baitkodÄ, un pÄc tam Å”is baitkods tiek interpretÄts klientam. PÄc tam tÄ«mekļa klients sÄka darÄ«t to paÅ”u - pirmkÄrt, tas deva veiktspÄjas pieaugumu, un, otrkÄrt, tas ļÄva apvienot plÄno un tÄ«mekļa klientu arhitektÅ«ru.
PirmÄ platformas 1C:Enterprise versija ar tÄ«mekļa klientu atbalstu tika izlaista 2009. gadÄ. TÄ«mekļa klients tajÄ laikÄ atbalstÄ«ja 2 pÄrlÅ«kprogrammas - Internet Explorer un Firefox. SÄkotnÄjos plÄnos bija atbalsts Operai, taÄu tobrÄ«d nepÄrvaramo problÄmu dÄļ ar aplikÄciju slÄgÅ”anas apstrÄdÄtÄjiem OperÄ (nebija iespÄjams ar 100% pÄrliecÄ«bu izsekot, ka aplikÄcija beidzas, un tajÄ brÄ«dÄ« veikt atvienoÅ”anas procedÅ«ru no plkst. 1C lietojumprogrammu serveris) no Å”iem plÄniem bija jÄatsakÄs.
Projekta struktūra
KopumÄ platformÄ 1C: Enterprise ir 4 JavaScript valodÄ rakstÄ«ti projekti:
WebTools ā koplietojamÄs bibliotÄkas, ko izmanto citi projekti (mÄs iekļaujam arÄ« Google slÄgÅ”anas bibliotÄka).
VadÄ«bas elements FormattedDocument (ieviests JavaScript gan plÄnÄ klientÄ, gan tÄ«mekļa klientÄ)
VadÄ«bas elements PlÄnotÄjs (ieviests JavaScript gan plÄnÄ klientÄ, gan tÄ«mekļa klientÄ)
Web klients
Katra projekta struktÅ«ra atgÄdina Java projektu struktÅ«ru (vai .NET projektu - atkarÄ«bÄ no tÄ, kurÅ” ir tuvÄks); Mums ir nosaukumvietas, un katra nosaukumvieta atrodas atseviÅ”Ä·Ä mapÄ. MapÄ ir faili un nosaukumvietas klases. TÄ«mekļa klienta projektÄ ir aptuveni 1000 failu.
StrukturÄli tÄ«mekļa klients lielÄkoties ir sadalÄ«ts Å”ÄdÄs apakÅ”sistÄmÄs:
PÄrvaldÄ«to formu saskarne, kas cita starpÄ ietver aptuveni 30 vadÄ«klas (pogas, dažÄda veida ievades lauki - teksts, skaitļi, datums/laiks utt., tabulas, saraksti, grafiki utt.)
Klienta izstrÄdÄtÄjiem pieejams objekta modelis (kopÄ vairÄk nekÄ 400 veidu: pÄrvaldÄ«tÄ interfeisa objekta modelis, datu izkÄrtojuma iestatÄ«jumi, nosacÄ«juma stils utt.)
IebÅ«vÄtÄs 1C valodas tulks
PÄrlÅ«ka paplaÅ”inÄjumi (izmanto funkcionalitÄtei, kas netiek atbalstÄ«ta JavaScript)
Darbs ar kriptogrÄfiju
Darbs ar failiem
ÄrÄjo komponentu tehnoloÄ£ija, kas ļauj tos izmantot gan plÄnos, gan tÄ«mekļa klientiem
Attīstības iezīmes
Visu iepriekÅ” minÄto ieviest JavaScript programmÄ nav viegli. IespÄjams, 1C tÄ«mekļa klients ir viena no lielÄkajÄm klienta puses lietojumprogrammÄm, kas rakstÄ«tas JavaScript ā aptuveni 450.000 XNUMX rindiÅu. TÄ«mekļa klienta kodÄ mÄs aktÄ«vi izmantojam objektorientÄtu pieeju, kas vienkÄrÅ”o darbu ar tik lielu projektu.
Lai samazinÄtu klienta koda lielumu, mÄs vispirms izmantojÄm savu obfuskatoru un, sÄkot ar platformas versiju 8.3.6 (2014. gada oktobris), sÄkÄm izmantot Google slÄgÅ”anas kompilators. IzmantoÅ”anas efekts skaitļos ā tÄ«mekļa klienta ietvara lielums pÄc obfuskÄcijas:
Savs obfuskators ā 1556 kb
Google Closure Compiler ā 1073 kb
Google Closure Compiler izmantoÅ”ana palÄ«dzÄja mums uzlabot tÄ«mekļa klienta veiktspÄju par 30%, salÄ«dzinot ar mÅ«su paÅ”u obfuscator. TurklÄt aplikÄcijas patÄrÄtÄs atmiÅas apjoms ir samazinÄjies par 15-25% (atkarÄ«bÄ no pÄrlÅ«kprogrammas).
Google Closure Compiler ļoti labi darbojas ar objektorientÄtu kodu, tÄpÄc tÄ efektivitÄte tÄ«mekļa klientam ir pÄc iespÄjas augstÄka. Closure Compiler mÅ«su labÄ dara dažas labas lietas:
StatiskÄ tipa pÄrbaude projekta izveides stadijÄ (nodroÅ”ina, lai kods tiktu pÄrklÄts ar JSDoc anotÄcijÄm). RezultÄts ir statiska maŔīnrakstÄ«Å”ana, ļoti tuvu rakstÄ«Å”anai C++ valodÄ. Tas palÄ«dz konstatÄt diezgan lielu kļūdu procentuÄlo daļu projekta apkopoÅ”anas posmÄ.
Koda lieluma samazinÄÅ”ana, izmantojot neskaidrÄ«bas
iekļautas funkciju aizstÄÅ”anas. Funkcijas izsaukÅ”ana JavaScript ir diezgan dÄrga darbÄ«ba, un bieži izmantoto mazo metožu iekļautÄs aizstÄÅ”anas ievÄrojami paÄtrina kodu.
Konstantu skaitÄ«Å”ana kompilÄÅ”anas laikÄ. Ja izteiksme ir atkarÄ«ga no konstantes, tajÄ tiks aizstÄta konstantes faktiskÄ vÄrtÄ«ba
Koda analÄ«zei mÄs izmantojam soundQube, kur mÄs integrÄjam statisko kodu analizatorus. Izmantojot analizatorus, mÄs uzraugÄm JavaScript avota koda kvalitÄtes pasliktinÄÅ”anos un cenÅ”amies to novÄrst.
KÄdas problÄmas mÄs risinÄm/atrisinÄm?
ÄŖstenojot projektu, mÄs saskÄrÄmies ar vairÄkÄm interesantÄm problÄmÄm, kuras mums bija jÄatrisina.
Apmainieties ar datiem ar serveri un starp logiem
PastÄv situÄcijas, kad avota koda aptumÅ”oÅ”ana var traucÄt sistÄmas darbÄ«bu. Kodam, kas ir Ärpus tÄ«mekļa klienta izpildÄmÄ koda, apmulsinÄÅ”anas dÄļ var bÅ«t funkciju un parametru nosaukumi, kas atŔķiras no tiem, ko paredz mÅ«su izpildÄmais kods. ÄrÄjais kods mums ir:
Kods, kas nÄk no servera datu struktÅ«ru veidÄ
Kods citam lietojumprogrammas logam
Lai izvairÄ«tos no neskaidrÄ«bas, mijiedarbojoties ar serveri, mÄs izmantojam @expose tagu:
Un, lai izvairÄ«tos no neskaidrÄ«bas, mijiedarbojoties ar citiem logiem, mÄs izmantojam tÄ sauktÄs eksportÄtÄs saskarnes (saskarnes, kurÄs tiek eksportÄtas visas metodes).
MÄs izmantojÄm virtuÄlo DOM, pirms tas kļuva par galveno)
TÄpat kÄ visi izstrÄdÄtÄji, kas nodarbojas ar sarežģītÄm tÄ«mekļa saskarnÄm, mÄs Ätri sapratÄm, ka DOM ir slikti piemÄrots darbam ar dinamiskÄm lietotÄja saskarnÄm. GandrÄ«z nekavÄjoties tika ieviests Virtual DOM analogs, lai optimizÄtu darbu ar lietotÄja interfeisu. Notikumu apstrÄdes laikÄ visas DOM izmaiÅas tiek saglabÄtas atmiÅÄ un tikai tad, kad visas darbÄ«bas ir pabeigtas, uzkrÄtÄs izmaiÅas tiek lietotas DOM kokÄ.
TÄ«mekļa klienta optimizÄÅ”ana
Lai mÅ«su tÄ«mekļa klients strÄdÄtu ÄtrÄk, mÄs cenÅ”amies maksimÄli izmantot standarta pÄrlÅ«kprogrammas iespÄjas (CSS utt.). TÄdÄjÄdi veidlapas komandu panelis (atrodas gandrÄ«z visÄs lietojumprogrammas formÄs) tiek atveidots tikai, izmantojot pÄrlÅ«kprogrammas rÄ«kus, izmantojot dinamisku izkÄrtojumu, kura pamatÄ ir CSS.
TestÄÅ”ana
FunkcionÄlajai un veiktspÄjas pÄrbaudei mÄs izmantojam patentÄtu rÄ«ku (rakstÄ«tu Java un C++ valodÄ), kÄ arÄ« testu komplektu, kas ir izveidots SelÄns.
MÅ«su rÄ«ks ir universÄls - tas ļauj pÄrbaudÄ«t gandrÄ«z jebkuru logu programmu, tÄpÄc ir piemÄrots gan plÄna klienta, gan tÄ«mekļa klienta testÄÅ”anai. RÄ«ks skripta failÄ ieraksta tÄ lietotÄja darbÄ«bas, kurÅ” palaida 1C lietojumprogrammas risinÄjumu. TajÄ paÅ”Ä laikÄ tiek ierakstÄ«ti ekrÄna darba zonas attÄli - standarti. PÄrraugot jaunas tÄ«mekļa klienta versijas, skripti tiek atskaÅoti bez lietotÄja lÄ«dzdalÄ«bas. GadÄ«jumos, kad ekrÄnuzÅÄmums nevienÄ solÄ« nesakrÄ«t ar atsauces attÄlu, tests tiek uzskatÄ«ts par neizdevuÅ”os, un pÄc tam kvalitÄtes speciÄlists veic izmeklÄÅ”anu, lai noteiktu, vai tÄ ir kļūda vai plÄnotas izmaiÅas sistÄmas darbÄ«bÄ. PlÄnotas uzvedÄ«bas gadÄ«jumÄ standarti tiek automÄtiski aizstÄti ar jauniem.
Å is rÄ«ks arÄ« mÄra lietojumprogrammas veiktspÄju ar precizitÄti lÄ«dz 25 milisekundÄm. Dažos gadÄ«jumos mÄs veicam skripta daļu cilpu (piemÄram, vairÄkas reizes atkÄrtojot pasÅ«tÄ«juma ierakstu), lai analizÄtu izpildes laika pasliktinÄÅ”anos laika gaitÄ. Visu mÄrÄ«jumu rezultÄti tiek reÄ£istrÄti žurnÄlÄ analÄ«zei.
MÅ«su testÄÅ”anas rÄ«ks un lietojumprogramma tiek pÄrbaudÄ«ta
MÅ«su instruments un SelÄns papildina viens otru; piemÄram, ja kÄda no ekrÄniem ir mainÄ«jusi savu atraÅ”anÄs vietu, SelÄns var to neizsekot, taÄu mÅ«su rÄ«ks to pamanÄ«s, jo veic ekrÄnuzÅÄmuma salÄ«dzinÄjumu ar standarta pikseļiem pa pikseļiem. Å is rÄ«ks var arÄ« izsekot problÄmÄm, kas saistÄ«tas ar tastatÅ«ras vai peles ievades apstrÄdi, jo tas ir tieÅ”i tas, ko tas atveido.
Abi rÄ«ki (mÅ«su un SelÄna) pÄrbauda mÅ«su lietojumprogrammu risinÄjumu tipiskus darba scenÄrijus. Testi tiek automÄtiski palaisti pÄc 1C:Enterprise platformas ikdienas izveides. Ja skripti darbojas lÄnÄk (salÄ«dzinÄjumÄ ar iepriekÅ”Äjo bÅ«vÄjumu), mÄs izmeklÄjam un atrisinÄm palÄninÄjuma cÄloni. MÅ«su kritÄrijs ir vienkÄrÅ”s ā jaunajai konstrukcijai ir jÄdarbojas ne lÄnÄk kÄ iepriekÅ”Äjai.
IzstrÄdÄtÄji izmanto dažÄdus rÄ«kus, lai izmeklÄtu palÄninÄjuma gadÄ«jumus; galvenokÄrt izmanto Dynatrace AJAX izdevums ražoÅ”anas uzÅÄmums DynaTrace. Tiek reÄ£istrÄti problemÄtiskÄs darbÄ«bas izpildes žurnÄli iepriekÅ”ÄjÄ un jaunajÄ bÅ«vniecÄ«bÄ, pÄc tam žurnÄli tiek analizÄti. TajÄ paÅ”Ä laikÄ atseviŔķu darbÄ«bu izpildes laiks (milisekundÄs) var nebÅ«t noteicoÅ”ais faktors - pÄrlÅ«kprogrammÄ periodiski tiek palaisti tÄdi servisa procesi kÄ atkritumu savÄkÅ”ana, kas var pÄrklÄties ar funkciju izpildes laiku un izkropļot attÄlu. Å ajÄ gadÄ«jumÄ atbilstoÅ”Äki parametri bÅ«tu izpildÄ«to JavaScript instrukciju skaits, DOM atomu operÄciju skaits utt. Ja instrukciju/operÄciju skaits tajÄ paÅ”Ä skriptÄ ir palielinÄjies jaunÄ versijÄ, tas gandrÄ«z vienmÄr nozÄ«mÄ veiktspÄjas samazinÄÅ”anos, kas ir jÄlabo.
Viens no veiktspÄjas samazinÄÅ”anÄs iemesliem var bÅ«t arÄ« tas, ka Google Closure Compiler kÄda iemesla dÄļ nevarÄja veikt funkcijas iekļauto aizstÄÅ”anu (piemÄram, tÄpÄc, ka funkcija ir rekursÄ«va vai virtuÄla). Å ajÄ gadÄ«jumÄ mÄs cenÅ”amies situÄciju labot, pÄrrakstot avota kodu.
PÄrlÅ«ka paplaÅ”inÄjumi
Ja lietojumprogrammas risinÄjumam ir nepiecieÅ”ama funkcionalitÄte, kas nav pieejama JavaScript, mÄs izmantojam pÄrlÅ«kprogrammas paplaÅ”inÄjumus:
MÅ«su paplaÅ”inÄjumi sastÄv no divÄm daļÄm. PirmÄ daļa ir tÄ sauktais pÄrlÅ«kprogrammas paplaÅ”inÄjums (parasti pÄrlÅ«kprogrammas Chrome un Firefox paplaÅ”inÄjumi, kas rakstÄ«ti JavaScript), kas mijiedarbojas ar otro daļu - binÄro paplaÅ”inÄjumu, kas ievieÅ” mums nepiecieÅ”amo funkcionalitÄti. JÄpiemin, ka mÄs rakstÄm 3 binÄro paplaÅ”inÄjumu versijas ā priekÅ” Windows, Linux un MacOS. BinÄrais paplaÅ”inÄjums tiek piegÄdÄts kÄ platformas 1C:Enterprise daļa un atrodas 1C lietojumprogrammu serverÄ«. Pirmo reizi to izsaucot no tÄ«mekļa klienta, tas tiek lejupielÄdÄts klienta datorÄ un instalÄts pÄrlÅ«kprogrammÄ.
Darbojoties pÄrlÅ«kprogrammÄ Safari, mÅ«su paplaÅ”inÄjumi izmanto NPAPI; ja tie darbojas pÄrlÅ«kprogrammÄ Internet Explorer, tie izmanto ActiveX tehnoloÄ£iju. Microsoft Edge vÄl neatbalsta paplaÅ”inÄjumus, tÄpÄc tÄ«mekļa klients tajÄ darbojas ar ierobežojumiem.
TÄlÄka attÄ«stÄ«ba
Viens no tÄ«mekļa klientu izstrÄdes komandas uzdevumiem ir funkcionalitÄtes tÄlÄka attÄ«stÄ«ba. TÄ«mekļa klienta funkcionalitÄtei ir jÄbÅ«t identiskai plÄnÄ klienta funkcionalitÄtei, visa jaunÄ funkcionalitÄte tiek ieviesta vienlaikus gan plÄnÄ, gan tÄ«mekļa klientÄ.
Citi uzdevumi ietver arhitektÅ«ras izstrÄdi, pÄrveidoÅ”anu, veiktspÄjas un uzticamÄ«bas uzlaboÅ”anu. PiemÄram, viens no virzieniem ir tÄlÄka virzÄ«ba uz asinhronÄ darba modeli. Dažas tÄ«mekļa klienta funkcionalitÄtes paÅ”laik ir balstÄ«tas uz sinhrono mijiedarbÄ«bas ar serveri modeli. Asinhronais modelis tagad kļūst aktuÄlÄks pÄrlÅ«kprogrammÄs (un ne tikai pÄrlÅ«kprogrammÄs), un tas liek mums modificÄt tÄ«mekļa klientu, aizstÄjot sinhronos zvanus ar asinhroniem (un attiecÄ«gi pÄrveidojot kodu). PakÄpeniska pÄreja uz asinhrono modeli ir izskaidrojama ar nepiecieÅ”amÄ«bu atbalstÄ«t izlaistos risinÄjumus un to pakÄpenisku pielÄgoÅ”anu.