1С вэб клиентийн тухай

1C: Enterprise технологийн сайхан шинж чанаруудын нэг нь удирддаг маягтын технологийг ашиглан боловсруулсан програмын шийдлийг Windows, Linux, MacOS X-д зориулсан нимгэн (гүйцэтгэх боломжтой) клиент болон 5 хөтөчийн вэб клиент болгон ажиллуулах боломжтой юм. Chrome, Internet Explorer, Firefox, Safari, Edge, энэ бүхэн програмын эх кодыг өөрчлөхгүйгээр. Нэмж дурдахад, нимгэн клиент болон хөтөч дээрх програм нь гаднаасаа ажилладаг бөгөөд бараг адилхан харагдаж байна.
10 ялгааг ол (зүссэн доор 2 зураг):

Линукс дээрх нимгэн клиент цонх:

1С вэб клиентийн тухай

Вэб клиент дээрх ижил цонх (Chrome хөтөч дээр):

1С вэб клиентийн тухай

Бид яагаад вэб үйлчлүүлэгч хийсэн бэ? Нэг ёсондоо өрөвдмөөр хэлэхэд цаг хугацаа бидэнд ийм даалгавар тавьсан. Интернетээр ажиллах нь бизнесийн хэрэглээний урьдчилсан нөхцөл байсаар ирсэн. Нэгдүгээрт, бид нимгэн үйлчлүүлэгчдээ зориулж интернетээр ажиллах чадварыг нэмсэн (зарим өрсөлдөгчид тэнд зогссон; бусад нь эсрэгээрээ нимгэн үйлчлүүлэгчээ орхиж, вэб клиентийг хэрэгжүүлэхээр хязгаарласан). Бид хэрэглэгчиддээ өөрт тохирсон үйлчлүүлэгчийн сонголтыг сонгох боломжийг олгохоор шийдсэн.

1С вэб клиентийн тухай

Нимгэн клиент дээр вэб дээр суурилсан чадавхийг нэмэх нь үйлчлүүлэгч-серверийн архитектурыг бүрэн өөрчилсөн том төсөл байв. Вэб клиент үүсгэх нь эхнээс нь эхлэн цоо шинэ төсөл юм.

Асуудлын тодорхойлолт

Тиймээс төслийн шаардлага: вэб үйлчлүүлэгч нь нимгэн клиенттэй ижил зүйлийг хийх ёстой, тухайлбал:

  1. Хэрэглэгчийн интерфейсийг харуулах
  2. 1С хэл дээр бичигдсэн үйлчлүүлэгчийн кодыг ажиллуул

1С дахь хэрэглэгчийн интерфэйсийг визуал засварлагчаар тайлбарласан боловч элементүүдийн пикселээр пикселийн зохион байгуулалтгүйгээр тунхаглалтайгаар; Гурав орчим төрлийн интерфейсийн элементүүдийг ашигладаг - товчлуурууд, оруулах талбарууд (текст, тоо, огноо/цаг), жагсаалт, хүснэгт, график гэх мэт.

1С хэл дээрх үйлчлүүлэгчийн код нь серверийн дуудлага, дотоод нөөцтэй ажиллах (файл гэх мэт), хэвлэх гэх мэт зүйлсийг агуулж болно.

Нимгэн клиент (вэбээр ажиллах үед) болон вэб клиент хоёулаа 1С програмын сервертэй холбогдохын тулд ижил төрлийн вэб үйлчилгээг ашигладаг. Үйлчлүүлэгчийн хэрэгжилт нь мэдээжийн хэрэг өөр өөр байдаг - нимгэн клиент нь C++ дээр, вэб клиент нь JavaScript дээр бичигдсэн байдаг.

Түүх бага

