{"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\/sq\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","title":{"rendered":"P\u00ebr klientin web 1C","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Nj\u00eb nga karakteristikat e k\u00ebndshme t\u00eb teknologjis\u00eb 1C:Nd\u00ebrmarrje \u00ebsht\u00eb se zgjidhja aplikative e zhvilluar me teknologjin\u00eb e formave t\u00eb menaxhuara mund t\u00eb ekzekutohet si n\u00eb klientin e holl\u00eb (t\u00eb ekzekutuesh\u00ebm) n\u00ebn Windows, Linux, MacOS X, ashtu si dhe si klient web n\u00ebn 5 shfletues \u2013 Chrome, Internet Explorer, Firefox, Safari, Edge, dhe gjith\u00e7ka \u2013 pa ndryshuar kodin burimor t\u00eb aplikacionit. P\u00ebr m\u00eb tep\u00ebr \u2013 aplikacioni n\u00eb klientin e holl\u00eb dhe n\u00eb shfletues funksionon dhe duket praktikisht identik.<br \/>\nGjeni 10 dallime (n\u00eb fund 2 imazhe):<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nDritarja e klientit t\u00eb holl\u00eb n\u00eb Linux:<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ebr klientin web 1C\" src=\"\/wp-content\/uploads\/2019\/04\/6a836d01f80f447302e04d1827d5eebb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo e nj\u00ebjta dritare n\u00eb klientin web (n\u00eb shfletuesin Chrome):<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ebr klientin web 1C\" src=\"\/wp-content\/uploads\/2019\/04\/1cab8bdf0d9d1c9d6601219c3ae6018c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPse e b\u00ebm\u00eb klientin web? T\u00eb themi disi me stil, nj\u00eb detyr\u00eb e till\u00eb na e dha koha. Q\u00eb prej koh\u00ebsh puna p\u00ebrmes Internetit \u00ebsht\u00eb b\u00ebr\u00eb nj\u00eb kusht i nevojsh\u00ebm p\u00ebr aplikacionet e biznesit. N\u00eb fillim shtuam mund\u00ebsin\u00eb e pun\u00ebs p\u00ebrmes Internetit p\u00ebr klientin ton\u00eb t\u00eb holl\u00eb (disa nga konkurrent\u00ebt tan\u00eb, p\u00ebr t'iu p\u00ebrmendur, e ndal\u00ebn aty; t\u00eb tjer\u00eb, p\u00ebrkundrazi, e braktis\u00ebn klientin e holl\u00eb dhe u kufizuan n\u00eb realizimin e klientit web). Ne vendos\u00ebm t'u ofrojm\u00eb p\u00ebrdoruesve tan\u00eb mund\u00ebsin\u00eb t\u00eb zgjedhin at\u00eb variant klienti q\u00eb u p\u00ebrshtatet m\u00eb mir\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ebr klientin web 1C\" src=\"\/wp-content\/uploads\/2019\/04\/345d070d695cfc4854c485148d22d24c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nShtimi i mund\u00ebsis\u00eb p\u00ebr t\u00eb punuar p\u00ebrmes Internetit p\u00ebr klientin e holl\u00eb ishte nj\u00eb projekt i madh me nj\u00eb ndryshim t\u00eb plot\u00eb t\u00eb arkitektur\u00ebs s\u00eb nd\u00ebrveprimit klient-server. Krijimi i klientit web ishte nj\u00eb projekt krejt\u00ebsisht i ri, q\u00eb filloi nga zero.<\/p>\n<h3>Formulimi i detyr\u00ebs<\/h3>\n<p>\nPra, k\u00ebrkesat p\u00ebr projektin: klienti web duhet t\u00eb b\u00ebj\u00eb t\u00eb nj\u00ebjt\u00ebn gj\u00eb si klienti i holl\u00eb, pra:<\/p>\n<ol>\n<li>T\u00eb shfaq\u00eb nd\u00ebrfaqen e p\u00ebrdoruesit<\/li>\n<li>T\u00eb ekzekutoj\u00eb kodin e klientit, i shkruar n\u00eb gjuh\u00ebn 1C<\/li>\n<\/ol>\n<p>\nNj\u00eb nd\u00ebrfaqe p\u00ebrdoruesi n\u00eb 1C p\u00ebrshkruhet n\u00eb redaktorin vizual, por n\u00eb m\u00ebnyr\u00eb deklarative, pa vendosjen pik\u00eb-pik\u00eb t\u00eb elementeve; p\u00ebrdoren rreth tridhjet\u00eb lloje elementesh t\u00eb nd\u00ebrfaqes \u2013 butona, fushat e hyrjes (tekstuale, numerike, dat\u00eb \/ koh\u00eb), lista, tabela, grafik\u00eb etj. <\/p>\n<p>Kodi i klientit n\u00eb gjuh\u00ebn 1C mund t\u00eb p\u00ebrmbaj\u00eb thirrje nga serveri, pun\u00eb me burime lokale (skedar\u00eb etj.), printim dhe shum\u00eb t\u00eb tjera.<\/p>\n<p>Si klienti i holl\u00eb (n\u00eb pun\u00ebn p\u00ebrmes webit), ashtu edhe klienti web p\u00ebrdorin t\u00eb nj\u00ebjtin grup sh\u00ebrbimesh web p\u00ebr komunikim me serverin e aplikacioneve 1C. Implementimi te klient\u00ebt natyrisht \u00ebsht\u00eb i ndrysh\u00ebm \u2013 klienti i holl\u00eb \u00ebsht\u00eb shkruar n\u00eb C++, klienti web \u2013 n\u00eb JavaScript.<\/p>\n<h3>Pak histori<\/h3>\n<p>\nProjektin e krijimit t\u00eb klientit web filloi n\u00eb vitin 2006, me nj\u00eb ekip t\u00eb p\u00ebrb\u00ebr\u00eb mesatarisht nga 5 persona. N\u00eb faza t\u00eb ve\u00e7anta t\u00eb projektit u angazhuan zhvillues p\u00ebr t\u00eb realizuar funksionalitete specifike (dokumente tabelar\u00eb, diagram\u00eb, etj.); zakonisht, k\u00ebta ishin ata t\u00eb nj\u00ebjt\u00ebt zhvillues q\u00eb kishin krijuar k\u00ebto funksionalitete n\u00eb klientin e holl\u00eb. Pra, zhvilluesit shkruanin nga e para n\u00eb JavaScript komponent\u00ebt, q\u00eb m\u00eb par\u00eb i kishin krijuar n\u00eb C++.<\/p>\n<p>Q\u00eb n\u00eb fillim ne hodh\u00ebm posht\u00eb iden\u00eb e ndonj\u00eb konverzimi automatik (edhe n\u00ebse pjesor) t\u00eb kodit t\u00eb C++ t\u00eb klientit t\u00eb holl\u00eb n\u00eb klientin web JavaScript p\u00ebr shkak t\u00eb ndryshimeve t\u00eb forta konceptuale midis k\u00ebtyre dy gjuh\u00ebve; klienti web u shkrua n\u00eb JavaScript nga nj\u00eb faqe e bardh\u00eb.<\/p>\n<p>N\u00eb iteracionet e para t\u00eb projektit, klienti web konvertonte kodin e klientit n\u00eb gjuh\u00ebn e integruar 1C direkt n\u00eb JavaScript. Klienti i holl\u00eb funksionon ndryshe \u2013 kodi n\u00eb gjuh\u00ebn e integruar 1C kompilohen n\u00eb kod bajt, dhe pastaj ky kod bajt interpretohet n\u00eb klient. M\u00eb von\u00eb, klienti web filloi t\u00eb b\u00ebnte t\u00eb nj\u00ebjt\u00ebn \u2013 s\u00eb pari, kjo ofroi nj\u00eb fitim n\u00eb performanc\u00eb, s\u00eb dyti, lejoj q\u00eb t\u00eb unifikohej arkitektura e klient\u00ebve t\u00eb holl\u00eb dhe web.<\/p>\n<p>Versioni i par\u00eb i platform\u00ebs 1C:Nd\u00ebrmarrje me mb\u00ebshtetje p\u00ebr klientin web doli n\u00eb vitin 2009. Klienti web at\u00ebher\u00eb mb\u00ebshteste 2 shfletues \u2013 Internet Explorer dhe Firefox. N\u00eb planet fillestare ishte mb\u00ebshtetje p\u00ebr Opera, por p\u00ebr shkak t\u00eb problemeve t\u00eb pandreqshme n\u00eb at\u00eb koh\u00eb me trajtuesit e mbylljes s\u00eb aplikacionit n\u00eb Opera (nuk arrihej me 100% siguri t\u00eb gjurmohej se kur aplikacioni mbyllej, dhe n\u00eb at\u00eb moment t\u00eb kryhej procedura e shk\u00ebputjes nga serveri i aplikacioneve 1C) nga k\u00ebto plane duhej t\u00eb t\u00ebrhiqeshim.<\/p>\n<h3>Struktura e projektit<\/h3>\n<p>\nN\u00eb t\u00ebr\u00ebsi, platforma 1C:Nd\u00ebrmarrje ka 4 projekte, t\u00eb shkruara n\u00eb JavaScript:<\/p>\n<ol>\n<li>WebTools \u2013 biblioteka t\u00eb zakonshme, t\u00eb p\u00ebrdorura nga projektet e tjera (k\u00ebt\u00eb p\u00ebrfshijm\u00eb gjithashtu <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Google_Closure_Tools#Closure_Library\">Google Closure Library<\/a><\/noindex>).<\/li>\n<li>Element i menaxhimit <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000785.htm\">Dokumenti i Formatizuar<\/a><\/noindex> (implementuar n\u00eb JavaScript si n\u00eb klientin e holl\u00eb ashtu dhe n\u00eb klientin web)<\/li>\n<li>Element i menaxhimit <noindex><a rel=\"nofollow\" href=\"https:\/\/wonderland.v8.1c.ru\/blog\/planirovshchik\/\">Dy ndryshime t\u00eb dukshme n\u00eb planifikim (t\u00eb dyja n\u00eb versionin alfa):<\/a><\/noindex> (implementuar n\u00eb JavaScript si n\u00eb klientin e holl\u00eb ashtu dhe n\u00eb klientin web)<\/li>\n<li>Klienti web<\/li>\n<\/ol>\n<p>\nStruktura e \u00e7do projekti i ngjan struktur\u00ebs s\u00eb projekteve Java (ose projekteve .NET \u2013 si\u00e7 ju p\u00ebrgjigjet); ne kemi hap\u00ebsira em\u00ebrtimi, dhe secila hap\u00ebsir\u00eb em\u00ebrtimi ndodhet n\u00eb nj\u00eb dosje t\u00eb ve\u00e7ant\u00eb. Brenda dosjes ndodhen skedar\u00eb dhe klasa t\u00eb hap\u00ebsir\u00ebs em\u00ebrtimi. N\u00eb projektin e klientit web ka rreth 1000 skedar\u00eb.<\/p>\n<p>Strukturalisht, klienti web ndahet n\u00eb m\u00ebnyr\u00eb t\u00eb gjer\u00eb n\u00eb n\u00ebn-sistemat e m\u00ebposhtme:<\/p>\n<ul>\n<li>Nd\u00ebrfaqja e menaxhuar e aplikacionit klient\n<ul>\n<li>Nd\u00ebrfaqja e p\u00ebrgjithshme e aplikacionit (menut\u00eb sistemore, panelet)<\/li>\n<li>Nd\u00ebrfaqja e formave t\u00eb menaxhuara, duke p\u00ebrfshir\u00eb, mes tjerash, rreth 30 element\u00eb kontrolli (butona, lloje t\u00eb ndryshme fushash hyr\u00ebse \u2013 tekstuale, numerike, dat\u00eb\/koh\u00eb etj., tabela, lista, grafik\u00eb etj.)<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Modeli objektor, i disponuesh\u00ebm p\u00ebr zhvilluesit n\u00eb klient (p\u00ebrgjith\u00ebsisht mbi 400 lloje: modeli objektor i nd\u00ebrfaqes s\u00eb menaxhuar, konfigurimet e kompozimit t\u00eb t\u00eb dh\u00ebnave, formatimi me kusht etj.)<\/li>\n<li>Interpreatori i gjuh\u00ebs s\u00eb integruar 1C<\/li>\n<li>Zgjatjet e shfletuesve (p\u00ebrdoren p\u00ebr funksionalitetet q\u00eb nuk mb\u00ebshteten n\u00eb JavaScript)\n<ul>\n<li>Puna me kriptografin\u00eb<\/li>\n<li>Punimi me skedar\u00ebt<\/li>\n<li>Teknologjia e komponenteve t\u00eb jashtme, q\u00eb lejon p\u00ebrdorimin e tyre si n\u00eb klientin e holl\u00eb, ashtu edhe n\u00eb klientin web<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<h3>Ve\u00e7orit\u00eb e zhvillimit<\/h3>\n<p>\nImplementimi i t\u00eb gjitha asaj q\u00eb p\u00ebrshkruhet m\u00eb sip\u00ebr n\u00eb JavaScript - \u00ebsht\u00eb nj\u00eb detyr\u00eb e v\u00ebshtir\u00eb. Ndoshta, klienti web 1C \u00ebsht\u00eb nj\u00eb nga aplikacionet m\u00eb t\u00eb m\u00ebdha client-side t\u00eb shkruara n\u00eb JavaScript - rreth 450.000 rreshta. Ne aktivisht p\u00ebrdorim n\u00eb kodin e klientit web nj\u00eb qasje objektivisht-orientuar, q\u00eb e thjeshton pun\u00ebn me nj\u00eb projekt kaq t\u00eb madh.<\/p>\n<p>P\u00ebr t\u00eb minimizuar madh\u00ebsin\u00eb e kodit t\u00eb klientit, n\u00eb fillim p\u00ebrdor\u00ebm obfuskatorin ton\u00eb t\u00eb vet, dhe duke filluar nga versioni i platform\u00ebs 8.3.6 (tetor 2014) filluam t\u00eb p\u00ebrdorim <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Google_Closure_Tools#Closure_Compiler\">Google Closure Compiler<\/a><\/noindex>. Efekti i p\u00ebrdorimit n\u00eb numra \u2013 madh\u00ebsia e kuadrit t\u00eb klientit web pas obfuskimit:<\/p>\n<ul>\n<li>Obfuskatori yn\u00eb - 1556 kB<\/li>\n<li>Google Closure Compiler - 1073 kB<\/li>\n<\/ul>\n<p>\nP\u00ebrdorimi i Google Closure Compiler na ndihmoi t\u00eb rrisim performanc\u00ebn e klientit web me 30% krahasuar me obfuskatorin ton\u00eb t\u00eb vet. P\u00ebrve\u00e7 k\u00ebsaj, volumi i memories e p\u00ebrdorur nga aplikacioni \u00ebsht\u00eb zvog\u00ebluar me 15-25% (n\u00eb var\u00ebsi t\u00eb shfletuesit).<\/p>\n<p>Google Closure Compiler punon shum\u00eb mir\u00eb me kodin objektivisht-orientuar, prandaj efikasiteti i tij pik\u00ebrisht p\u00ebr klientin web \u00ebsht\u00eb maksimal. Closure Compiler b\u00ebn disa gj\u00ebra t\u00eb mira p\u00ebr ne:<\/p>\n<ul>\n<li>Kontrolli statik i tipeve n\u00eb faz\u00ebn e nd\u00ebrtimit t\u00eb projektit (sigurohet nga mbulimi i kodit me annotacione JSDoc). Rezultati \u00ebsht\u00eb nj\u00eb tipizim statik, shum\u00eb t\u00eb af\u00ebrt me nivelin e tipizimit n\u00eb C++. Kjo ndihmon t\u00eb kapim nj\u00eb p\u00ebrqindje t\u00eb madhe t\u00eb gabimeve n\u00eb faz\u00ebn e kompilimit t\u00eb projektit.<\/li>\n<li>Reduktimi i madh\u00ebsis\u00eb s\u00eb kodit p\u00ebrmes obfuskimit<\/li>\n<li>Nj\u00eb s\u00ebr\u00eb optimizimesh t\u00eb kodit t\u00eb ekzekutuesh\u00ebm, p\u00ebr shembull, si:\n<ul>\n<li>z\u00ebvend\u00ebsimet n\u00eb linj\u00eb t\u00eb funksioneve. Thirrja e nj\u00eb funksioni n\u00eb JavaScript \u00ebsht\u00eb nj\u00eb operacion relativisht i shtrenjt\u00eb, dhe z\u00ebvend\u00ebsimet n\u00eb linj\u00eb t\u00eb metodave t\u00eb vogla q\u00eb p\u00ebrdoren shpesh rrisin ndjesh\u00ebm performanc\u00ebn e kodit.<\/li>\n<li>Num\u00ebrimi i konstantave n\u00eb faz\u00ebn e kompilimit. N\u00ebse shprehja varet nga nj\u00eb konstant\u00eb, vlerya reale e konstant\u00ebs do t\u00eb vendoset atje.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nSi mjedis zhvillimi p\u00ebr klientin n\u00eb ueb ne p\u00ebrdorim WebStorm.<\/p>\n<p>P\u00ebr analiz\u00ebn e kodit ne p\u00ebrdorim <noindex><a rel=\"nofollow\" href=\"http:\/\/www.sonarqube.org\/\">SonarQube<\/a><\/noindex>, ku integrojm\u00eb analizator\u00ebt statik\u00eb t\u00eb kodit. Me ndihm\u00ebn e analizator\u00ebve ne monitorojm\u00eb degradimin e cil\u00ebsis\u00eb s\u00eb kodit burimor n\u00eb JavaScript dhe p\u00ebrpiqemi ta parandalojm\u00eb at\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ebr klientin web 1C\" src=\"\/wp-content\/uploads\/2019\/04\/886fe89a8c12d29d940b6b59316ea627.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Cilat detyra kemi zgjidhur\/zgjidhim<\/h3>\n<p>\nGjat\u00eb zbatimit t\u00eb projektit ne u p\u00ebrball\u00ebm me nj\u00eb s\u00ebr\u00eb detyrash interesante q\u00eb duhej t\u00eb zgjidhnim.<\/p>\n<h4>Shk\u00ebmbimi i t\u00eb dh\u00ebnave me serverin dhe nd\u00ebrmjet dritareve<\/h4>\n<p>\nEkzistojn\u00eb situata kur obfusikimi i kodit burimor mund t\u00eb pengoj\u00eb funksionimin e sistemit. Kodi, i jasht\u00ebm ndaj kodit ekzekutiv t\u00eb klientit n\u00eb ueb, p\u00ebr shkak t\u00eb obfusikimit, mund t\u00eb ket\u00eb emra funksionesh dhe parametrash q\u00eb dallojn\u00eb nga ato q\u00eb kodi yn\u00eb ekzekutiv pret. Kod i jasht\u00ebm p\u00ebr ne \u00ebsht\u00eb:<\/p>\n<ul>\n<li>Kodi q\u00eb vjen nga serveri n\u00eb form\u00ebn e strukturave t\u00eb dh\u00ebnash<\/li>\n<li>Kodi i nj\u00eb dritareje tjet\u00ebr t\u00eb aplikacionit<\/li>\n<\/ul>\n<p>\nP\u00ebr t\u00eb shmangur obfusikimin gjat\u00eb nd\u00ebrveprimit me serverin ne p\u00ebrdorim etiket\u00ebn @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>\nDhe p\u00ebr t\u00eb shmangur obfusikimin gjat\u00eb nd\u00ebrveprimit me dritare t\u00eb tjera ne p\u00ebrdorim ashtuquajturat interface t\u00eb eksportuara (interface ku t\u00eb gjitha metodat jan\u00eb t\u00eb eksportuara).<\/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>Ne p\u00ebrdor\u00ebm Virtual DOM para se t\u00eb b\u00ebhej e zakonshme)<\/h4>\n<p>\nAshtu si t\u00eb gjith\u00eb zhvilluesit q\u00eb merren me UI-n\u00eb e komplikuar n\u00eb web, ne u kuptuam shpejt se DOM-i nuk \u00ebsht\u00eb p\u00ebrshtatsh\u00ebm p\u00ebr t\u00eb punuar me nj\u00eb nd\u00ebrfaqe dinamike p\u00ebrdoruesi. Praktikisht menj\u00ebher\u00eb u implementua nj\u00eb analog i Virtual DOM p\u00ebr t\u00eb optimizuar pun\u00ebn me UI-n\u00eb. Gjat\u00eb trajtimit t\u00eb ngjarjeve, t\u00eb gjitha ndryshimet n\u00eb DOM ruhen n\u00eb memorje dhe, vet\u00ebm pas p\u00ebrfundimit t\u00eb t\u00eb gjitha operacioneve, ndryshimet e grumbulluara aplikohen n\u00eb pem\u00ebn DOM.<\/p>\n<h4>Optimizimi i pun\u00ebs s\u00eb klientit n\u00eb web<\/h4>\n<p>\nP\u00ebr t\u00eb b\u00ebr\u00eb q\u00eb klienti yn\u00eb n\u00eb web t\u00eb funksionoj\u00eb m\u00eb shpejt, ne p\u00ebrpiqemi n\u00eb maksimum t\u00eb shfryt\u00ebzojm\u00eb mund\u00ebsit\u00eb standarde t\u00eb shfletuesit (CSS etj.). K\u00ebshtu, paneli i komand\u00ebs s\u00eb form\u00ebs (i vendosur pothuajse n\u00eb \u00e7do form\u00eb t\u00eb aplikacionit) vizatohet ekskluzivisht me mjete t\u00eb shfletuesit, duke p\u00ebrdorur dizajn dinamik t\u00eb bazuar n\u00eb CSS.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ebr klientin web 1C\" src=\"\/wp-content\/uploads\/2019\/04\/116261ca79218eaa2bee9a4f5104092b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Testimi<\/h4>\n<p>\nP\u00ebr testimin funksional dhe testimin e performanc\u00ebs p\u00ebrdorim nj\u00eb mjet t\u00eb prodhuar vet\u00eb (shkruar n\u00eb Java dhe C++), si dhe nj\u00eb grup testesh t\u00eb nd\u00ebrtuara mbi baz\u00ebn e <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Selenium\">Selenium<\/a><\/noindex>.<\/p>\n<p>Mjeti yn\u00eb \u00ebsht\u00eb universal \u2013 ai lejon t\u00eb testoheshin pothuajse \u00e7do program dritare, prandaj \u00ebsht\u00eb i p\u00ebrshtatsh\u00ebm p\u00ebr testimin e klient\u00ebve t\u00eb holl\u00eb, si dhe p\u00ebr klient\u00ebt n\u00eb internet. Mjeti regjistron veprimet e p\u00ebrdoruesit q\u00eb ka nisur zgjidhjen aplikative \"1C\", n\u00eb nj\u00eb skenar skenari. N\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb, b\u00ebhet regjistrimi i imazheve t\u00eb zon\u00ebs s\u00eb pun\u00ebs s\u00eb ekranit \u2014 referencat. N\u00eb kontrollin e versioneve t\u00eb reja t\u00eb klientit n\u00eb internet, skenar\u00ebt ekzekutohen pa pjes\u00ebmarrjen e p\u00ebrdoruesit. N\u00eb rast se ekrani i shkrepjes nuk p\u00ebrputhet me referenc\u00ebn n\u00eb ndonj\u00eb hap, testi konsiderohet i d\u00ebshtuar, pas s\u00eb cil\u00ebs specialisti i cil\u00ebsis\u00eb kryen hetimin \u2014 n\u00ebse \u00ebsht\u00eb nj\u00eb gabim apo nj\u00eb ndryshim i planifikuar n\u00eb sjelljen e sistemit. N\u00eb rastin e sjelljes s\u00eb planifikuar, referencat automatikisht z\u00ebvend\u00ebsohen me t\u00eb reja.<\/p>\n<p>Mjeti gjithashtu kryen matje t\u00eb performanc\u00ebs s\u00eb aplikacioneve me sakt\u00ebsi deri n\u00eb 25 milisekonda. N\u00eb disa raste ne e k\u00ebto pjes\u00eb t\u00eb skenarit (p.sh., disa her\u00eb p\u00ebrs\u00ebritim hyrjen e porosis\u00eb) p\u00ebr t\u00eb analizuar degradimin e koh\u00ebs s\u00eb ekzekutimit me kalimin e koh\u00ebs. T\u00eb gjitha rezultatet e matjeve regjistrohen n\u00eb log p\u00ebr analiza.<\/p>\n<p><img decoding=\"async\" alt=\"P\u00ebr klientin web 1C\" src=\"\/wp-content\/uploads\/2019\/04\/058bab976becf6fd38b2ec668492043b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Mjeti yn\u00eb i testimit dhe aplikacioni i testuar<\/b><\/p>\n<p>Mjeti yn\u00eb dhe Selenium plot\u00ebsojn\u00eb nj\u00ebri-tjetrin; p\u00ebr shembull, n\u00ebse ndonj\u00eb buton n\u00eb nj\u00eb nga ekranet ka ndryshuar vendndodhjen e tij \u2013 Selenium nuk mund ta ndjek\u00eb k\u00ebt\u00eb, por mjeti yn\u00eb do ta v\u00ebrej\u00eb, sepse b\u00ebn nj\u00eb krahasim pixel p\u00ebr pixel t\u00eb shkrepjes me referenc\u00ebn. Gjithashtu, mjeti \u00ebsht\u00eb n\u00eb gjendje t\u00eb ndjek\u00eb problemet me trajtimin e hyrjeve nga tastiera ose mouse-i, pasi ato jan\u00eb pik\u00ebrisht ato q\u00eb ai p\u00ebrs\u00ebrit.<\/p>\n<p>Testet n\u00eb t\u00eb dy mjetet (tonin dhe Selenium) ekzekutojn\u00eb skenar\u00eb standard t\u00eb funksionimit nga zgjidhjet tona aplikative. Testet ekzekutohen automatikisht pas nd\u00ebrtimit t\u00eb p\u00ebrditsh\u00ebm t\u00eb platform\u00ebs \"1C:Enterprise\". N\u00eb rast t\u00eb ngadal\u00ebsimit t\u00eb pun\u00ebs s\u00eb skenar\u00ebve (krahasuar me nd\u00ebrtimin e m\u00ebparsh\u00ebm), ne kryejm\u00eb nj\u00eb hetim dhe eliminojm\u00eb shkakun e ngadal\u00ebsimit. Krit\u00ebri yn\u00eb \u00ebsht\u00eb i thjesht\u00eb \u2013 nd\u00ebrtimi i ri duhet t\u00eb funksionoj\u00eb jo m\u00eb ngadal\u00eb se nd\u00ebrtimi i m\u00ebparsh\u00ebm.<\/p>\n<p>P\u00ebr hetimin e incidenteve t\u00eb ngadal\u00ebsimit t\u00eb pun\u00ebs, zhvilluesit p\u00ebrdorin mjete t\u00eb ndryshme; zakonisht p\u00ebrdoret <noindex><a rel=\"nofollow\" href=\"http:\/\/apmblog.dynatrace.com\/2014\/12\/11\/dynatrace-ajax-edition-4-5-last-page-chapter-yet-story-continues\/\">Edisioni AJAX e Dynatrace<\/a><\/noindex> e kompanis\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Dynatrace\">DynaTrace<\/a><\/noindex>. Regjistrohen loget e ekzekutimit t\u00eb operacioneve me probleme n\u00eb versionin e m\u00ebparsh\u00ebm dhe at\u00eb t\u00eb ri, pastaj loget analizohen. N\u00eb k\u00ebt\u00eb rast, koha e ekzekutimit t\u00eb operacioneve individuale (n\u00eb milisekonda) mund t\u00eb mos jet\u00eb faktori vendimtar \u2013 n\u00eb shfletues her\u00eb pas here nisin procese sh\u00ebrbimi, si pastrimi i mbetjeve, q\u00eb mund t\u00eb ndikojn\u00eb n\u00eb koh\u00ebn e funksioneve dhe t\u00eb deformojn\u00eb imazhin. Parametra m\u00eb p\u00ebrkat\u00ebs k\u00ebtu do t\u00eb jen\u00eb numri i instrukcioneve JavaScript t\u00eb kryera, numri i operacioneve atomike mbi DOM etj. N\u00ebse numri i instrukcioneve\/operacioneve n\u00eb t\u00eb nj\u00ebjtin skenar n\u00eb versionin e ri \u00ebsht\u00eb rritur \u2013 kjo zakonisht do t\u00eb thot\u00eb nj\u00eb r\u00ebnie t\u00eb performanc\u00ebs q\u00eb duhet t\u00eb rregullohet.<\/p>\n<p>Gjithashtu, nj\u00ebra nga arsyet p\u00ebr r\u00ebnien e performanc\u00ebs mund t\u00eb jet\u00eb se Google Closure Compiler p\u00ebr ndonj\u00eb arsye nuk arriti t\u00eb b\u00ebj\u00eb z\u00ebvend\u00ebsimin inline t\u00eb funkcioneve (p\u00ebr shembull, sepse funksioni \u00ebsht\u00eb rekursiv ose virtual). N\u00eb k\u00ebt\u00eb rast, ne p\u00ebrpiqemi t\u00eb rregullojm\u00eb situat\u00ebn duke ripar\u00eb kodin burimor.<\/p>\n<h3>Zgjatjet e shfletuesit<\/h3>\n<p>\nN\u00eb raste kur zgjidhja aplikative ka nevoj\u00eb p\u00ebr funksionalitete q\u00eb nuk jan\u00eb n\u00eb JavaScript, ne p\u00ebrdorim zgjatjet e shfletuesit:<\/p>\n<ul>\n<li>p\u00ebr pun\u00eb me skedar\u00ebt<\/li>\n<li>p\u00ebr pun\u00eb me kriptografin\u00eb<\/li>\n<li>pun\u00eb me <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000545.htm\">komponent\u00eb t\u00eb jasht\u00ebm<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nZgjatjet tona p\u00ebrb\u00ebhen nga dy pjes\u00eb. Pjesa e par\u00eb \u00ebsht\u00eb ajo q\u00eb quhet zgjatje e shfletuesit (zakonisht, zgjatje t\u00eb shkruara n\u00eb JavaScript p\u00ebr Chrome dhe Firefox), t\u00eb cilat nd\u00ebrveprojn\u00eb me pjes\u00ebn e dyt\u00eb \u2013 nj\u00eb zgjatje binare q\u00eb realizon funksionalitetin q\u00eb na nevojitet. Duhet t\u00eb p\u00ebrmendet se ne shkruajm\u00eb 3 versione t\u00eb zgjatjeve binare \u2013 p\u00ebr Windows, Linux dhe MacOS. Zgjatja binare jepet si pjes\u00eb e platform\u00ebs 1C:Enterprise dhe ndodhet n\u00eb serverin e aplikacioneve 1C. N\u00eb thirrjen e par\u00eb nga klienti ueb, ajo ngarkohet n\u00eb kompjuterin e klientit dhe instalohet n\u00eb shfletues.<\/p>\n<p>Kur punojm\u00eb n\u00eb Safari, zgjatjet tona p\u00ebrdorin NPAPI, nd\u00ebrsa n\u00eb Internet Explorer \u2013 teknologjin\u00eb ActiveX. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Microsoft_Edge\">Microsoft Edge<\/a><\/noindex> nuk mb\u00ebshtet zgjatje, prandaj klienti ueb k\u00ebtu punon me kufizime.<\/p>\n<h3>Zhvillimi n\u00eb vazhdim<\/h3>\n<p>\nNj\u00eb nga grupet e detyrave p\u00ebr ekipin e zhvillimit t\u00eb klientit web \u00ebsht\u00eb avancimi i funksionaliteteve. Funksionaliteti i klientit web duhet t\u00eb jet\u00eb identik me at\u00eb t\u00eb klientit t\u00eb holl\u00eb, t\u00eb gjitha funksionalitetet e reja implementohen nj\u00ebkoh\u00ebsisht n\u00eb t\u00eb dyja, n\u00eb klientin e holl\u00eb dhe at\u00eb web.<\/p>\n<p>Detyra t\u00eb tjera p\u00ebrfshijn\u00eb zhvillimin e arkitektur\u00ebs, ristrukturimin, p\u00ebrmir\u00ebsimin e performanc\u00ebs dhe besueshm\u00ebris\u00eb. P\u00ebr shembull, nj\u00eb nga drejtimet \u00ebsht\u00eb l\u00ebvizja p\u00ebrpara n\u00eb modelin e pun\u00ebs asinkron. Nj\u00eb pjes\u00eb e funksionalitetit t\u00eb klientit web aktualisht \u00ebsht\u00eb nd\u00ebrtuar mbi modelin e nd\u00ebrveprimit sinkron me serverin. Modeli asinkron tani po b\u00ebhet m\u00eb i r\u00ebnd\u00ebsish\u00ebm n\u00eb shfletues (dhe jo vet\u00ebm n\u00eb shfletues), dhe kjo na detyron t\u00eb modifikojm\u00eb klientin web duke z\u00ebvend\u00ebsuar thirrjet sinkrone me ato asinkrone (dhe duke realizuar p\u00ebrkat\u00ebsisht ristrukturimin e kodit). Kalimi gradual n\u00eb modelin asinkron shpjegohet nga nevoja p\u00ebr t\u00eb mb supportuar zgjidhjet e publikuara dhe p\u00ebrshtatjen e tyre afatshkurt\u00ebr.<br \/>\n<br \/>Burimi: <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 5.0.2 - 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.\" \/>\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\/sq\/blog\/administrirovanie\/pro-veb-klient-1s__trashed\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/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\udd47P\u00ebr klientin web 1C | ProHoster","description":"Nj\u00eb nga karakteristikat e k\u00ebndshme t\u00eb teknologjis\u00eb 1C:Enterprise \u00ebsht\u00eb se zgjidhja aplikative, e zhvilluar sipas teknologjis\u00eb s\u00eb formave t\u00eb menaxhuara, mund t\u00eb ekzekutohet si n\u00eb klientin e holl\u00eb (ekzekutues) n\u00ebn Windows, Linux, MacOS.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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.","og:url":"https:\/\/prohoster.info\/sq\/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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/32465","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=32465"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/32465\/revisions"}],"predecessor-version":[{"id":173305,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/32465\/revisions\/173305"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/24269"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=32465"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=32465"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=32465"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}