{"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\/cs\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","title":{"rendered":"O webov\u00e9m klientu 1C","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Jednou z p\u0159\u00edjemn\u00fdch vlastnost\u00ed technologie 1C:Enterprise je to, \u017ee aplika\u010dn\u00ed \u0159e\u0161en\u00ed vyvinut\u00e9 na z\u00e1klad\u011b technologie \u0159\u00edzen\u00fdch formul\u00e1\u0159\u016f m\u016f\u017ee b\u011b\u017eet jak v tenk\u00e9m (spustiteln\u00e9m) klientovi pod Windows, Linux, MacOS X, tak jako webov\u00fd klient v 5 prohl\u00ed\u017ee\u010d\u00edch \u2013 Chrome, Internet Explorer, Firefox, Safari, Edge, a to v\u0161e \u2013 bez zm\u011bny zdrojov\u00e9ho k\u00f3du aplikace. Nav\u00edc \u2013 vzhledov\u011b aplikace v tenk\u00e9m klientu a v prohl\u00ed\u017ee\u010di funguje a vypad\u00e1 prakticky identicky.<br \/>\nNajd\u011bte 10 rozd\u00edl\u016f (pod \u010dl\u00e1nkem 2 obr\u00e1zky):<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nOkno tenk\u00e9ho klienta na Linuxu:<\/p>\n<p><img decoding=\"async\" alt=\"O webov\u00e9m klientu 1C\" src=\"\/wp-content\/uploads\/2019\/04\/6a836d01f80f447302e04d1827d5eebb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTent\u00fd\u017e okno ve webov\u00e9m klientu (v prohl\u00ed\u017ee\u010di Chrome):<\/p>\n<p><img decoding=\"async\" alt=\"O webov\u00e9m klientu 1C\" src=\"\/wp-content\/uploads\/2019\/04\/1cab8bdf0d9d1c9d6601219c3ae6018c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPro\u010d jsme vytvo\u0159ili webov\u00e9ho klienta? \u0158e\u010deno trochu vzne\u0161en\u011b, takov\u00fd \u00fakol p\u0159ed n\u00e1s postavil \u010das. Ji\u017e dlouho se pr\u00e1ce p\u0159es internet stala nezbytnou podm\u00ednkou pro obchodn\u00ed aplikace. Zpo\u010d\u00e1tku jsme p\u0159idali mo\u017enost pr\u00e1ce p\u0159es internet pro na\u0161eho tenk\u00e9ho klienta (n\u011bkte\u0159\u00ed na\u0161i konkurenti, mimochodem, na tomto i skon\u010dili; jin\u00ed, naopak, se vzdali tenk\u00e9ho klienta a omezili se pouze na realizaci webov\u00e9ho klienta). My jsme se v\u0161ak rozhodli poskytnout na\u0161im u\u017eivatel\u016fm mo\u017enost vybrat si ten typ klienta, kter\u00fd jim vyhovuje nejv\u00edce.<\/p>\n<p><img decoding=\"async\" alt=\"O webov\u00e9m klientu 1C\" src=\"\/wp-content\/uploads\/2019\/04\/345d070d695cfc4854c485148d22d24c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u0159id\u00e1n\u00ed mo\u017enosti pr\u00e1ce p\u0159es internet pro tenk\u00e9ho klienta bylo velk\u00fdm projektem s kompletn\u00ed zm\u011bnou architektury klient-server interakce. Vytvo\u0159en\u00ed webov\u00e9ho klienta \u2013 to je \u00fapln\u011b nov\u00fd projekt, kter\u00fd za\u010d\u00ednal od nuly.<\/p>\n<h3>Formulace \u00fakolu<\/h3>\n<p>\nTak\u017ee, po\u017eadavky na projekt: webov\u00fd klient mus\u00ed d\u011blat to sam\u00e9, co tenk\u00fd klient, a to konkr\u00e9tn\u011b:<\/p>\n<ol>\n<li>Zobrazit u\u017eivatelsk\u00e9 rozhran\u00ed<\/li>\n<li>Spou\u0161t\u011bt klientsk\u00fd k\u00f3d napsan\u00fd v jazyce 1C<\/li>\n<\/ol>\n<p>\nU\u017eivatelsk\u00e9 rozhran\u00ed v 1C je pops\u00e1no ve vizu\u00e1ln\u00edm editoru, ale deklarativn\u011b, bez pixelov\u00e9ho uspo\u0159\u00e1d\u00e1n\u00ed prvk\u016f; pou\u017e\u00edv\u00e1 se kolem t\u0159iceti typ\u016f prvk\u016f rozhran\u00ed \u2013 tla\u010d\u00edtka, vstupn\u00ed pole (textov\u00e1, \u010d\u00edseln\u00e1, datum\/\u010das), seznamy, tabulky, grafy atd. <\/p>\n<p>Klientsk\u00fd k\u00f3d v jazyce 1C m\u016f\u017ee obsahovat serverov\u00e9 vol\u00e1n\u00ed, pr\u00e1ci s m\u00edstn\u00edmi zdroji (soubory atd.), tisk a mnoho dal\u0161\u00edho.<\/p>\n<p>Jak tenk\u00fd klient (p\u0159i pr\u00e1ci p\u0159es web), tak webov\u00fd klient pou\u017e\u00edvaj\u00ed stejnou sadu webov\u00fdch slu\u017eeb pro komunikaci se serverem aplikac\u00ed 1C. Implementace u klient\u016f je samoz\u0159ejm\u011b r\u016fzn\u00e1 \u2013 tenk\u00fd klient je naps\u00e1n v C++, webov\u00fd klient \u2013 v JavaScriptu.<\/p>\n<h3>Trocha historie<\/h3>\n<p>\nProjekt vytvo\u0159en\u00ed webov\u00e9ho klienta za\u010dal v roce 2006, pr\u016fm\u011brn\u011b se na n\u011bm pod\u00edlela p\u011btice lid\u00ed. V jednotliv\u00fdch f\u00e1z\u00edch projektu byli naj\u00edm\u00e1ni v\u00fdvoj\u00e1\u0159i pro implementaci specifick\u00e9 funk\u010dnosti (tabulkov\u00e9ho dokumentu, diagram\u016f atd.); obvykle to byli stejn\u00ed v\u00fdvoj\u00e1\u0159i, kte\u0159\u00ed tuto funk\u010dnost realizovali v tenk\u00e9m klientu. Tedy v\u00fdvoj\u00e1\u0159i znovu napsali komponenty na JavaScript, kter\u00e9 d\u0159\u00edve vytvo\u0159ili v C++.<\/p>\n<p>Od sam\u00e9ho za\u010d\u00e1tku jsme odm\u00edtli my\u0161lenku jak\u00e9koli automatick\u00e9 (i \u010d\u00e1ste\u010dn\u00e9) konverze C++ k\u00f3du tenk\u00e9ho klienta na JavaScript webov\u00e9ho klienta vzhledem k siln\u00fdm koncep\u010dn\u00edm rozd\u00edl\u016fm mezi t\u011bmito dv\u011bma jazyky; webov\u00fd klient byl naps\u00e1n na JavaScript zcela od za\u010d\u00e1tku.<\/p>\n<p>V prvn\u00edch iterac\u00edch projektu webov\u00fd klient konvertoval klientsk\u00fd k\u00f3d na vestav\u011bn\u00e9m jazyce 1C p\u0159\u00edmo do JavaScriptu. Tenk\u00fd klient to d\u011bl\u00e1 jinak \u2013 k\u00f3d na vestav\u011bn\u00e9m jazyce 1C je kompilov\u00e1n do bajtk\u00f3du a pot\u00e9 je tento bajtk\u00f3d interpretov\u00e1n na klientovi. V pr\u016fb\u011bhu \u010dasu to za\u010dal d\u011blat i webov\u00fd klient \u2013 jednak to p\u0159ineslo zisk v v\u00fdkonu, jednak to umo\u017enilo unifikovat architekturu tenk\u00e9ho a webov\u00e9ho klienta.<\/p>\n<p>Prvn\u00ed verze platformy 1C:Enterprise s podporou webov\u00e9ho klienta byla vyd\u00e1na v roce 2009. Webov\u00fd klient tehdy podporoval 2 prohl\u00ed\u017ee\u010de \u2013 Internet Explorer a Firefox. V p\u016fvodn\u00edch pl\u00e1nech byla podpora prohl\u00ed\u017ee\u010de Opera, ale kv\u016fli nezdolateln\u00fdm probl\u00e9m\u016fm s obsluhou uzav\u0159en\u00ed aplikace v Ope\u0159e (nepoda\u0159ilo se se 100% jistotou sledovat, kdy aplikace kon\u010d\u00ed, a v tomto okam\u017eiku prov\u00e9st proceduru odpojen\u00ed od serveru aplikac\u00ed 1C) bylo nutno od t\u011bchto pl\u00e1n\u016f upustit.<\/p>\n<h3>Struktura projektu<\/h3>\n<p>\nV platform\u011b 1C:Enterprise existuj\u00ed celkem 4 projekty napsan\u00e9 v JavaScriptu:<\/p>\n<ol>\n<li>WebTools \u2013 obecn\u00e9 knihovny pou\u017e\u00edvan\u00e9 ostatn\u00edmi projekty (sem zahrnujeme tak\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Google_Closure_Tools#Closure_Library\">Google Closure Library<\/a><\/noindex>).<\/li>\n<li>Ovl\u00e1dac\u00ed prvek <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000785.htm\">Form\u00e1tovan\u00fdDokument<\/a><\/noindex> (implementov\u00e1n v JavaScriptu jak v tenk\u00e9m klientu, tak ve webov\u00e9m klientu)<\/li>\n<li>Ovl\u00e1dac\u00ed prvek <noindex><a rel=\"nofollow\" href=\"https:\/\/wonderland.v8.1c.ru\/blog\/planirovshchik\/\">Pl\u00e1nova\u010d<\/a><\/noindex> (implementov\u00e1n v JavaScriptu jak v tenk\u00e9m klientu, tak ve webov\u00e9m klientu)<\/li>\n<li>Webov\u00fd klient<\/li>\n<\/ol>\n<p>\nStruktura ka\u017ed\u00e9ho projektu p\u0159ipom\u00edn\u00e1 strukturu Java projekt\u016f (nebo .NET projekt\u016f \u2013 komu co vyhovuje); m\u00e1me zde n\u00e1zvov\u00e9 prostory a ka\u017ed\u00fd n\u00e1zvov\u00fd prostor je v samostatn\u00e9 slo\u017ece. Uvnit\u0159 slo\u017eky jsou soubory a t\u0159\u00eddy n\u00e1zvov\u00e9ho prostoru. V projektu webov\u00e9ho klienta je p\u0159ibli\u017en\u011b 1000 soubor\u016f.<\/p>\n<p>Strukturn\u011b je webov\u00fd klient p\u0159ibli\u017en\u011b rozd\u011blen na n\u00e1sleduj\u00edc\u00ed subsyst\u00e9my:<\/p>\n<ul>\n<li>Spravovan\u00e9 rozhran\u00ed klientsk\u00e9 aplikace\n<ul>\n<li>Obecn\u00e9 rozhran\u00ed aplikace (syst\u00e9mov\u00e1 menu, panely)<\/li>\n<li>Rozhran\u00ed \u0159\u00edzen\u00fdch formul\u00e1\u0159\u016f, obsahuj\u00edc\u00ed p\u0159ibli\u017en\u011b 30 ovl\u00e1dac\u00edch prvk\u016f (tla\u010d\u00edtka, r\u016fzn\u00e9 typy vstupn\u00edch pol\u00ed \u2013 textov\u00e9, \u010d\u00edseln\u00e9, datum\/\u010das atd., tabulky, seznamy, grafy a podobn\u011b)<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Objektov\u00fd model dostupn\u00fd v\u00fdvoj\u00e1\u0159\u016fm na klientsk\u00e9 stran\u011b (celkem p\u0159es 400 typ\u016f: objektov\u00fd model \u0159\u00edzen\u00e9ho rozhran\u00ed, nastaven\u00ed uspo\u0159\u00e1d\u00e1n\u00ed dat, podm\u00ednkov\u00e9ho form\u00e1tov\u00e1n\u00ed atd.)<\/li>\n<li>Interpret\u00e1tor vestav\u011bn\u00e9ho jazyka 1C<\/li>\n<li>Prodlou\u017een\u00ed pro prohl\u00ed\u017ee\u010de (pou\u017e\u00edv\u00e1 se pro funk\u010dnost, kter\u00e1 nen\u00ed podporov\u00e1na v JavaScriptu)\n<ul>\n<li>Pr\u00e1ce s kryptografi\u00ed<\/li>\n<li>Pr\u00e1ce se soubory<\/li>\n<li>Technologie extern\u00edch komponent, umo\u017e\u0148uj\u00edc\u00ed jejich pou\u017eit\u00ed jak v tenk\u00e9m, tak ve webov\u00e9m klientovi<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<h3>Specifika v\u00fdvoje<\/h3>\n<p>\nRealizace v\u0161eho v\u00fd\u0161e uveden\u00e9ho v JavaScriptu nen\u00ed jednoduch\u00e1 z\u00e1le\u017eitost. Mo\u017en\u00e1 je webov\u00fd klient 1C jednou z nejv\u011bt\u0161\u00edch aplikac\u00ed na stran\u011b klienta napsan\u00fdch v JavaScriptu \u2013 kolem 450 000 \u0159\u00e1dk\u016f. Aktivn\u011b pou\u017e\u00edv\u00e1me v k\u00f3du webov\u00e9ho klienta objektov\u011b orientovan\u00fd p\u0159\u00edstup, kter\u00fd usnad\u0148uje pr\u00e1ci s tak velk\u00fdm projektem.<\/p>\n<p>Abychom minimalizovali velikost klientsk\u00e9ho k\u00f3du, zpo\u010d\u00e1tku jsme pou\u017e\u00edvali vlastn\u00ed obfusc\u00e1tor, a od verze platformy 8.3.6 (\u0159\u00edjen 2014) jsme za\u010dali pou\u017e\u00edvat <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Google_Closure_Tools#Closure_Compiler\">Google Closure Compiler<\/a><\/noindex>. Efekt pou\u017eit\u00ed v \u010d\u00edslech \u2013 velikost frameworku webov\u00e9ho klienta po obfuskaci:<\/p>\n<ul>\n<li>Vlastn\u00ed obfusc\u00e1tor \u2013 1556 kB<\/li>\n<li>Google Closure Compiler \u2013 1073 kB<\/li>\n<\/ul>\n<p>\nPou\u017eit\u00ed Google Closure Compiler n\u00e1m pomohlo zv\u00fd\u0161it v\u00fdkon webov\u00e9ho klienta o 30 % ve srovn\u00e1n\u00ed s na\u0161\u00edm vlastn\u00edm obfusc\u00e1torem. Krom\u011b toho do\u0161lo k 15-25% (v z\u00e1vislosti na prohl\u00ed\u017ee\u010di) sn\u00ed\u017een\u00ed objemu pam\u011bti, kterou aplikace spot\u0159ebov\u00e1v\u00e1.<\/p>\n<p>Google Closure Compiler velmi dob\u0159e pracuje s objektov\u011b orientovan\u00fdm k\u00f3dem, tak\u017ee jeho efektivita pro webov\u00e9ho klienta je maxim\u00e1ln\u00ed. Closure Compiler pro n\u00e1s d\u011bl\u00e1 n\u011bkolik u\u017eite\u010dn\u00fdch v\u011bc\u00ed:<\/p>\n<ul>\n<li>Statick\u00e1 kontrola typ\u016f p\u0159i sestaven\u00ed projektu (zaji\u0161\u0165uje to, \u017ee pokr\u00fdv\u00e1me k\u00f3d anotacemi JSDoc). V\u00fdsledkem je statick\u00e9 typov\u00e1n\u00ed, velmi bl\u00edzk\u00e9 \u00farovni typov\u00e1n\u00ed v C++. To pom\u00e1h\u00e1 zachytit pom\u011brn\u011b velk\u00e9 procento chyb ve f\u00e1zi kompilace projektu.<\/li>\n<li>Sn\u00ed\u017een\u00ed velikosti k\u00f3du pomoc\u00ed obfuskace<\/li>\n<li>\u0158ada optimalizac\u00ed vykon\u00e1van\u00e9ho k\u00f3du, nap\u0159\u00edklad takov\u00e9 jako:\n<ul>\n<li>Inline nahrazen\u00ed funkc\u00ed. Zavol\u00e1n\u00ed funkce v JavaScriptu je dost n\u00e1ro\u010dn\u00e1 operace a inline nahrazen\u00ed \u010dasto pou\u017e\u00edvan\u00fdch mal\u00fdch metod podstatn\u011b zrychluje b\u011bh k\u00f3du.<\/li>\n<li>Po\u010d\u00edt\u00e1n\u00ed konstant v dob\u011b kompilace. Pokud v\u00fdraz z\u00e1vis\u00ed na konstant\u011b, skute\u010dn\u00e1 hodnota konstanty bude do n\u011bj vlo\u017eena.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nJako v\u00fdvojov\u00e9 prost\u0159ed\u00ed webov\u00e9ho klienta pou\u017e\u00edv\u00e1me WebStorm.<\/p>\n<p>Pro anal\u00fdzu k\u00f3du pou\u017e\u00edv\u00e1me <noindex><a rel=\"nofollow\" href=\"http:\/\/www.sonarqube.org\/\">SonarQube<\/a><\/noindex>, kam integrujeme statick\u00e9 analyz\u00e1tory k\u00f3du. Pomoc\u00ed analyz\u00e1tor\u016f sledujeme degradaci kvality zdrojov\u00e9ho k\u00f3du v JavaScriptu a sna\u017e\u00edme se j\u00ed p\u0159edej\u00edt.<\/p>\n<p><img decoding=\"async\" alt=\"O webov\u00e9m klientu 1C\" src=\"\/wp-content\/uploads\/2019\/04\/886fe89a8c12d29d940b6b59316ea627.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Jak\u00e9 \u00fakoly jsme \u0159e\u0161ili\/\u0159e\u0161\u00edme<\/h3>\n<p>\nB\u011bhem realizace projektu jsme se setkali s \u0159adou zaj\u00edmav\u00fdch \u00fakol\u016f, kter\u00e9 jsme museli \u0159e\u0161it.<\/p>\n<h4>V\u00fdm\u011bna dat se serverem a mezi okny<\/h4>\n<p>\nExistuj\u00ed situace, kdy obfuskov\u00e1n\u00ed zdrojov\u00e9ho k\u00f3du m\u016f\u017ee naru\u0161it chod syst\u00e9mu. K\u00f3d, kter\u00fd je extern\u00ed vzhledem k vykon\u00e1van\u00e9mu k\u00f3du webov\u00e9ho klienta, m\u016f\u017ee m\u00edt kv\u016fli obfuskaci n\u00e1zvy funkc\u00ed a parametr\u016f, kter\u00e9 se li\u0161\u00ed od t\u011bch, kter\u00e9 n\u00e1\u0161 vykon\u00e1van\u00fd k\u00f3d o\u010dek\u00e1v\u00e1. Extern\u00edm k\u00f3dem pro n\u00e1s je:<\/p>\n<ul>\n<li>K\u00f3d p\u0159ich\u00e1zej\u00edc\u00ed ze serveru ve form\u011b datov\u00fdch struktur<\/li>\n<li>K\u00f3d jin\u00e9ho okna aplikace<\/li>\n<\/ul>\n<p>\nAbychom se vyhnuli obfuskaci p\u0159i interakci se serverem, pou\u017e\u00edv\u00e1me tag @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>\nA aby se p\u0159ede\u0161lo obfuskaci p\u0159i interakci s jin\u00fdmi okny, pou\u017e\u00edv\u00e1me takzvan\u00e9 exportovan\u00e9 rozhran\u00ed (rozhran\u00ed, kde jsou v\u0161echny metody exportovateln\u00e9).<\/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>Pou\u017eili jsme Virtual DOM, ne\u017e se stal popul\u00e1rn\u00edm)<\/h4>\n<p>\nJako v\u0161ichni v\u00fdvoj\u00e1\u0159i, kte\u0159\u00ed se zab\u00fdvaj\u00ed slo\u017eit\u00fdm webov\u00fdm u\u017eivatelsk\u00fdm rozhran\u00edm, jsme rychle pochopili, \u017ee DOM nen\u00ed p\u0159\u00edli\u0161 vhodn\u00fd pro pr\u00e1ci s dynamick\u00fdm u\u017eivatelsk\u00fdm rozhran\u00edm. Prakticky okam\u017eit\u011b byl realizov\u00e1n analog Virtual DOM pro optimalizaci pr\u00e1ce s UI. B\u011bhem zpracov\u00e1n\u00ed ud\u00e1losti jsou v\u0161echna DOM zm\u011bny ukl\u00e1d\u00e1na do pam\u011bti a a\u017e po dokon\u010den\u00ed v\u0161ech operac\u00ed se akumulovan\u00e9 zm\u011bny pou\u017eij\u00ed na DOM strom.<\/p>\n<h4>Optimalizace pr\u00e1ce webov\u00e9ho klienta<\/h4>\n<p>\nAby n\u00e1\u0161 webov\u00fd klient fungoval rychleji, sna\u017e\u00edme se naplno vyu\u017e\u00edt standardn\u00ed mo\u017enosti prohl\u00ed\u017ee\u010de (CSS atd.). Nap\u0159\u00edklad, panel n\u00e1stroj\u016f formul\u00e1\u0159e (um\u00edst\u011bn\u00fd prakticky na ka\u017ed\u00e9m formul\u00e1\u0159i aplikace) je vykreslov\u00e1n v\u00fdhradn\u011b prost\u0159edky prohl\u00ed\u017ee\u010de, s dynamick\u00fdm designem na z\u00e1klad\u011b CSS.<\/p>\n<p><img decoding=\"async\" alt=\"O webov\u00e9m klientu 1C\" src=\"\/wp-content\/uploads\/2019\/04\/116261ca79218eaa2bee9a4f5104092b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Testov\u00e1n\u00ed<\/h4>\n<p>\nPro funk\u010dn\u00ed testov\u00e1n\u00ed a testov\u00e1n\u00ed v\u00fdkonu pou\u017e\u00edv\u00e1me n\u00e1\u0161 vlastn\u00ed n\u00e1stroj (napsan\u00fd v Jav\u011b a C++), stejn\u011b jako sadu test\u016f zalo\u017eenou na <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Selenium\">Selenium<\/a><\/noindex>.<\/p>\n<p>N\u00e1\u0161 n\u00e1stroj je univerz\u00e1ln\u00ed \u2013 umo\u017e\u0148uje testovat prakticky jak\u00e9koli desktopov\u00e9 aplikace, a proto je vhodn\u00fd jak pro testov\u00e1n\u00ed tenk\u00e9ho klienta, tak i webov\u00e9ho klienta. N\u00e1stroj zaznamen\u00e1v\u00e1 akce u\u017eivatele, kter\u00fd spustil aplika\u010dn\u00ed \u0159e\u0161en\u00ed \u201e1C\u201c, do skriptov\u00e9ho souboru. Z\u00e1rove\u0148 se prov\u00e1d\u00ed z\u00e1znam sn\u00edmk\u016f pracovn\u00ed plochy obrazovky \u2013 standard\u016f. P\u0159i kontrole nov\u00fdch verz\u00ed webov\u00e9ho klienta se sc\u00e9n\u00e1\u0159e p\u0159ehr\u00e1vaj\u00ed bez \u00fa\u010dasti u\u017eivatele. V p\u0159\u00edpad\u011b, \u017ee se sn\u00edmek obrazovky neshoduje s referentn\u00edm na jak\u00e9mkoli kroku, je test pova\u017eov\u00e1n za ne\u00fasp\u011b\u0161n\u00fd, po \u010dem\u017e odborn\u00edk na kvalitu prov\u00e1d\u00ed vy\u0161et\u0159ov\u00e1n\u00ed \u2013 zda se jedn\u00e1 o chybu nebo pl\u00e1novanou zm\u011bnu chov\u00e1n\u00ed syst\u00e9mu. V p\u0159\u00edpad\u011b pl\u00e1novan\u00e9ho chov\u00e1n\u00ed se standardy automaticky nahrazuj\u00ed nov\u00fdmi.<\/p>\n<p>N\u00e1stroj tak\u00e9 prov\u00e1d\u00ed m\u011b\u0159en\u00ed v\u00fdkonu aplikac\u00ed s p\u0159esnost\u00ed a\u017e na 25 milisekund. V n\u011bkter\u00fdch p\u0159\u00edpadech uzav\u00edr\u00e1me \u010d\u00e1sti sc\u00e9n\u00e1\u0159e (nap\u0159\u00edklad n\u011bkolikr\u00e1t opakujeme zad\u00e1v\u00e1n\u00ed objedn\u00e1vky) pro anal\u00fdzu degenerace doby zpracov\u00e1n\u00ed \u010dasem. V\u00fdsledky v\u0161ech m\u011b\u0159en\u00ed se zaznamen\u00e1vaj\u00ed do protokolu pro anal\u00fdzu.<\/p>\n<p><img decoding=\"async\" alt=\"O webov\u00e9m klientu 1C\" src=\"\/wp-content\/uploads\/2019\/04\/058bab976becf6fd38b2ec668492043b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>N\u00e1\u0161 testovac\u00ed n\u00e1stroj a testovan\u00e1 aplikace<\/b><\/p>\n<p>N\u00e1\u0161 n\u00e1stroj a Selenium se dopl\u0148uj\u00ed; nap\u0159\u00edklad, pokud se n\u011bjak\u00e9 tla\u010d\u00edtko na jedn\u00e9 z obrazovek zm\u011bnilo v um\u00edst\u011bn\u00ed \u2013 Selenium to nemus\u00ed zjistit, ale n\u00e1\u0161 n\u00e1stroj si toho v\u0161imne, proto\u017ee prov\u00e1d\u00ed pixelov\u00e9 porovn\u00e1n\u00ed sn\u00edmku obrazovky s referenc\u00ed. N\u00e1stroj tak\u00e9 dok\u00e1\u017ee odhalit probl\u00e9my s zpracov\u00e1n\u00edm vstupu z kl\u00e1vesnice nebo my\u0161i, proto\u017ee je pr\u00e1v\u011b reprodukuje.<\/p>\n<p>Testy na obou n\u00e1stroj\u00edch (na\u0161em a Selenium) spou\u0161t\u00ed standardn\u00ed pracovn\u00ed sc\u00e9n\u00e1\u0159e z na\u0161ich aplika\u010dn\u00edch \u0159e\u0161en\u00ed. Testy se automaticky spou\u0161t\u011bj\u00ed po ka\u017edodenn\u00ed sestav\u011b platformy \u201e1C:Enterprise\u201c. V p\u0159\u00edpad\u011b zpomalen\u00ed sc\u00e9n\u00e1\u0159\u016f (ve srovn\u00e1n\u00ed s p\u0159edchoz\u00ed sestavou) prov\u00e1d\u00edme vy\u0161et\u0159ov\u00e1n\u00ed a odstra\u0148ujeme p\u0159\u00ed\u010dinu zpomalen\u00ed. Na\u0161e krit\u00e9rium je jednoduch\u00e9 \u2013 nov\u00e1 sestava by m\u011bla fungovat nepomaleji ne\u017e p\u0159edchoz\u00ed.<\/p>\n<p>Pro vy\u0161et\u0159ov\u00e1n\u00ed incident\u016f zpomalen\u00ed pr\u00e1ce v\u00fdvoj\u00e1\u0159i pou\u017e\u00edvaj\u00ed r\u016fzn\u00e9 n\u00e1stroje; p\u0159ev\u00e1\u017en\u011b se pou\u017e\u00edv\u00e1 <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> v\u00fdrobce spole\u010dnosti <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Dynatrace\">DynaTrace<\/a><\/noindex>. Prov\u00e1d\u00ed se z\u00e1znam protokol\u016f prov\u00e1d\u011bn\u00ed probl\u00e9mov\u00e9 operace na p\u0159edchoz\u00ed a nov\u00e9 verzi, pot\u00e9 se protokoly analyzuj\u00ed. P\u0159itom doba prov\u00e1d\u011bn\u00ed jednotliv\u00fdch operac\u00ed (v milisekund\u00e1ch) nemus\u00ed b\u00fdt rozhoduj\u00edc\u00edm faktorem \u2013 v prohl\u00ed\u017ee\u010di se ob\u010das spou\u0161t\u011bj\u00ed obslu\u017en\u00e9 procesy, jako je \u00faklid pam\u011bti, kter\u00e9 mohou ovlivnit dobu prov\u00e1d\u011bn\u00ed funkc\u00ed a zkreslit obraz. Relevatn\u011bj\u0161\u00edmi parametry v tomto p\u0159\u00edpad\u011b budou po\u010det proveden\u00fdch instrukc\u00ed JavaScript, po\u010det atom\u00e1rn\u00edch operac\u00ed nad DOM atd. Pokud se po\u010det instrukc\u00ed\/operac\u00ed ve stejn\u00e9m sc\u00e9n\u00e1\u0159i v nov\u00e9 verzi zv\u00fd\u0161il \u2013 v\u011bt\u0161inou to znamen\u00e1 pokles v\u00fdkonu, kter\u00fd je t\u0159eba opravit.<\/p>\n<p>Dal\u0161\u00ed p\u0159\u00ed\u010dinou poklesu v\u00fdkonu m\u016f\u017ee b\u00fdt skute\u010dnost, \u017ee Google Closure Compiler z n\u011bjak\u00e9ho d\u016fvodu nebyl schopen prov\u00e9st inline nahrazen\u00ed funkce (nap\u0159\u00edklad proto\u017ee je funkce rekurzivn\u00ed nebo virtu\u00e1ln\u00ed). V takov\u00e9m p\u0159\u00edpad\u011b se sna\u017e\u00edme situaci napravit p\u0159episem zdrojov\u00e9ho k\u00f3du.<\/p>\n<h3>Roz\u0161\u00ed\u0159en\u00ed prohl\u00ed\u017ee\u010d\u016f<\/h3>\n<p>\nV p\u0159\u00edpad\u011b, \u017ee aplika\u010dn\u00edmu \u0159e\u0161en\u00ed chyb\u00ed funk\u010dnost, kterou JavaScript neposkytuje, pou\u017e\u00edv\u00e1me roz\u0161\u00ed\u0159en\u00ed prohl\u00ed\u017ee\u010d\u016f:<\/p>\n<ul>\n<li>pro pr\u00e1ci se soubory<\/li>\n<li>pro pr\u00e1ci s kryptografi\u00ed<\/li>\n<li>pr\u00e1ce s <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000545.htm\">extern\u00edmi komponenty<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nNa\u0161e roz\u0161\u00ed\u0159en\u00ed se skl\u00e1d\u00e1 ze dvou \u010d\u00e1st\u00ed. Prvn\u00ed \u010d\u00e1st \u2013 to, co se naz\u00fdv\u00e1 roz\u0161\u00ed\u0159en\u00ed prohl\u00ed\u017ee\u010de (obvykle roz\u0161\u00ed\u0159en\u00ed napsan\u00e1 v JavaScriptu pro Chrome a Firefox), kter\u00e1 interaguje s druhou \u010d\u00e1st\u00ed \u2013 bin\u00e1rn\u00edm roz\u0161\u00ed\u0159en\u00edm, kter\u00e9 implementuje po\u017eadovanou funk\u010dnost. Je t\u0159eba zm\u00ednit, \u017ee p\u00ed\u0161eme 3 verze bin\u00e1rn\u00edch roz\u0161\u00ed\u0159en\u00ed \u2013 pro Windows, Linux a MacOS. Bin\u00e1rn\u00ed roz\u0161\u00ed\u0159en\u00ed je dod\u00e1v\u00e1no jako sou\u010d\u00e1st platformy 1C:Enterprise a nach\u00e1z\u00ed se na serveru aplikac\u00ed 1C. P\u0159i prvn\u00edm vol\u00e1n\u00ed z webov\u00e9ho klienta se na\u010dte na klientsk\u00fd po\u010d\u00edta\u010d a nainstaluje do prohl\u00ed\u017ee\u010de.<\/p>\n<p>P\u0159i pr\u00e1ci v Safari na\u0161e roz\u0161\u00ed\u0159en\u00ed vyu\u017e\u00edvaj\u00ed NPAPI, p\u0159i pr\u00e1ci v Internet Exploreru \u2013 technologii ActiveX. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Microsoft_Edge\">Microsoft Edge<\/a><\/noindex> zat\u00edm nepodporuje roz\u0161\u00ed\u0159en\u00ed, tak\u017ee webov\u00fd klient v n\u011bm funguje s omezen\u00edmi.<\/p>\n<h3>Dal\u0161\u00ed rozvoj<\/h3>\n<p>\nJedna z \u00faloh pro t\u00fdm v\u00fdvoje webov\u00e9ho klienta spo\u010d\u00edv\u00e1 v dal\u0161\u00edm rozvoji funkcionality. Funkcionalita webov\u00e9ho klienta by m\u011bla b\u00fdt toto\u017en\u00e1 s funkcionalitou tenk\u00e9ho klienta, ve\u0161ker\u00e1 nov\u00e1 funkcionalita je realizov\u00e1na sou\u010dasn\u011b jak pro tenk\u00fd, tak pro webov\u00fd klient.<\/p>\n<p>Dal\u0161\u00ed \u00fakoly zahrnuj\u00ed rozvoj architektury, refaktoring, zvy\u0161ov\u00e1n\u00ed v\u00fdkonnosti a spolehlivosti. Nap\u0159\u00edklad jedn\u00edm z sm\u011br\u016f je dal\u0161\u00ed posun sm\u011brem k asynchronn\u00edmu modelu pr\u00e1ce. \u010c\u00e1st funkcionality webov\u00e9ho klienta je v sou\u010dasn\u00e9 dob\u011b postavena na synchronn\u00edm modelu interakce se serverem. Asynchronn\u00ed model se nyn\u00ed st\u00e1v\u00e1 v prohl\u00ed\u017ee\u010d\u00edch (a nejen v prohl\u00ed\u017ee\u010d\u00edch) aktu\u00e1ln\u011bj\u0161\u00ed a to n\u00e1s nut\u00ed modifikovat webov\u00e9ho klienta nahrazen\u00edm synchronn\u00edch vol\u00e1n\u00ed asynchronn\u00edmi (a odpov\u00eddaj\u00edc\u00edm refaktoringem k\u00f3du). Postupn\u00fd p\u0159echod k asynchronn\u00edmu modelu je d\u00e1n nutnost\u00ed podpory vydan\u00fdch \u0159e\u0161en\u00ed a jejich postupn\u00e9 adaptace.<br \/>\n<br \/>Zdroj: <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.3 - 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\/cs\/blog\/administrirovanie\/pro-veb-klient-1s__trashed\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\/cs\/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\udd47O webov\u00e9m klientu 1C | ProHoster","description":"Jednou z p\u0159\u00edjemn\u00fdch vlastnost\u00ed technologie 1C:Enterprise je to, \u017ee aplika\u010dn\u00ed \u0159e\u0161en\u00ed vyvinut\u00e9 pomoc\u00ed technologie \u0159\u00edzen\u00fdch formul\u00e1\u0159\u016f m\u016f\u017ee b\u00fdt spu\u0161t\u011bno jak v tenk\u00e9m (prov\u00e1d\u011bn\u00e9m) klientu pod Windows, Linux, MacOS.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/32465","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=32465"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/32465\/revisions"}],"predecessor-version":[{"id":173305,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/32465\/revisions\/173305"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/24269"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=32465"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=32465"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=32465"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}