Вэб клиент төсөл нь 2006 онд эхэлсэн бөгөөд (дунджаар) 5 хүний ​​бүрэлдэхүүнтэй. Төслийн тодорхой үе шатанд тодорхой функцийг (хүснэгтийн баримт бичиг, диаграмм гэх мэт) хэрэгжүүлэхийн тулд хөгжүүлэгчид оролцсон; Дүрмээр бол эдгээр нь нимгэн клиент дээр энэ функцийг хийсэн ижил хөгжүүлэгчид байсан. Тэдгээр. хөгжүүлэгчид өмнө нь C++ хэл дээр үүсгэсэн бүрэлдэхүүн хэсгүүдээ JavaScript дээр дахин бичсэн.

Бид анхнаасаа C++ нимгэн клиент кодыг JavaScript вэб клиент болгон автоматаар (бүр хэсэгчлэн) хөрвүүлэх санааг хоёр хэлний хооронд хүчтэй ойлголтын зөрүүтэй байсан тул татгалзсан; вэб клиентийг эхнээс нь JavaScript дээр бичсэн.

Төслийн эхний давталтуудад вэб үйлчлүүлэгч нь 1С хэл дээрх үйлчлүүлэгчийн кодыг шууд JavaScript болгон хөрвүүлсэн. Нимгэн үйлчлүүлэгч өөр өөрөөр ажилладаг - суулгасан 1С хэл дээрх кодыг байт код болгон хөрвүүлж, дараа нь энэ байт кодыг үйлчлүүлэгч дээр тайлбарладаг. Дараа нь вэб үйлчлүүлэгч үүнийг хийж эхэлсэн - нэгдүгээрт, энэ нь гүйцэтгэлийн өсөлтийг өгсөн, хоёрдугаарт, нимгэн болон вэб үйлчлүүлэгчдийн архитектурыг нэгтгэх боломжтой болсон.

Вэб үйлчлүүлэгчийн дэмжлэгтэй 1С: Enterprise платформын анхны хувилбар 2009 онд гарсан. Тухайн үед вэб клиент нь Internet Explorer болон Firefox гэсэн 2 хөтчийг дэмждэг байсан. Анхны төлөвлөгөөнд Opera-ийн дэмжлэг багтсан байсан боловч тухайн үед Opera дахь програмыг хаах зохицуулагчтай холбоотой шийдвэрлэх боломжгүй асуудлаас болж (програм хаагдаж байгааг 100% итгэлтэйгээр хянах боломжгүй байсан бөгөөд тэр үед холболтыг таслах процедурыг гүйцэтгэсэн. 1С програмын сервер) эдгээр төлөвлөгөөнөөс татгалзах шаардлагатай болсон.

Төслийн бүтэц

Нийтдээ 1C: Enterprise платформ нь JavaScript дээр бичигдсэн 4 төсөлтэй.

  1. WebTools - бусад төслүүдэд ашигладаг хуваалцсан номын сангууд (бид бас үүнд орно Google Closure Library).
  2. Хяналтын элемент Форматлагдсан баримт (нимгэн клиент болон вэб клиент дээр JavaScript дээр хэрэгжсэн)
  3. Хяналтын элемент Хуваарьлагч (нимгэн клиент болон вэб клиент дээр JavaScript дээр хэрэгжсэн)
  4. Вэб үйлчлүүлэгч

Төсөл бүрийн бүтэц нь Java төслүүдийн бүтэцтэй төстэй (эсвэл .NET төслүүд - аль нь ойрхон байна); Бидэнд нэрийн орон зай байгаа бөгөөд нэрийн талбар бүр тусдаа хавтсанд байна. Хавтас дотор файлууд болон нэрийн орон зайн ангиуд байдаг. Вэб клиент төсөлд 1000 орчим файл байдаг.

