{"id":32465,"date":"2019-10-31T21:47:12","date_gmt":"2019-10-31T18:47:12","guid":{"rendered":"https:\/\/prohoster.info\/blog\/pro-veb-klient-1s\/"},"modified":"2026-05-20T19:17:21","modified_gmt":"2026-05-20T17:17:21","slug":"pro-veb-klient-1s__trashed","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","title":{"rendered":"Pro 1C veebiklient","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00dcks meeldivamaid omadusi 1C:Ettev\u00f5tte tehnoloogias on see, et rakenduslahendus, mis on v\u00e4lja t\u00f6\u00f6tatud hallatavate vormide tehnoloogias, saab t\u00f6\u00f6tada nii \u00f5hukeses (k\u00e4itatavas) t\u00f6\u00f6kliendis Windows, Linux, MacOS X-s kui ka veebikliteena viies brauseris \u2013 Chrome, Internet Explorer, Firefox, Safari, Edge, ja k\u00f5ik see \u2013 ilma rakenduse l\u00e4htekoodi muutmata. Rohkemgi veel \u2013 visuaalselt toimib ja n\u00e4eb rakendus \u00f5hukeses kliendis ja brauseris v\u00e4lja praktiliselt identse.<br \/>\nLeia 10 erinevust (allpool on 2 pilti):<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n\u00d5hukese kliendi aken Linuxis:<\/p>\n<p><img decoding=\"async\" alt=\"Pro 1C veebiklient\" src=\"\/wp-content\/uploads\/2019\/04\/6a836d01f80f447302e04d1827d5eebb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSama aken veebiklient (brauseris Chrome):<\/p>\n<p><img decoding=\"async\" alt=\"Pro 1C veebiklient\" src=\"\/wp-content\/uploads\/2019\/04\/1cab8bdf0d9d1c9d6601219c3ae6018c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMiks me veebiklienti tegime? \u00dctleme natuke pidulikumalt, selle \u00fclesande seadis meile aeg. Juba ammu on Internetis t\u00f6\u00f6tamine saanud \u00e4riorenduste jaoks vajalikuks tingimuseks. Alguses lisasime oma \u00f5hukesele kliendile Interneti kaudu t\u00f6\u00f6tamise v\u00f5imaluse (m\u00f5ned meie konkurendid, muide, j\u00e4idki sellele \u00fcpj\u00fcnetele; teised, vastupidi, loobusid \u00f5hukesest kliendist ja piirdusid veebiklientide teostamisega). Meie aga otsustasime anda oma kasutajatele v\u00f5imaluse valida, kumba kliendi varianti nad eelistavad.<\/p>\n<p><img decoding=\"async\" alt=\"Pro 1C veebiklient\" src=\"\/wp-content\/uploads\/2019\/04\/345d070d695cfc4854c485148d22d24c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00d5hukese kliendi jaoks interneti kasutamise v\u00f5imaluse lisamine oli suur projekt, mis n\u00f5udis t\u00e4ielikku kliendi ja serveri vahelise suhtluse arhitektuuri muutmist. Veebikliendi loomine on aga sootuks uus projekt, mis algab nullist.<\/p>\n<h3>\u00dclesande seadmine<\/h3>\n<p>\nSeega on projekti n\u00f5uded: veebiklient peab tegema seda, mida teeb \u00f5huke klient, nimelt:<\/p>\n<ol>\n<li>Kasutajaliidese kuvamine<\/li>\n<li>1C keeles kirjutatud kliendikoodi t\u00e4itmine<\/li>\n<\/ol>\n<p>\nKasutajaliides 1C-s kirjeldatakse visuaalses redigeerijas deklareerival moel, ilma elementide t\u00e4pse paigutuseta; kasutatakse umbes kolm tosinat erinevat liideselementi \u2014 nuppe, sisendv\u00e4lju (tekst, number, kuup\u00e4ev\/aeg), nimekirju, tabeleid, graafikuid jne. <\/p>\n<p>1C keeles kirjutatud kliendikood v\u00f5ib sisaldada serverikutsungeid, t\u00f6\u00f6tada kohalike ressurssidega (failid jne), printida ja palju muud.<\/p>\n<p>N tanto \u00f5huke klient (veebi kaudu t\u00f6\u00f6tades) kui ka veebiklient kasutavad sama veebiteenuste komplekti, et suhelda 1C rakendusserveriga. Klientide rakendused on muidugi erinevad \u2013 \u00f5huke klient on kirjutatud C++ keeles, veebiklient aga JavaScriptis.<\/p>\n<h3>Veidi ajalugu<\/h3>\n<p>\nVeebiklientide arendamise projekt algas 2006. aastal, kus osales keskmiselt 5 inimest. Projekti erinevates etappides t\u00f5mmati appi arendajad spetsiifilise funktsionaalsuse (nt tabelid, diagrammid jne) teostamiseks; reeglina olid need samad arendajad, kes selle funktsionaalsuse eelnevalt \u00f5hukeses kliendis l\u00f5id. See t\u00e4hendab, et arendajad kirjutasid JavaScriptis uuesti komponendid, mille nad olid varem loonud C++ keeles.<\/p>\n<p>Algusest peale l\u00fckkasime tagasi m\u00f5tte automaatse (\u00fcksk\u00f5ik kui osalise) C++ koodi konvertimise kohta \u00f5hukesest kliendist JavaScripti veebiklientiks, arvestades nende kahe keele tugevaid kontseptuaalseid erinevusi; veebiklient kirjutati JavaScriptis puhtalt lehelt.<\/p>\n<p>Projekti esimestel iteratsioonidel konverteeris veebiklient kliendikoodi 1C sisseehitatud keeles otse JavaScripti. \u00d5huke klient toimib teisiti \u2013 1C sisseehitatud keeles kirjutatud kood kompileeritakse byte-koodiks, mis seej\u00e4rel t\u00f5lgitakse kliendis. Hiljem hakkas veebiklient sama tegema \u2013 esiteks, see t\u00f5i kaasa j\u00f5udluse kasvu, teiseks v\u00f5imaldas see unifitseerida \u00f5hukese ja veebikliendi arhitektuuri.<\/p>\n<p>1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 esimesed veebiklientide toetusega versioon ilmus 2009. aastal. Selle aja veebiklient toetas kahte brauserit \u2013 Internet Explorer ja Firefox. Algsetes plaanides oli kavandatud Opera tugi, kuid tookordsete probleemide t\u00f5ttu rakenduse sulgemise k\u00e4sitlemises Operas (ei olnud v\u00f5imalik 100%-liselt j\u00e4lgida, et rakendus sulguks, ja sellel hetkel serverist 1C rakenduse v\u00e4ljal\u00fclitamise protseduuri l\u00e4bi viia) tuli neist plaanidest loobuda.<\/p>\n<h3>Projekti struktuur<\/h3>\n<p>\n1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 platvormil on kokku 4 projekti, mis on kirjutatud JavaScriptis:<\/p>\n<ol>\n<li>WebTools \u2013 \u00fcldised raamatukogud, mida kasutavad teised projektid (siia kuuluvad ka <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Google_Closure_Tools#Closure_Library\">Google Closure Library<\/a><\/noindex>).<\/li>\n<li>Kasutuselemendi <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000785.htm\">FormateeritudDokument<\/a><\/noindex> (rakendatud JavaScriptis nii \u00f5hukliendis kui ka veebikliendis)<\/li>\n<li>Kasutuselemendi <noindex><a rel=\"nofollow\" href=\"https:\/\/wonderland.v8.1c.ru\/blog\/planirovshchik\/\">Ajakava<\/a><\/noindex> (rakendatud JavaScriptis nii \u00f5hukliendis kui ka veebikliendis)<\/li>\n<li>Veebiklient<\/li>\n<\/ol>\n<p>\nIga projekti struktuur sarnaneb Java projektide (v\u00f5i .NET projektidega \u2013 kellele mis sobib) struktuurile; meil on nimed, ja iga nimi asub eraldi kaustas. Kaustas asuvad nimede failid ja klassid. Veebiklientide projektis on ligikaudu 1000 faili.<\/p>\n<p>Struktuuriliselt jaguneb veebiklient peamiselt j\u00e4rgmistesse alams\u00fcsteemidesse:<\/p>\n<ul>\n<li>Hallatav kliendirakenduse liides\n<ul>\n<li>Rakenduse \u00fcldliides (s\u00fcsteemimen\u00fc\u00fcd, paneelid)<\/li>\n<li>Hallatav vormide liides, mis sisaldab kokku umbes 30 juhtn\u00f6\u00f6ri (nupud, erinevad sisestusv\u00e4ljade t\u00fc\u00fcbid \u2013 tekstilised, numbrilised, kuup\u00e4eva\/aega jne, tabelid, loetelud, graafikud jne.)<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Objektimudel, mis on ligip\u00e4\u00e4setav arendajatele kliendis (kokku \u00fcle 400 t\u00fc\u00fcbi: hallatava liidese objektimudel, andmete paigutuse seadistused, tingimuslik vormindamine jne.)<\/li>\n<li>Sisseehitatud keele 1C t\u00f5lgendaja<\/li>\n<li>Brauserilaiendused (kasutatakse funktsionaalsuseks, mida JavaScript ei toeta)\n<ul>\n<li>Kr\u00fcptograafiaga t\u00f6\u00f6tamine<\/li>\n<li>Failidega t\u00f6\u00f6tamine<\/li>\n<li>V\u00e4liste komponentide tehnoloogia, mis v\u00f5imaldab neid kasutada nii \u00f5hukeses kui ka veebikliendis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<h3>Arenduse erip\u00e4rad<\/h3>\n<p>\nK\u00f5ik \u00fclaltoodud rakendamine JavaScriptis on keeruline. V\u00f5ib-olla on 1C veebi klient \u00fcks suurimaid klient-poolseid rakendusi, mis on kirjutatud JavaScriptis \u2013 umbes 450 000 rida. Me kasutame veebikliendi koodis aktiivselt objekt-orientatsiooni l\u00e4henemist, mis h\u00f5lbustab nii suure projekti k\u00e4sitlemist.<\/p>\n<p>Kliendi koodi suuruse minimiseerimiseks kasutasime alguses oma obfuskaatorit, kuid alates platvormi versioonist 8.3.6 (oktober 2014) oleme hakanud kasutama <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Google_Closure_Tools#Closure_Compiler\">Google Closure Compiler<\/a><\/noindex>. Obfuskatsiooni m\u00f5ju numbrites \u2013 veebiklientide raamistik p\u00e4rast obfuskatsiooni:<\/p>\n<ul>\n<li>Oma obfuskaator \u2013 1556 kB<\/li>\n<li>Google Closure Compiler \u2013 1073 kB<\/li>\n<\/ul>\n<p>\nGoogle Closure Compiler'i kasutamine aitas meil veebiklientide j\u00f5udlust parandada 30% v\u00f5rreldes meie enda obfuskaatoriga. Samuti v\u00e4henes 15-25% (s\u00f5ltuvalt brauserist) rakenduse m\u00e4lutarve.<\/p>\n<p>Google Closure Compiler t\u00f6\u00f6tab v\u00e4ga h\u00e4sti objektorienteeritud koodiga, seega on selle efektiivsus veebikliendi jaoks maksimaalne. Closure Compiler teeb meie jaoks paar head asja:<\/p>\n<ul>\n<li>Projektide kogumise etapis staatiline t\u00fc\u00fcpide kontroll (tagatud koodi JSDoc'i annotatsioonidega katmise kaudu). L\u00f5pptulemus on staatiline t\u00fcpiseerimine, mis on v\u00e4ga sarnane C++ t\u00fcpiseerimise tasemega. See aitab kinni p\u00fc\u00fcda piisavalt suure osa vigu projekti kompileerimise etapil.<\/li>\n<li>Koodi suuruse v\u00e4hendamine obfuskatsiooni kaudu<\/li>\n<li>Koodide optimeerimise reaalsed n\u00e4ited, n\u00e4iteks:\n<ul>\n<li>funktsioonide inline-asendamine. Funktsiooni kutsumine JavaScriptis on \u00fcsna kulukas tegevus, ja v\u00e4ikeste sageli kasutatavate meetodite inline-asendamine kiirendab koodi t\u00f6\u00f6tlemist oluliselt.<\/li>\n<li>Konstantide arvestamine kompileerimise etapis. Kui avaldis s\u00f5ltub konstandist, asendatakse selles kohaliku konstandi tegeliku v\u00e4\u00e4rtusega.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nVeebiklientide arenduskeskkonnana kasutame WebStormi.<\/p>\n<p>Koodi anal\u00fc\u00fcsimiseks kasutame <noindex><a rel=\"nofollow\" href=\"http:\/\/www.sonarqube.org\/\">SonarQube<\/a><\/noindex>, kuhu integreerime staatilisi koodi anal\u00fcsaatoreid. Anal\u00fcsaatorite abil j\u00e4lgime JavaScripti l\u00e4htekoodi kvaliteedi halvenemist ja p\u00fc\u00fcame seda v\u00e4ltida.<\/p>\n<p><img decoding=\"async\" alt=\"Pro 1C veebiklient\" src=\"\/wp-content\/uploads\/2019\/04\/886fe89a8c12d29d940b6b59316ea627.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Milliseid \u00fclesandeid oleme lahendanud\/lahendame<\/h3>\n<p>\nProjekti teostamise k\u00e4igus sattusime mitmete huvitavate probleemide ette, mis tuli lahendada.<\/p>\n<h4>Andmevahetus serveri ja akende vahel<\/h4>\n<p>\nOn olukordi, kus l\u00e4htekoodi obfuskeering v\u00f5ib takistada s\u00fcsteemi t\u00f6\u00f6d. Obfuskeeritud kood, mis on eraldi meie veebiklientide v\u00e4lisest koodist, v\u00f5ib omada funktsioonide ja parameetrite nimesid, mis erinevad sellest, mida meie k\u00e4ivitatav kood ootab. Meie jaoks on v\u00e4line kood:<\/p>\n<ul>\n<li>Serverist tulev kood struktureeritud andmete vormis<\/li>\n<li>Teise rakenduse akna kood<\/li>\n<\/ul>\n<p>\nServeriga suhtlemisel obfuskatsiooni v\u00e4ltimiseks kasutame m\u00e4rgendit @expose:<\/p>\n<pre><code class=\"javascript\">\/**\n * @constructor\n * @extends {Base.SrvObject}\n *\/\nSrv.Core.GenericException = function ()\n{\n    \/**\n     * @type {string}\n     * @expose\n     *\/\n    this.descr;\n\n    \/**\n     * @type {Srv.Core.GenericException}\n     * @expose\n     *\/\n    this.inner;\n\n    \/**\n     * @type {string}\n     * @expose\n     *\/\n    this.clsid;\n\n    \/**\n     * @type {boolean}\n     * @expose\n     *\/\n    this.encoded;\n}<\/code><\/pre>\n<p>\nJa et v\u00e4ltida obfuskatsiooni teiste akendega suhtlemisel, kasutame nn eksporditavaid liideseid (liideseid, millel on k\u00f5ik meetodid eksporditavad).<\/p>\n<pre><code class=\"javascript\">\/**\n * \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 DropDownWindow\n *\n * @interface\n * @struct\n *\/\nWebUI.IDropDownWindowExp = function(){}\n\n\/**\n * \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 1 \u0432\u043f\u0435\u0440\u0435\u0434 \u0438\u043b\u0438 \u043d\u0430\u0437\u0430\u0434\n *\n * @param {boolean} isForward\n * @param {boolean} checkOnly\n * @return {boolean}\n * @expose\n *\/\nWebUI.IDropDownWindowExp.prototype.moveMarker = function (isForward, checkOnly){}\n\n\/**\n * \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0446\n *\n * @param {boolean} isFirst\n * @param {boolean} checkOnly\n * @return {boolean}\n * @expose\n *\/\nWebUI.IDropDownWindowExp.prototype.moveMarkerTo = function (isFirst, checkOnly){}\n\n\/**\n * @return {boolean}\n * @expose\n *\/\nWebUI.IDropDownWindowExp.prototype.selectValue = function (){}<\/code><\/pre>\n<h4>KASUTASIME Virtuaalset DOM-i enne, kui see sai peavooluks)<\/h4>\n<p>\nNagu k\u00f5ik arendajad, kes tegelevad keerulise veebiliidesega, m\u00f5istsime kiiresti, et DOM ei sobi d\u00fcnaamilise kasutajaliidese jaoks. Peaaegu kohe loodi Virtuaalse DOM-i analoog, et optimeerida t\u00f6\u00f6tlust UI-ga. \u00dcrituste t\u00f6\u00f6tlemise k\u00e4igus salvestatakse k\u00f5ik DOMi muudatused m\u00e4llu ning alles p\u00e4rast k\u00f5igi operatsioonide l\u00f5petamist rakendatakse kogutud muudatused DOM-puud.<\/p>\n<h4>Veebi-kliendi t\u00f6\u00f6 optimeerimine<\/h4>\n<p>\nKuna me soovime, et meie veebiklient t\u00f6\u00f6taks kiiremini, p\u00fc\u00fcame maksimaalselt kasutada brauseri vaikimisi funktsioone (CSS jne). Seega joonistatakse vormi k\u00e4sukonsool (mis asub p\u00f5him\u00f5tteliselt igas rakenduse vormis) ainult brauseri vahendite ja CSS-i p\u00f5hjal enamasti d\u00fcnaamilise paigutuse kaudu.<\/p>\n<p><img decoding=\"async\" alt=\"Pro 1C veebiklient\" src=\"\/wp-content\/uploads\/2019\/04\/116261ca79218eaa2bee9a4f5104092b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Testimine<\/h4>\n<p>\nFunktsionaalse testimise ja j\u00f5udlustestimise jaoks kasutame meie enda arendatud t\u00f6\u00f6riista (kirjutatud Java ja C++ keeles), samuti testide kogumit, mis p\u00f5hineb <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Selenium\">Selenium<\/a><\/noindex>.<\/p>\n<p>Meie t\u00f6\u00f6riist on universaalne \u2013 see v\u00f5imaldab testida praktiliselt k\u00f5iki aknaprogramme, mist\u00f5ttu sobib see nii \u00f5hukese kliendi kui ka veebikliendi testimiseks. T\u00f6\u00f6riist salvestab kasutaja toimingud, kes k\u00e4ivitas rakenduse \"1C\", skriptifaili. Samal ajal tehakse ekraani t\u00f6\u00f6aluse ala piltide \u2013 etalonide \u2013 salvestamine. Uute veebikliendi versioonide kontrollimisel m\u00e4ngitakse skripte ilma kasutaja sekkumiseta. Kui m\u00f5nel testietapis skriinipilt ei vasta etalonile, loetakse test eba\u00f5nnestunuks, mille j\u00e4rel kvaliteedi spetsialist viib l\u00e4bi uurimise \u2013 kas see on viga v\u00f5i etteplaneeritud s\u00fcsteemi k\u00e4itumise muutus. Etteplaneeritud k\u00e4itumise korral asendatakse etalonid automaatselt uutega.<\/p>\n<p>T\u00f6\u00f6riist m\u00f5\u00f5dab rakenduste j\u00f5udlust kuni 25 millisekundi t\u00e4psusega. M\u00f5nel juhul kordame stsenaariumi osi (n\u00e4iteks tellimuse sisestamist mitu korda) t\u00e4itmise ajade halvenemise anal\u00fc\u00fcsimiseks. K\u00f5ik m\u00f5\u00f5tmiste tulemused registreeritakse anal\u00fc\u00fcsiks logis.<\/p>\n<p><img decoding=\"async\" alt=\"Pro 1C veebiklient\" src=\"\/wp-content\/uploads\/2019\/04\/058bab976becf6fd38b2ec668492043b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Meie testimisvahend ja testitav rakendus<\/b><\/p>\n<p>Meie t\u00f6\u00f6riist ja Selenium t\u00e4iendavad \u00fcksteist; n\u00e4iteks, kui m\u00f5ni nupp \u00fche ekraani peal on oma asukohta muutnud \u2014 Selenium ei pruugi seda j\u00e4lgida, kuid meie t\u00f6\u00f6riist m\u00e4rgib selle kinni, kuna teeb t\u00e4pse piksliga v\u00f5rdluse ekraanipildist alusversiooniga. T\u00f6\u00f6riist suudab j\u00e4lgida ka klaviatuuri v\u00f5i hiire sisendiga seotud probleeme, kuna just neid ta ka kordab.<\/p>\n<p>Testid m\u00f5lemal t\u00f6\u00f6riistal (meie ja Selenium) k\u00e4ivitavad t\u00fc\u00fcpilised stsenaariumid meie rakenduslahendustest. Testid k\u00e4ivitatakse automaatselt p\u00e4rast igap\u00e4evast \u201e1C:Enterprise\u201d platvormi versiooni. Kui stsenaariumide t\u00f6\u00f6 aeglustub (v\u00f5rreldes eelmise versiooniga), uurime juhtumit ja k\u00f5rvaldame aeglustumise p\u00f5hjuse. Meie kriteerium on lihtne \u2013 uus versioon peab t\u00f6\u00f6tama mitte aeglasemalt kui eelmine.<\/p>\n<p>Aegluse juhtumite uurimiseks kasutavad arendajad erinevaid t\u00f6\u00f6riistu; peamiselt kasutatakse <noindex><a rel=\"nofollow\" href=\"http:\/\/apmblog.dynatrace.com\/2014\/12\/11\/dynatrace-ajax-edition-4-5-last-page-chapter-yet-story-continues\/\">Dynatrace AJAX Edition<\/a><\/noindex> ettev\u00f5tte <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Dynatrace\">DynaTrace<\/a><\/noindex>. Probleemse operatsiooni logide salvestamine toimub nii eelnevas kui ka uues versioonis, seej\u00e4rel anal\u00fc\u00fcsitakse logisid. \u00dcksikute operatsioonide t\u00e4itmise aeg (millisekundites) ei pruugi olla m\u00e4\u00e4rav tegur \u2013 brauseris k\u00e4ivitatakse aeg-ajalt teenusprotsesse, nagu m\u00e4luhaldus, mis v\u00f5ivad kattuda funktsioonide t\u00e4itmise ajaga ja moonutada pilti. Sel juhul on asjakohasemad parameetrid JavaScripti k\u00e4suridade arv, DOMi aatomsete toimingute arv jne. Kui uue versiooni puhul on sama stsenaariumi k\u00e4skude\/toimingute arv suurenenud, t\u00e4hendab see peaaegu alati j\u00f5udluse langust, mida on vaja parandada.<\/p>\n<p>Samuti v\u00f5ib j\u00f5udluse languse p\u00f5hjuseks olla see, et Google Closure Compiler ei suutnud mingil p\u00f5hjusel funktsiooni inline-asendust teostada (n\u00e4iteks kui funktsioon on rekursiivne v\u00f5i virtuaalne). Sel juhul p\u00fc\u00fcame olukorda parandada, kirjutades l\u00e4htekoodi \u00fcmber.<\/p>\n<h3>Brauseri laiendused<\/h3>\n<p>\nKui rakendusele on vajalik funktsionaalsus, mida JavaScriptis pole, kasutame brauseri laiendusi:<\/p>\n<ul>\n<li>failidega t\u00f6\u00f6tamiseks<\/li>\n<li>kr\u00fcptograafiaga t\u00f6\u00f6tamiseks<\/li>\n<li>t\u00f6\u00f6tamine <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000545.htm\">v\u00e4limiste komponentidega<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nMeie laiendused koosnevad kahest osast. Esimene osa on see, mida nimetatakse brauseri laienduseks (tavaliselt JavaScripti laiendused Chrome'i ja Firefoxi jaoks), mis suhtleb teise osaga \u2014 binaarse laiendusega, mis implementeerib vajaliku funktsionaalsuse. Tuleb mainida, et me kirjutame 3 versiooni binaarsetest laiendustest \u2013 Windowsi, Linuxi ja MacOS-i jaoks. Binaarne laiendus tarnitakse 1C:Enterprise platvormiga ja asub 1C rakenduste serveris. Esimese veebiklientide kutse korral laaditakse see klienditeenuse arvutisse ja installitakse brauserisse.<\/p>\n<p>Safari kasutamisel kasutavad meie laiendused NPAPI-d, Internet Exploreri kasutades ActiveX-tehnoloogiat. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Microsoft_Edge\">Microsoft Edge<\/a><\/noindex> ei toeta veel laiendusi, seega t\u00f6\u00f6tab veebiklient seal piirangutega.<\/p>\n<h3>edasiarendamine<\/h3>\n<p>\n\u00dcks veebikliendi arendusmeeskonna \u00fclesannetest on funktsionaalsuse edasine arendamine. Veebikliendi funktsionaalsus peab olema identne \u00f5hukese kliendi funktsionaalsusega, kogu uus funktsionaalsus rakendatakse samal ajal nii \u00f5hukeses kui ka veebikliendis.<\/p>\n<p>Teised \u00fclesanded h\u00f5lmavad arhitektuuri arendamist, refaktooringut, j\u00f5udluse ja usaldusv\u00e4\u00e4rsuse parandamist. N\u00e4iteks \u00fcks suund on liikuda edasi as\u00fcnkroonse t\u00f6\u00f6mudeli suunas. Praegu on osa veebikliendi funktsionaalsusest rajatud s\u00fcnkroonsele serveriga suhtlemise mudelile. As\u00fcnkroonne mudel muutub n\u00fc\u00fcd brauserites (ja mitte ainult brauserites) \u00fcha aktuaalsemaks, mis sunnib meid veebikliendi modifitseerimisele, asendades s\u00fcnkroonsed k\u00f5ned as\u00fcnkroonsetega (ja vastava koodi refaktooringuga). \u00dcleminek as\u00fcnkroonsele mudelile toimub j\u00e4rk-j\u00e4rgult vajaduse t\u00f5ttu toetada v\u00e4lja antud lahendusi ja nende j\u00e4rk-j\u00e4rgulist kohandamist.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/1c\/blog\/315414\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u043f\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0444\u043e\u0440\u043c, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432 \u0442\u043e\u043d\u043a\u043e\u043c (\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c) \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u043e\u0434 Windows, Linux, MacOS X, \u0442\u0430\u043a \u0438 \u043a\u0430\u043a \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434 5 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u2013 Chrome, Internet Explorer, Firefox, Safari, Edge, \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u2013 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e \u2013 \u0432\u043d\u0435\u0448\u043d\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24269,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32465","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u043f\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0444\u043e\u0440\u043c, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432 \u0442\u043e\u043d\u043a\u043e\u043c (\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c) \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u043e\u0434 Windows, Linux, MacOS X, \u0442\u0430\u043a \u0438 \u043a\u0430\u043a \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434 5 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u2013 Chrome, Internet Explorer, Firefox, Safari, Edge, \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u2013 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e \u2013 \u0432\u043d\u0435\u0448\u043d\u0435\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pro-veb-klient-1s__trashed\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0440\u043e \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 1\u0421 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u043f\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0444\u043e\u0440\u043c, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432 \u0442\u043e\u043d\u043a\u043e\u043c (\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c) \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u043e\u0434 Windows, Linux, MacOS X, \u0442\u0430\u043a \u0438 \u043a\u0430\u043a \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434 5 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u2013 Chrome, Internet Explorer, Firefox, Safari, Edge, \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u2013 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e \u2013 \u0432\u043d\u0435\u0448\u043d\u0435\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pro-veb-klient-1s__trashed\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:47:12+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-05-20T17:17:21+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 1C veebiklient | ProHoster","description":"\u00dcks meeldiv omadus tehnoloogia 1C:Ettev\u00f5te juures on see, et rakenduslahendus, mis on loodud hallatavate vormide tehnoloogia abil, saab t\u00f6\u00f6tada nii \u00f5hukeses (t\u00e4itmisel) kliendis Windowsis, Linuxis, MacOS X-is kui ka veebikliendina viies brauseris \u2013 Chrome, Internet Explorer, Firefox, Safari, Edge, ja k\u00f5ik see \u2013 ilma rakenduse l\u00e4htekoodi muutmiseta. Veelgi enam \u2013 v\u00e4liselt","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0440\u043e \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 1\u0421 | ProHoster","og:description":"\u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 1\u0421:\u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u043f\u043e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0444\u043e\u0440\u043c, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432 \u0442\u043e\u043d\u043a\u043e\u043c (\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c) \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u043e\u0434 Windows, Linux, MacOS X, \u0442\u0430\u043a \u0438 \u043a\u0430\u043a \u0432\u0435\u0431-\u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434 5 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u2013 Chrome, Internet Explorer, Firefox, Safari, Edge, \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u2013 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e \u2013 \u0432\u043d\u0435\u0448\u043d\u0435","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:47:12+00:00","article:modified_time":"2026-05-20T17:17:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32465","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 11:00:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:58:23","updated":"2026-01-21 11:00:20"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32465","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=32465"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32465\/revisions"}],"predecessor-version":[{"id":173305,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32465\/revisions\/173305"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/24269"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=32465"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=32465"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=32465"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}