{"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\/hu\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","title":{"rendered":"A 1C webkliense","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Az 1C: V\u00e1llalat egyik kellemes jellemz\u0151je, hogy a kezel\u0151form\u00e1k technol\u00f3gi\u00e1j\u00e1val k\u00e9sz\u00fclt alkalmaz\u00e1s, amely futtathat\u00f3 v\u00e9kony (kliens) kliensk\u00e9nt Windows, Linux, MacOS X rendszereken, valamint webklientk\u00e9nt 5 b\u00f6ng\u00e9sz\u0151 alatt \u2013 Chrome, Internet Explorer, Firefox, Safari, Edge \u2013 mindez a program forr\u00e1sk\u00f3dj\u00e1nak megv\u00e1ltoztat\u00e1sa n\u00e9lk\u00fcl. S\u0151t, a v\u00e9kony kliensben \u00e9s a b\u00f6ng\u00e9sz\u0151ben az alkalmaz\u00e1s k\u00fclseje \u00e9s m\u0171k\u00f6d\u00e9se gyakorlatilag azonos.<br \/>\nTal\u00e1ld meg a 10 k\u00fcl\u00f6nbs\u00e9get (a kattint\u00e1s alatt 2 k\u00e9p):<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nA v\u00e9kony kliens ablaka Linuxon:<\/p>\n<p><img decoding=\"async\" alt=\"A 1C webkliense\" src=\"\/wp-content\/uploads\/2019\/04\/6a836d01f80f447302e04d1827d5eebb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUgyanez az ablak a webklienseben (Chrome b\u00f6ng\u00e9sz\u0151ben):<\/p>\n<p><img decoding=\"async\" alt=\"A 1C webkliense\" src=\"\/wp-content\/uploads\/2019\/04\/1cab8bdf0d9d1c9d6601219c3ae6018c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMi\u00e9rt k\u00e9sz\u00edtett\u00fck el a webklienst? Mondhatni, ezt a feladatot az id\u0151 \u00e1ll\u00edtotta el\u00e9nk. R\u00e9g\u00f3ta sz\u00fcks\u00e9gess\u00e9 v\u00e1lt az interneten kereszt\u00fcli munkav\u00e9gz\u00e9s az \u00fczleti alkalmaz\u00e1sok sz\u00e1m\u00e1ra. El\u0151sz\u00f6r lehet\u0151s\u00e9get adtunk az internetes munkav\u00e9gz\u00e9sre a v\u00e9kony kliens\u00fcnk sz\u00e1m\u00e1ra (egy\u00e9bk\u00e9nt n\u00e9h\u00e1ny versenyt\u00e1rsunk itt meg\u00e1llt, m\u00edg m\u00e1sok, \u00e9ppen ellenkez\u0151leg, felhagytak a v\u00e9kony kliens haszn\u00e1lat\u00e1val, \u00e9s csup\u00e1n a webklienst val\u00f3s\u00edtott\u00e1k meg). Mi azonban azt a lehet\u0151s\u00e9get akarjuk ny\u00fajtani felhaszn\u00e1l\u00f3inknak, hogy v\u00e1laszthass\u00e1k azt az \u00fcgyf\u00e9lt\u00edpust, amelyik a legjobban megfelel sz\u00e1mukra.<\/p>\n<p><img decoding=\"async\" alt=\"A 1C webkliense\" src=\"\/wp-content\/uploads\/2019\/04\/345d070d695cfc4854c485148d22d24c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz internetes munkav\u00e9gz\u00e9s lehet\u0151s\u00e9g\u00e9nek hozz\u00e1ad\u00e1sa a v\u00e9kony klienshez egy jelent\u0151s projekt volt, amely a kliens-szerver interakci\u00f3 teljes architekt\u00far\u00e1j\u00e1nak megv\u00e1ltoztat\u00e1s\u00e1val j\u00e1rt. A webkliens l\u00e9trehoz\u00e1sa pedig teljesen \u00faj projekt, amely a null\u00e1r\u00f3l indult.<\/p>\n<h3>L\u00e9pj\u00fcnk \u00e1t a kit\u0171z\u00f6tt feladatra: \u00edrjunk egy XDP mechanizmust SYN cookie-kkal.<\/h3>\n<p>\nTeh\u00e1t a projekt k\u00f6vetelm\u00e9nyei: a webklientnek ugyanazt kell tennie, mint a v\u00e9kony kliens, nevezetesen:<\/p>\n<ol>\n<li>Megjelen\u00edteni a felhaszn\u00e1l\u00f3i fel\u00fcletet<\/li>\n<li>V\u00e9grehajtani a 1C nyelven \u00edrt kliens k\u00f3dot<\/li>\n<\/ol>\n<p>\nA felhaszn\u00e1l\u00f3i fel\u00fclet a 1C-ben vizu\u00e1lis szerkeszt\u0151ben van le\u00edrva, de deklarat\u00edv m\u00f3don, an\u00e9lk\u00fcl, hogy pixel pontosan elhelyezn\u00e9 a elemeket; k\u00f6r\u00fclbel\u00fcl harminc k\u00fcl\u00f6nb\u00f6z\u0151 fel\u00fcleti elem t\u00edpus van haszn\u00e1latban \u2013 gombok, beviteli mez\u0151k (sz\u00f6veges, numerikus, d\u00e1tum\/id\u0151), list\u00e1k, t\u00e1bl\u00e1zatok, grafikonok stb. <\/p>\n<p>A 1C nyelven \u00edrt kliens k\u00f3d tartalmazhat szerverh\u00edv\u00e1sokat, helyi er\u0151forr\u00e1sokkal (f\u00e1jlok stb.) val\u00f3 munk\u00e1t, nyomtat\u00e1st \u00e9s sok egyebet.<\/p>\n<p>A v\u00e9kony kliens (weben val\u00f3 haszn\u00e1lat sor\u00e1n) \u00e9s a webkliensek ugyanazt a webszolg\u00e1ltat\u00e1si k\u00e9szletet haszn\u00e1lj\u00e1k az 1C alkalmaz\u00e1sszerverrel val\u00f3 kommunik\u00e1ci\u00f3hoz. A kliens megval\u00f3s\u00edt\u00e1sa term\u00e9szetesen elt\u00e9r\u0151 \u2013 a v\u00e9kony kliens C++-ban \u00edr\u00f3dott, m\u00edg a webklient JavaScript-ben.<\/p>\n<h3>Egy kis t\u00f6rt\u00e9nelem<\/h3>\n<p>\nA web client project was launched in 2006, with an average team of 5 people participating. At various stages of the project, developers were brought in to implement specific functionality (spreadsheet, diagrams, etc.); generally, these were the same developers who created this functionality in the thin client. This means that the developers rewrote on JavaScript the components they had previously created in C++.<\/p>\n<p>From the very beginning, we rejected the idea of any automatic (even partial) conversion of C++ code from the thin client to JavaScript for the web client due to significant conceptual differences between the two languages; the web client was built on JavaScript from scratch.<\/p>\n<p>In the early iterations of the project, the web client converted client code written in the 1C built-in language directly into JavaScript. The thin client operates differently\u2014code in the 1C built-in language is compiled into bytecode, which is then interpreted on the client side. Eventually, the web client also began to do the same\u2014firstly, this resulted in a performance gain; secondly, it allowed for the unification of the architecture of the thin and web clients.<\/p>\n<p>The first version of the 1C:Enterprise platform with web client support was released in 2009. At that time, the web client supported 2 browsers \u2013 Internet Explorer and Firefox. Initial plans included support for Opera, but due to insurmountable problems at that time with the application closure handlers in Opera (it was impossible to reliably track when the application was closing and perform the disconnection procedure from the 1C application server at that moment), we had to abandon those plans.<\/p>\n<h3>Project Structure<\/h3>\n<p>\nIn total, the 1C:Enterprise platform has 4 projects written in JavaScript:<\/p>\n<ol>\n<li>WebTools \u2013 general libraries used by other projects (we also include here <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Google_Closure_Tools#Closure_Library\">Google Closure Library<\/a><\/noindex>).<\/li>\n<li>Control Element <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000785.htm\">Formatted Document<\/a><\/noindex> (implemented in both JavaScript in the thin client and in the web client)<\/li>\n<li>Control Element <noindex><a rel=\"nofollow\" href=\"https:\/\/wonderland.v8.1c.ru\/blog\/planirovshchik\/\">Scheduler<\/a><\/noindex> (implemented in both JavaScript in the thin client and in the web client)<\/li>\n<li>Web kliens<\/li>\n<\/ol>\n<p>\nThe structure of each project resembles that of Java projects (or .NET projects \u2013 whichever is closer to you); we have namespaces, and each namespace resides in a separate folder. Inside the folder, there are files and classes of the namespace. The web client project contains about 1000 files.<\/p>\n<p>Structurally, the web client is broadly divided into the following subsystems:<\/p>\n<ul>\n<li>Kezelt \u00fcgyf\u00e9lalkalmaz\u00e1s fel\u00fclete\n<ul>\n<li>Az alkalmaz\u00e1s \u00e1ltal\u00e1nos fel\u00fclete (rendszermen\u00fck, panelek)<\/li>\n<li>Kezelt \u0171rlapok fel\u00fclete, amely k\u00f6r\u00fclbel\u00fcl 30 vez\u00e9rl\u0151elemet tartalmaz (gombok, k\u00fcl\u00f6nb\u00f6z\u0151 t\u00edpus\u00fa beviteli mez\u0151k \u2013 sz\u00f6veges, numerikus, d\u00e1tum\/id\u0151 stb., t\u00e1bl\u00e1zatok, list\u00e1k, grafikonok stb.)<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Objektummodell, amely a fejleszt\u0151k sz\u00e1m\u00e1ra el\u00e9rhet\u0151 a kliensen (t\u00f6bb mint 400 t\u00edpus: a kezelt interf\u00e9sz objektummodellje, adatmegjelen\u00edt\u00e9si be\u00e1ll\u00edt\u00e1sok, felt\u00e9teles form\u00e1z\u00e1s stb.)<\/li>\n<li>Be\u00e9p\u00edtett nyelv \u00e9rtelmez\u0151je 1C-hez<\/li>\n<li>B\u00f6ng\u00e9sz\u0151b\u0151v\u00edtm\u00e9nyek (a JavaScript-ben nem t\u00e1mogatott funkci\u00f3khoz haszn\u00e1lj\u00e1k)\n<ul>\n<li>Munka kriptogr\u00e1fi\u00e1val<\/li>\n<li>Munka a f\u00e1jlokkal<\/li>\n<li>K\u00fcls\u0151 komponensek technol\u00f3gi\u00e1ja, amely lehet\u0151v\u00e9 teszi ezek haszn\u00e1lat\u00e1t mind a v\u00e9kony, mind a webkliensben<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<h3>Fejleszt\u00e9si jellemz\u0151k<\/h3>\n<p>\nAz \u00f6sszes fent le\u00edrt megval\u00f3s\u00edt\u00e1sa JavaScript-ben nem egyszer\u0171 feladat. Val\u00f3sz\u00edn\u0171leg a 1C webkliens az egyik legnagyobb kliensoldali alkalmaz\u00e1s, amelyet JavaScript-ben \u00edrtak \u2013 k\u00f6r\u00fclbel\u00fcl 450.000 sor. A webkliens k\u00f3dj\u00e1ban akt\u00edvan alkalmazzuk az objektumorient\u00e1lt megk\u00f6zel\u00edt\u00e9st, amely megk\u00f6nny\u00edti a munka v\u00e9gz\u00e9s\u00e9t egy ilyen nagy projekttel.<\/p>\n<p>A kliens k\u00f3d m\u00e9ret\u00e9nek minimaliz\u00e1l\u00e1sa \u00e9rdek\u00e9ben kezdetben saj\u00e1t elrejt\u0151nket haszn\u00e1ltuk, \u00e9s a 8.3.6 platformverzi\u00f3t\u00f3l (2014 okt\u00f3ber) kezdve a <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Google_Closure_Tools#Closure_Compiler\">Google Closure Compiler-t<\/a><\/noindex>haszn\u00e1ljuk. A haszn\u00e1lat hat\u00e1sa sz\u00e1mokban \u2013 a webkliens keretrendszere az elrejt\u00e9s ut\u00e1n:<\/p>\n<ul>\n<li>Saj\u00e1t elrejt\u0151nk \u2013 1556 kB<\/li>\n<li>Google Closure Compiler \u2013 1073 kB<\/li>\n<\/ul>\n<p>\nA Google Closure Compiler haszn\u00e1lata lehet\u0151v\u00e9 tette sz\u00e1munkra, hogy 30%-kal n\u00f6velj\u00fck a webkliens teljes\u00edtm\u00e9ny\u00e9t a saj\u00e1t elrejt\u0151nkh\u00f6z k\u00e9pest. Ezen k\u00edv\u00fcl 15-25%-kal (b\u00f6ng\u00e9sz\u0151t\u0151l f\u00fcgg\u0151en) cs\u00f6kkent a program \u00e1ltal haszn\u00e1lt mem\u00f3ria mennyis\u00e9ge.<\/p>\n<p>A Google Closure Compiler nagyon j\u00f3l m\u0171k\u00f6dik az objektumorient\u00e1lt k\u00f3dokkal, ez\u00e9rt a webkliens eset\u00e9ben a hat\u00e9konys\u00e1ga maxim\u00e1lis. A Closure Compiler t\u00f6bb j\u00f3t tesz sz\u00e1munkra:<\/p>\n<ul>\n<li>Statikus t\u00edpusellen\u0151rz\u00e9s a projekt \u00f6ssze\u00e1ll\u00edt\u00e1s\u00e1nak f\u00e1zis\u00e1ban (azt biztos\u00edtva, hogy k\u00f3dunkat JSDoc annot\u00e1ci\u00f3kkal fedi le). Ennek eredm\u00e9nyek\u00e9nt egy statikus t\u00edpussal rendelkez\u0151 rendszer \u00e1ll el\u0151, amely nagyon k\u00f6zel \u00e1ll a C++-hoz. Ez seg\u00edt a projekt ford\u00edt\u00e1s\u00e1nak f\u00e1zis\u00e1ban nagy sz\u00e1zal\u00e9k\u00fa hib\u00e1t kisz\u0171rni.<\/li>\n<li>A k\u00f3d m\u00e9ret\u00e9nek cs\u00f6kkent\u00e9se rejt\u00e9s r\u00e9v\u00e9n<\/li>\n<li>Sz\u00e1mos optimaliz\u00e1l\u00e1s a v\u00e9grehajtott k\u00f3d eset\u00e9ben, p\u00e9ld\u00e1ul:\n<ul>\n<li>inline helyettes\u00edt\u00e9sek funkci\u00f3k. A JavaScript-ben a funkci\u00f3k h\u00edv\u00e1sa meglehet\u0151sen k\u00f6lts\u00e9ges m\u0171velet, \u00e9s az inline helyettes\u00edt\u00e9sek gyakran haszn\u00e1lt kisebb met\u00f3dusok eset\u00e9ben jelent\u0151sen felgyors\u00edtj\u00e1k a k\u00f3d m\u0171k\u00f6d\u00e9s\u00e9t.<\/li>\n<li>Konstansok sz\u00e1ml\u00e1l\u00e1sa a ford\u00edt\u00e1si l\u00e9p\u00e9sben. Ha a kifejez\u00e9s egy konstansra t\u00e1maszkodik, akkor a konstans t\u00e9nyleges \u00e9rt\u00e9ke ker\u00fcl beilleszt\u00e9sre.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\nWebkliensek fejleszt\u00e9si k\u00f6rnyezetek\u00e9nt a WebStorm-ot haszn\u00e1ljuk.<\/p>\n<p>A k\u00f3d elemz\u00e9s\u00e9re haszn\u00e1ljuk <noindex><a rel=\"nofollow\" href=\"http:\/\/www.sonarqube.org\/\">SonarQube<\/a><\/noindex>, ahov\u00e1 integr\u00e1ljuk a statikus k\u00f3dellen\u0151rz\u0151ket. Az elemz\u0151k seg\u00edts\u00e9g\u00e9vel nyomon k\u00f6vetj\u00fck a k\u00f3dmin\u0151s\u00e9g roml\u00e1s\u00e1t JavaScript-ben, \u00e9s igyeksz\u00fcnk elker\u00fclni azt.<\/p>\n<p><img decoding=\"async\" alt=\"A 1C webkliense\" src=\"\/wp-content\/uploads\/2019\/04\/886fe89a8c12d29d940b6b59316ea627.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Milyen feladatokat oldottunk\/oldunk meg<\/h3>\n<p>\nA projekt megval\u00f3s\u00edt\u00e1sa sor\u00e1n sz\u00e1mos \u00e9rdekes feladattal szembes\u00fclt\u00fcnk, amelyeket meg kellett oldanunk.<\/p>\n<h4>Adatcsere a szerverrel \u00e9s az ablakok k\u00f6z\u00f6tt<\/h4>\n<p>\nVannak olyan helyzetek, amikor a forr\u00e1sk\u00f3d obfuszk\u00e1l\u00e1sa akad\u00e1lyozhatja a rendszer m\u0171k\u00f6d\u00e9s\u00e9t. A v\u00e9grehajt\u00e1sra v\u00e1r\u00f3 k\u00f3dban az obfuszk\u00e1l\u00e1s miatt a funkci\u00f3k \u00e9s param\u00e9terek nevei elt\u00e9rhetnek azokt\u00f3l, amelyeket a mi v\u00e9grehajtott k\u00f3dunk elv\u00e1r. Az k\u00fcls\u0151 k\u00f3d sz\u00e1munkra a k\u00f6vetkez\u0151:<\/p>\n<ul>\n<li>K\u00f3d, amely a szervert\u0151l \u00e9rkezik adatszerkezetek form\u00e1j\u00e1ban<\/li>\n<li>K\u00f3d egy m\u00e1sik alkalmaz\u00e1sablakb\u00f3l<\/li>\n<\/ul>\n<p>\nAz obfuszk\u00e1l\u00e1s elker\u00fcl\u00e9se \u00e9rdek\u00e9ben a szerverrel val\u00f3 kommunik\u00e1ci\u00f3 sor\u00e1n a @expose c\u00edmk\u00e9t haszn\u00e1ljuk:<\/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>\nAz obfuszk\u00e1l\u00e1s elker\u00fcl\u00e9se \u00e9rdek\u00e9ben pedig a m\u00e1sik ablakokkal val\u00f3 kommunik\u00e1ci\u00f3n\u00e1l \u00fagynevezett export\u00e1lt interf\u00e9szeket (interf\u00e9szek, amelyek minden met\u00f3dusa export\u00e1lt) alkalmazunk.<\/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>Haszn\u00e1latban volt a Virtual DOM, miel\u0151tt elterjedt volna)<\/h4>\n<p>\nMint minden olyan fejleszt\u0151, aki \u00f6sszetett web UI-val foglalkozik, gyorsan r\u00e1j\u00f6tt\u00fcnk, hogy a DOM nem ide\u00e1lis a dinamikus felhaszn\u00e1l\u00f3i interf\u00e9sz kezel\u00e9s\u00e9re. Szinte azonnal megval\u00f3s\u00edtottuk a Virtual DOM anal\u00f3gj\u00e1t a UI-val val\u00f3 munka optimaliz\u00e1l\u00e1s\u00e1ra. Az esem\u00e9nyek feldolgoz\u00e1sa sor\u00e1n az \u00f6sszes DOM-m\u00f3dos\u00edt\u00e1st a mem\u00f3ri\u00e1ban t\u00e1roljuk, \u00e9s csak az \u00f6sszes m\u0171velet befejez\u00e9se ut\u00e1n alkalmazzuk az \u00f6sszegy\u0171jt\u00f6tt v\u00e1ltoz\u00e1sokat a DOM-f\u00e1nak.<\/p>\n<h4>A webkliensek teljes\u00edtm\u00e9ny\u00e9nek optimaliz\u00e1l\u00e1sa<\/h4>\n<p>\nAnnak \u00e9rdek\u00e9ben, hogy a webkliensek gyorsabban m\u0171k\u00f6djenek, a b\u00f6ng\u00e9sz\u0151 be\u00e9p\u00edtett lehet\u0151s\u00e9geit (CSS, stb.) maxim\u00e1lisan kihaszn\u00e1ljuk. \u00cdgy az alkalmaz\u00e1s minden \u0171rlapj\u00e1n elhelyezked\u0151 parancssor kiz\u00e1r\u00f3lag a b\u00f6ng\u00e9sz\u0151 eszk\u00f6zeivel, dinamikus CSS-alap\u00fa megjelen\u00edt\u00e9ssel k\u00e9sz\u00fcl.<\/p>\n<p><img decoding=\"async\" alt=\"A 1C webkliense\" src=\"\/wp-content\/uploads\/2019\/04\/116261ca79218eaa2bee9a4f5104092b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Tesztel\u00e9s<\/h4>\n<p>\nFunkcion\u00e1lis tesztel\u00e9shez \u00e9s teljes\u00edtm\u00e9ny tesztel\u00e9shez saj\u00e1t fejleszt\u00e9s\u0171 eszk\u00f6zt haszn\u00e1lunk (Java \u00e9s C++ nyelven), valamint egy tesztcsomagot, amely alapja <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Selenium\">Selenium<\/a><\/noindex>.<\/p>\n<p>Eszk\u00f6z\u00fcnk univerz\u00e1lis \u2013 szinte b\u00e1rmilyen asztali program tesztel\u00e9s\u00e9re alkalmas, ez\u00e9rt haszn\u00e1lhat\u00f3 mind a v\u00e9kony kliens, mind a webkliens tesztel\u00e9s\u00e9re. Az eszk\u00f6z r\u00f6gz\u00edti a felhaszn\u00e1l\u00f3 cselekedeteit, aki elind\u00edtotta az \u201e1C\u201d alkalmaz\u00e1st, egy forgat\u00f3k\u00f6nyv f\u00e1jlba. Ek\u00f6zben a k\u00e9perny\u0151 munkater\u00fclete k\u00e9peinek \u2013 referencia k\u00e9pek \u2013 r\u00f6gz\u00edt\u00e9se is megt\u00f6rt\u00e9nik. Az \u00faj verzi\u00f3k webkliens\u00e9nek ellen\u0151rz\u00e9sekor a forgat\u00f3k\u00f6nyvek felhaszn\u00e1l\u00f3i r\u00e9szv\u00e9tel n\u00e9lk\u00fcl j\u00e1tsz\u00f3dnak le. Ha a k\u00e9perny\u0151 k\u00e9p \u00e9s a referencia b\u00e1rmely l\u00e9p\u00e9sn\u00e9l elt\u00e9r, a teszt megbukik, ezt k\u00f6vet\u0151en a min\u0151s\u00e9gellen\u0151r vizsg\u00e1latot folytat \u2013 ez hiba vagy a rendszer viselked\u00e9s\u00e9nek tervezett megv\u00e1ltoz\u00e1sa. Tervezett viselked\u00e9s eset\u00e9n a referenci\u00e1k automatikusan \u00fajakkal helyettes\u00edt\u0151dnek.<\/p>\n<p>Az eszk\u00f6z emellett az alkalmaz\u00e1sok teljes\u00edtm\u00e9ny\u00e9t 25 milliszekundum pontoss\u00e1ggal m\u00e9ri. Bizonyos esetekben a forgat\u00f3k\u00f6nyv r\u00e9szeit cikluss\u00e1 tessz\u00fck (p\u00e9ld\u00e1ul t\u00f6bb alkalommal megism\u00e9telj\u00fck a rendel\u00e9s lead\u00e1s\u00e1t) a v\u00e9grehajt\u00e1si id\u0151 degrad\u00e1ci\u00f3j\u00e1nak elemz\u00e9s\u00e9hez. Minden m\u00e9rt eredm\u00e9ny napl\u00f3z\u00e1sra ker\u00fcl az elemz\u00e9shez.<\/p>\n<p><img decoding=\"async\" alt=\"A 1C webkliense\" src=\"\/wp-content\/uploads\/2019\/04\/058bab976becf6fd38b2ec668492043b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Az eszk\u00f6z\u00fcnk tesztel\u00e9s\u00e9re \u00e9s a tesztelt alkalmaz\u00e1sra<\/b><\/p>\n<p>Eszk\u00f6z\u00fcnk \u00e9s a Selenium kieg\u00e9sz\u00edtik egym\u00e1st; p\u00e9ld\u00e1ul ha egy gomb helye megv\u00e1ltozik egy k\u00e9perny\u0151n \u2013 a Selenium ezt nem biztos, hogy nyomon k\u00f6veti, de az eszk\u00f6z\u00fcnk \u00e9szlelni fogja, mivel pixelr\u0151l pixelre \u00f6sszehasonl\u00edtja a k\u00e9perny\u0151k\u00e9pet a referencia k\u00e9ppel. Az eszk\u00f6z k\u00e9pes az eg\u00e9r vagy billenty\u0171zet bemenet\u00e9nek feldolgoz\u00e1s\u00e1val kapcsolatos probl\u00e9m\u00e1kat is \u00e9szlelni, mivel ezeket id\u00e9z\u0151jelben ism\u00e9tli.<\/p>\n<p>Mindk\u00e9t eszk\u00f6z\u00f6n (a mi\u00e9nken \u00e9s a Seleniumon) a tipikus munkafolyamat forgat\u00f3k\u00f6nyveit futtatj\u00e1k a alkalmaz\u00e1sainkb\u00f3l. A tesztek automatikusan elindulnak az \u201e1C:Enterprise\u201d platform napi \u00f6ssze\u00e1ll\u00edt\u00e1sa ut\u00e1n. Ha a forgat\u00f3k\u00f6nyvek v\u00e9grehajt\u00e1si sebess\u00e9ge lelassul (az el\u0151z\u0151 \u00f6ssze\u00e1ll\u00edt\u00e1shoz k\u00e9pest), vizsg\u00e1latot v\u00e9gz\u00fcnk \u00e9s megsz\u00fcntetj\u00fck a lassul\u00e1s ok\u00e1t. Egyszer\u0171 krit\u00e9riumunk van \u2013 az \u00faj \u00f6ssze\u00e1ll\u00edt\u00e1snak nem szabad lassabban m\u0171k\u00f6dnie, mint az el\u0151z\u0151.<\/p>\n<p>A lassul\u00e1si incidensek vizsg\u00e1lat\u00e1hoz a fejleszt\u0151k k\u00fcl\u00f6nb\u00f6z\u0151 eszk\u00f6z\u00f6ket haszn\u00e1lnak; javar\u00e9szt <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 Kiad\u00e1s<\/a><\/noindex> a v\u00e1llalat gy\u00e1rt\u00e1sa <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Dynatrace\">DynaTrace<\/a><\/noindex>. A probl\u00e9m\u00e1s m\u0171velet v\u00e9grehajt\u00e1s\u00e1nak napl\u00f3z\u00e1sa megt\u00f6rt\u00e9nik az el\u0151z\u0151 \u00e9s az \u00faj verzi\u00f3ban, majd a napl\u00f3kat elemzik. Ebben az esetben az egyes m\u0171veletek v\u00e9grehajt\u00e1s\u00e1nak id\u0151tartama (ezredm\u00e1sodpercben) nem mindig d\u00f6nt\u0151 t\u00e9nyez\u0151 lehet \u2013 a b\u00f6ng\u00e9sz\u0151ben id\u0151nk\u00e9nt h\u00e1tt\u00e9rfolyamatok indulnak, mint p\u00e9ld\u00e1ul a szemetes \u00fcr\u00edt\u00e9se, amelyek befoly\u00e1solhatj\u00e1k a funkci\u00f3k v\u00e9grehajt\u00e1si idej\u00e9t \u00e9s torz\u00edthatj\u00e1k a k\u00e9pet. A relev\u00e1nsabb param\u00e9terek ebben az esetben a v\u00e9grehajtott JavaScript utas\u00edt\u00e1sok sz\u00e1ma, a DOM-ra vonatkoz\u00f3 atomikus m\u0171veletek sz\u00e1ma stb. Ha az \u00faj verzi\u00f3ban ugyanazon forgat\u00f3k\u00f6nyvben az utas\u00edt\u00e1sok\/m\u0171veletek sz\u00e1ma megn\u00f6vekedett \u2013 ez szinte mindig a teljes\u00edtm\u00e9ny cs\u00f6kken\u00e9s\u00e9t jelenti, amelyet ki kell jav\u00edtani.<\/p>\n<p>A teljes\u00edtm\u00e9ny cs\u00f6kken\u00e9s\u00e9nek egyik oka lehet az is, hogy a Google Closure Compiler valamilyen okb\u00f3l nem tudta elv\u00e9gezni a f\u00fcggv\u00e9ny inline-helyettes\u00edt\u00e9s\u00e9t (p\u00e9ld\u00e1ul mert a f\u00fcggv\u00e9ny rekurz\u00edv vagy virtu\u00e1lis). Ebben az esetben pr\u00f3b\u00e1ljuk jav\u00edtani a helyzetet a forr\u00e1st k\u00f3d \u00e1t\u00edr\u00e1s\u00e1val.<\/p>\n<h3>B\u00f6ng\u00e9sz\u0151b\u0151v\u00edtm\u00e9nyek<\/h3>\n<p>\nAbban az esetben, ha az alkalmaz\u00e1si megold\u00e1snak olyan funkci\u00f3ra van sz\u00fcks\u00e9ge, ami nincs a JavaScriptben, b\u00f6ng\u00e9sz\u0151b\u0151v\u00edtm\u00e9nyeket haszn\u00e1lunk:<\/p>\n<ul>\n<li>f\u00e1jlok kezel\u00e9s\u00e9hez<\/li>\n<li>kriptogr\u00e1fi\u00e1hoz<\/li>\n<li>munk\u00e1ja <noindex><a rel=\"nofollow\" href=\"http:\/\/v8.1c.ru\/overview\/Term_000000545.htm\">k\u00fcls\u0151 komponensekkel<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nB\u00f6ng\u00e9sz\u0151b\u0151v\u00edtm\u00e9nyeink k\u00e9t r\u00e9szb\u0151l \u00e1llnak. Az els\u0151 r\u00e9sze az, amit b\u00f6ng\u00e9sz\u0151b\u0151v\u00edtm\u00e9nynek h\u00edvnak (jellemz\u0151en JavaScriptben \u00edrt b\u0151v\u00edtm\u00e9nyek Chrome \u00e9s Firefox sz\u00e1m\u00e1ra), amelyek interakci\u00f3ba l\u00e9pnek a m\u00e1sodik r\u00e9szzel \u2014 egy bin\u00e1ris b\u0151v\u00edtm\u00e9nnyel, amely a sz\u00fcks\u00e9ges funkci\u00f3t val\u00f3s\u00edtja meg. Meg kell eml\u00edteni, hogy 3 verzi\u00f3t \u00edrunk a bin\u00e1ris b\u0151v\u00edtm\u00e9nyekb\u0151l \u2013 Windows, Linux \u00e9s MacOS alatt. A bin\u00e1ris b\u0151v\u00edtm\u00e9ny a 1C: V\u00e1llalkoz\u00e1s platform r\u00e9sz\u00e9t k\u00e9pezi, \u00e9s a 1C alkalmaz\u00e1sszerver\u00e9n tal\u00e1lhat\u00f3. Az els\u0151 h\u00edv\u00e1skor a webklienb\u0151l a kliens sz\u00e1m\u00edt\u00f3g\u00e9pre t\u00f6lt\u0151dik le, \u00e9s telep\u00fcl a b\u00f6ng\u00e9sz\u0151be.<\/p>\n<p>Safari haszn\u00e1latakor a b\u0151v\u00edtm\u00e9nyeink NPAPI-t haszn\u00e1lnak, Internet Explorer eset\u00e9n pedig az ActiveX technol\u00f3gi\u00e1t. <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Microsoft_Edge\">Microsoft Edge<\/a><\/noindex> jelenleg nem t\u00e1mogatja a b\u0151v\u00edtm\u00e9nyeket, ez\u00e9rt a webklien korl\u00e1toz\u00e1sokkal m\u0171k\u00f6dik.<\/p>\n<h3>Tov\u00e1bbi fejleszt\u00e9s<\/h3>\n<p>\nA fejleszt\u0151csapat feladatainak egy csoportja a webkliens funkci\u00f3inak tov\u00e1bbi fejleszt\u00e9se. A webkliens funkci\u00f3inak meg kell egyeznie a v\u00e9kony kliens\u00e9vel, minden \u00faj funkci\u00f3t egyszerre kell megval\u00f3s\u00edtani mind a v\u00e9kony, mind a webkliensben.<\/p>\n<p>A tov\u00e1bbi feladatok k\u00f6z\u00e9 tartozik az architekt\u00fara fejleszt\u00e9se, a refaktor\u00e1l\u00e1s, a teljes\u00edtm\u00e9ny \u00e9s megb\u00edzhat\u00f3s\u00e1g n\u00f6vel\u00e9se. P\u00e9ld\u00e1ul az egyik ir\u00e1ny a szinkron munkam\u00f3dr\u00f3l a aszinkron munkam\u00f3dra val\u00f3 \u00e1t\u00e1ll\u00e1s. Jelenleg a webkliens egy r\u00e9sze szinkron modellekre \u00e9p\u00fcl a kiszolg\u00e1l\u00f3val val\u00f3 kapcsolattart\u00e1s sor\u00e1n. Az aszinkron modell mostan\u00e1ban egyre relev\u00e1nsabb\u00e1 v\u00e1lik a b\u00f6ng\u00e9sz\u0151kben (\u00e9s nem csak ott), ami arra k\u00e9nyszer\u00edt minket, hogy m\u00f3dos\u00edtsuk a webklienset az\u00e1ltal, hogy a szinkron h\u00edv\u00e1sokat aszinkron h\u00edv\u00e1sokra cser\u00e9lj\u00fck (\u00e9s ennek megfelel\u0151en refaktor\u00e1ljuk a k\u00f3dot). Az aszinkron modellre val\u00f3 fokozatos \u00e1tt\u00e9r\u00e9s sz\u00fcks\u00e9gess\u00e9g\u00e9t az adja, hogy t\u00e1mogassuk a m\u00e1r megjelent megold\u00e1sokat \u00e9s fokozatosan alak\u00edtsuk azokat.<br \/>\n<br \/>Forr\u00e1s: <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\/hu\/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=\"hu_HU\" \/>\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\/hu\/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\udd47A 1C webkliensr\u0151l | ProHoster","description":"A 1C:Enterprise technol\u00f3gia egyik kellemes jellemz\u0151je, hogy az ir\u00e1ny\u00edtott form\u00e1k technol\u00f3gi\u00e1j\u00e1val k\u00e9sz\u00fclt alkalmaz\u00e1s megold\u00e1s futtathat\u00f3 a v\u00e9kony (v\u00e9grehajthat\u00f3) kliensben Windows, Linux \u00e9s MacOS oper\u00e1ci\u00f3s rendszeren.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/pro-veb-klient-1s__trashed","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/32465","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=32465"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/32465\/revisions"}],"predecessor-version":[{"id":173305,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/32465\/revisions\/173305"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/24269"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=32465"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=32465"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=32465"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}