Бүтцийн хувьд вэб клиент нь дараахь дэд системүүдэд хуваагддаг.

  • Удирдагдсан үйлчлүүлэгчийн програмын интерфейс
    • Ерөнхий хэрэглээний интерфейс (системийн цэс, самбар)
    • Удирддаг маягтуудын интерфейс, үүнд 30 орчим удирдлага (товчлуур, төрөл бүрийн оролтын талбарууд - текст, тоо, огноо/цаг гэх мэт, хүснэгт, жагсаалт, график гэх мэт) орно.

  • Үйлчлүүлэгч дээрх хөгжүүлэгчдийн ашиглах боломжтой объектын загвар (нийт 400 гаруй төрөл: удирддаг интерфейсийн объектын загвар, өгөгдлийн байршлын тохиргоо, нөхцөлт загвар гэх мэт)
  • Суурилуулсан 1С хэлний орчуулагч
  • Хөтөчийн өргөтгөлүүд (JavaScript-д дэмжигддэггүй функцэд ашиглагддаг)
    • Криптографтай ажиллах
    • Файлтай ажиллах
    • Гадны бүрэлдэхүүн хэсгүүдийн технологи нь тэдгээрийг нимгэн болон вэб клиентүүдэд ашиглах боломжийг олгодог

Хөгжлийн онцлог

Дээр дурдсан бүх зүйлийг JavaScript дээр хэрэгжүүлэх нь тийм ч хялбар биш юм. Магадгүй 1С вэб клиент нь JavaScript дээр бичигдсэн хамгийн том клиент талын програмуудын нэг юм - ойролцоогоор 450.000 мөр. Бид вэб клиентийн кодонд объект хандалтат хандлагыг идэвхтэй ашигладаг бөгөөд энэ нь ийм том төсөлтэй ажиллахад хялбар болгодог.

Үйлчлүүлэгчийн кодын хэмжээг багасгахын тулд бид эхлээд өөрийн бүдэгрүүлэгчийг ашигласан бөгөөд 8.3.6 платформ хувилбараас (2014 оны XNUMX-р сар) эхлэн ашиглаж эхэлсэн. Google Closure Compiler. Тоогоор ашиглах үр нөлөө - будилсны дараа вэб клиентийн хүрээний хэмжээ:

  • Өөрийн гэсэн бүдүүвч - 1556 кб
  • Google Closure Compiler – 1073 kb

Google Closure Compiler ашиглах нь вэб клиентийн гүйцэтгэлийг өөрсдийнхөө хөрвүүлэгчтэй харьцуулахад 30% сайжруулахад тусалсан. Нэмж дурдахад, програмын ашигласан санах ойн хэмжээ 15-25% (хөтөчөөс хамаарч) буурсан байна.

Google Closure Compiler нь объект хандалтат кодтой маш сайн ажилладаг тул вэб үйлчлүүлэгчийн хувьд үр ашиг нь аль болох өндөр байдаг. Closure Compiler нь бидэнд хэд хэдэн сайн зүйл хийдэг:

  • Төслийг бүтээх үе шатанд статик төрлийг шалгаж байна (бид кодыг JSDoc тэмдэглэгээгээр хамрах эсэхийг баталгаажуулдаг). Үр дүн нь статик бичих бөгөөд C++ хэл дээр бичихтэй маш ойролцоо түвшинд байна. Энэ нь төслийн эмхэтгэлийн үе шатанд гарсан алдааны нэлээд их хувийг авахад тусалдаг.
  • Муухайрах замаар кодын хэмжээг багасгах
  • Гүйцэтгэсэн кодын хэд хэдэн оновчлол, жишээлбэл:
    • Inline функцийн орлуулалт. JavaScript дээр функцийг дуудах нь нэлээд үнэтэй үйлдэл бөгөөд байнга хэрэглэгддэг жижиг аргуудыг дотор нь орлуулах нь кодыг ихээхэн хурдасгадаг.
    • Эмхэтгэх үед тогтмол тоолох. Хэрэв илэрхийлэл нь тогтмолоос хамааралтай бол тогтмолын бодит утгыг түүнд орлуулах болно

Бид WebStorm-ийг вэб үйлчлүүлэгч хөгжүүлэх орчин болгон ашигладаг.

Кодын шинжилгээнд бид ашигладаг SonarQube, бид статик кодын анализаторуудыг нэгтгэдэг. Анализаторыг ашиглан бид JavaScript эх кодын чанар муудаж байгааг хянаж, түүнээс урьдчилан сэргийлэхийг хичээдэг.

1С вэб клиентийн тухай

Бид ямар асуудлуудыг шийдэж байна вэ?

Төслийг хэрэгжүүлэх явцад бид шийдвэрлэх шаардлагатай хэд хэдэн сонирхолтой асуудалтай тулгарсан.

Сервертэй болон цонхны хооронд өгөгдөл солилцох

Эх кодыг бүдгэрүүлэх нь системийн үйл ажиллагаанд саад учруулж болзошгүй нөхцөл байдал байдаг. Вэб үйлчлүүлэгчийн гүйцэтгэх кодын гаднах код нь ойлгомжгүй байдлаас болж бидний гүйцэтгэх кодоос өөр функц болон параметрийн нэртэй байж болно. Бидний гадаад код нь:

  • Өгөгдлийн бүтэц хэлбэрээр серверээс ирж буй код
  • Өөр програмын цонхны код

Сервертэй харилцахдаа эргэлзээ төрүүлэхгүйн тулд бид @expose шошгыг ашигладаг:

/**
 * @constructor
 * @extends {Base.SrvObject}
 */
Srv.Core.GenericException = function ()
{
    /**
     * @type {string}
     * @expose
     */
    this.descr;

    /**
     * @type {Srv.Core.GenericException}
     * @expose
     */
    this.inner;

    /**
     * @type {string}
     * @expose
     */
    this.clsid;

    /**
     * @type {boolean}
     * @expose
     */
    this.encoded;
}

Бусад цонхтой харьцахдаа төөрөгдөлд орохгүйн тулд бид экспортлогдсон интерфейс гэж нэрлэгддэг (бүх аргыг экспортолсон интерфейс) ашигладаг.

/**
 * Экспортируемый интерфейс контрола DropDownWindow
 *
 * @interface
 * @struct
 */
WebUI.IDropDownWindowExp = function(){}

/**
 * Перемещает выделение на 1 вперед или назад
 *
 * @param {boolean} isForward
 * @param {boolean} checkOnly
 * @return {boolean}
 * @expose
 */
WebUI.IDropDownWindowExp.prototype.moveMarker = function (isForward, checkOnly){}

/**
 * Перемещает выделение в начало или конец
 *
 * @param {boolean} isFirst
 * @param {boolean} checkOnly
 * @return {boolean}
 * @expose
 */
WebUI.IDropDownWindowExp.prototype.moveMarkerTo = function (isFirst, checkOnly){}

/**
 * @return {boolean}
 * @expose
 */
WebUI.IDropDownWindowExp.prototype.selectValue = function (){}

Бид Виртуал DOM-г түгээмэл болохоос өмнө ашигласан)

Нарийн төвөгтэй вэб UI-тай харьцдаг бүх хөгжүүлэгчдийн нэгэн адил бид DOM нь динамик хэрэглэгчийн интерфэйстэй ажиллахад тохиромжгүй гэдгийг хурдан ойлгосон. Бараг тэр даруйдаа UI-тай ажиллахыг оновчтой болгохын тулд Virtual DOM-ийн аналогийг хэрэгжүүлсэн. Үйл явдлыг боловсруулах явцад бүх DOM өөрчлөлтүүд санах ойд хадгалагдах бөгөөд зөвхөн бүх үйлдлүүд дууссаны дараа хуримтлагдсан өөрчлөлтүүд нь DOM модонд хэрэглэгдэх болно.

Вэб клиентийг оновчтой болгох

Вэб үйлчлүүлэгчээ илүү хурдан ажиллуулахын тулд бид хөтөчийн стандарт боломжуудыг (CSS гэх мэт) дээд зэргээр ашиглахыг хичээдэг. Тиймээс маягтын командын самбар (програмын бараг бүх хэлбэр дээр байрладаг) CSS дээр суурилсан динамик зохион байгуулалтыг ашиглан зөвхөн хөтчийн хэрэгслийг ашиглан бүтээгдсэн.

1С вэб клиентийн тухай

Тест хийх

Функциональ болон гүйцэтгэлийн туршилтын хувьд бид өмчийн хэрэгсэл (Java болон C++ хэл дээр бичигдсэн), мөн дээр суурилсан тестийн багцыг ашигладаг. селен.

Манай хэрэгсэл нь бүх нийтийнх бөгөөд энэ нь танд бараг ямар ч цонхтой програмыг турших боломжийг олгодог тул нимгэн клиент болон вэб клиентийг хоёуланг нь шалгахад тохиромжтой. Уг хэрэгсэл нь 1С програмын шийдлийг скрипт файл болгон эхлүүлсэн хэрэглэгчийн үйлдлийг бүртгэдэг. Үүний зэрэгцээ дэлгэцийн ажлын талбайн дүрсийг - стандартыг бүртгэдэг. Вэб клиентийн шинэ хувилбаруудыг хянах үед скриптийг хэрэглэгчийн оролцоогүйгээр тоглуулдаг. Дэлгэцийн зураг нь лавлагаатай ямар ч үе шатанд таарахгүй тохиолдолд туршилтыг амжилтгүй гэж тооцдог бөгөөд үүний дараа чанарын мэргэжилтэн энэ нь алдаа эсвэл системийн төлөв байдалд өөрчлөлт орсон эсэхийг тогтоохын тулд шалгалт хийдэг. Төлөвлөсөн зан үйлийн хувьд стандартыг автоматаар шинэ стандартаар солино.

Мөн уг хэрэгсэл нь хэрэглээний гүйцэтгэлийг 25 миллисекунд хүртэлх нарийвчлалтайгаар хэмждэг. Зарим тохиолдолд бид скриптийн хэсгүүдийг давталт хийдэг (жишээ нь, захиалгын оруулгыг хэд хэдэн удаа давтах). Бүх хэмжилтийн үр дүнг дүн шинжилгээ хийх бүртгэлд тэмдэглэнэ.

1С вэб клиентийн тухай
Манай туршилтын хэрэгсэл ба програмыг туршиж байна

Манай хэрэгсэл болон Селен нь бие биенээ нөхдөг; Жишээлбэл, хэрэв дэлгэцийн аль нэгний товчлуур байршлаа өөрчилсөн бол Selenium үүнийг хянахгүй байж магадгүй ч манай хэрэгсэл үүнийг анзаарах болно. дэлгэцийн агшинг стандарттай пикселээр пикселээр нь харьцуулдаг. Энэ хэрэгсэл нь гар эсвэл хулганаас оролтыг боловсруулахтай холбоотой асуудлыг хянах боломжтой, учир нь энэ нь яг үүнийг хуулбарладаг.

Хоёр хэрэгсэл (манай болон Селен) дээрх туршилтууд нь манай хэрэглээний шийдлүүдийн ердийн ажлын хувилбаруудыг ажиллуулдаг. 1С: Enterprise платформыг өдөр бүр бүтээсний дараа тестүүд автоматаар эхэлдэг. Хэрэв скриптүүд удаан байвал (өмнөх хувилбартай харьцуулахад) бид удаашралын шалтгааныг судалж, шийддэг. Бидний шалгуур бол энгийн - шинэ бүтэц нь өмнөхөөсөө удаан ажиллах ёсгүй.

Хөгжүүлэгчид удаашруулсан тохиолдлыг судлахын тулд янз бүрийн хэрэгслийг ашигладаг; голчлон ашигладаг Dynatrace AJAX хэвлэл үйлдвэрлэлийн компани DynaTrace. Өмнөх болон шинэ бүтээн байгуулалтууд дээр асуудалтай үйлдлүүдийн гүйцэтгэлийн бүртгэлийг бүртгэж, дараа нь бүртгэлд дүн шинжилгээ хийнэ. Үүний зэрэгцээ, нэг үйлдлийн гүйцэтгэлийн хугацаа (миллисекундээр) шийдвэрлэх хүчин зүйл биш байж болох юм - хог цуглуулах гэх мэт үйлчилгээний процессуудыг хөтөч дээр үе үе эхлүүлдэг бөгөөд тэдгээр нь функцүүдийн гүйцэтгэх хугацаатай давхцаж, зургийг гажуудуулж болзошгүй юм. Энэ тохиолдолд илүү хамааралтай параметрүүд нь гүйцэтгэсэн JavaScript зааврын тоо, DOM дээрх атомын үйлдлийн тоо гэх мэт байх болно. Хэрэв ижил скрипт дээрх заавар/үйл ажиллагааны тоо шинэ хувилбарт нэмэгдсэн бол энэ нь бараг үргэлж засвар хийх шаардлагатай гүйцэтгэлийн уналт гэсэн үг юм.

Түүнчлэн, гүйцэтгэл буурах шалтгаануудын нэг нь Google Closure Compiler ямар нэг шалтгааны улмаас функцийг доторлогоотой орлуулах боломжгүй байсан (жишээлбэл, функц нь рекурсив эсвэл виртуаль шинж чанартай байдаг) байж болно. Энэ тохиолдолд бид эх кодыг дахин бичих замаар нөхцөл байдлыг засахыг хичээдэг.

Хөтөчийн өргөтгөлүүд

Хэрэглээний шийдэлд JavaScript-д байхгүй функц шаардлагатай үед бид хөтчийн өргөтгөлүүдийг ашигладаг:

Манай өргөтгөлүүд хоёр хэсгээс бүрдэнэ. Эхний хэсэг нь хөтчийн өргөтгөл (ихэвчлэн JavaScript дээр бичсэн Chrome болон Firefox-ийн өргөтгөлүүд) гэж нэрлэгддэг бөгөөд хоёр дахь хэсэгтэй харилцан үйлчилдэг - бидэнд хэрэгтэй функцийг хэрэгжүүлдэг хоёртын өргөтгөл юм. Бид Windows, Linux болон MacOS-д зориулсан хоёртын өргөтгөлийн 3 хувилбарыг бичдэг гэдгийг тэмдэглэх нь зүйтэй. Хоёртын өргөтгөл нь 1С: Enterprise платформын нэг хэсэг болгон нийлүүлэгдсэн бөгөөд 1С програмын сервер дээр байрладаг. Вэб клиентээс анх удаа дуудах үед үүнийг клиентийн компьютерт татаж аваад хөтөч дээр суулгадаг.

Safari дээр ажиллахдаа манай өргөтгөлүүд NPAPI ашигладаг бол Internet Explorer дээр ажиллахдаа ActiveX технологийг ашигладаг. Microsoft Edge өргөтгөлүүдийг хараахан дэмждэггүй тул доторх вэб клиент нь хязгаарлалттай ажилладаг.

Цаашдын хөгжил

Вэб үйлчлүүлэгч хөгжүүлэх багийн нэг ажил бол функцийг цаашид хөгжүүлэх явдал юм. Вэб клиентийн функц нь нимгэн үйлчлүүлэгчийн функцтэй ижил байх ёстой; бүх шинэ функцууд нь нимгэн болон вэб клиентүүдэд нэгэн зэрэг хэрэгждэг.

Бусад ажлуудад архитектурыг хөгжүүлэх, дахин засварлах, гүйцэтгэл, найдвартай байдлыг сайжруулах зэрэг орно. Жишээлбэл, нэг чиглэл бол асинхрон ажлын загвар руу шилжих явдал юм. Вэб клиентийн зарим функцууд одоогоор сервертэй харилцах синхрон загвар дээр суурилагдсан. Асинхрон загвар нь одоо хөтчүүдэд (зөвхөн хөтчүүдэд биш) илүү хамааралтай болж байгаа бөгөөд энэ нь биднийг синхрон дуудлагыг асинхрон дуудлагаар солих (мөн кодыг өөрчлөх) замаар вэб клиентийг өөрчлөхөд хүргэдэг. Асинхрон загварт аажмаар шилжих нь гарсан шийдлүүдийг дэмжих, тэдгээрийг аажмаар дасан зохицох хэрэгцээтэй холбон тайлбарлаж байна.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх