Վեբ հավելվածների ճարտարապետի ուղեցույց՝ որոշելու իրենց Swing/JavaFX հավելվածների ճակատագիրը

Pre-PS: Այս հոդվածը Vaadin-ի պաշտոնական բլոգի բնօրինակ գրառման հարմարեցումն է. https://vaadin.com/blog/technical-erosion-and-java-swing

2018 թվականի մարտին Oracle-ը թողարկեց իր Java Client Roadmap-ի թարմացումը:

Փաստաթուղթը նշանակալի էր, քանի որ այն ընդունում էր սողացող հնությունը, որն ազդում է աշխատասեղանի վրա հիմնված Java տեխնոլոգիաների վրա, ներառյալ Swing, Applets, Web Start և JavaFX::

Ճանապարհային քարտեզի թարմացումը որպես մեղավորներ նշում է անցումը դեպի բջջային հեռախոսի և վեբ-առաջին զարգացմանը, բայց չի մանրամասնում, թե իրականում ինչ է Java աշխատասեղանի տեխնիկական էրոզիան: Այս հոդվածը ուսումնասիրում է տեխնիկական էրոզիան, որն ազդում է մեկ բաղադրիչի վրա, որը դեռևս աջակցվում է Oracle-ի և Java-ում ներառված Swing-ում:

Հենց սկզբից Swing-ի նպատակն է եղել ընդարձակել Java-ի հիմնական գաղափարը՝ «մեկ անգամ գրել, ամենուր գործարկել» դեպի գրաֆիկական հավելվածներ: 1998 թվականին Java 1.2-ով գործարկվելիս Swing-ը դա հասցրեց մեծ հաջողությամբ:

Տեխնիկական էրոզիան մեծ ազդեցություն է ունեցել Swing-ի համար, այնուամենայնիվ, այս էրոզիան ազդում է Swing հավելվածների գործարկման և զարգացման բոլոր կարևոր ասպեկտների վրա:

Սա ներառում է փոխադրելիություն, հետևողական տեսք և զգացողություն ձեռք բերելը, ռեսուրսների սպառման մոդելները, մեկ լեզվով մշակողի փորձը, փոխանցվող ծրագրավորողի հմտությունները և անվճար տեղակայման հնարավորությունը

Դյուրատարություն

1999թ.-ին Swing հավելվածը կարող էր աշխատել գրեթե յուրաքանչյուր գրաֆիկական հաշվողական սարքի վրա՝ առանց վերակազմավորման: Ոչ միայն 32-բիթանոց և ավելի ուշ 64-բիթանոց Windows-ը, այլ նաև Linux-ը, Solaris-ը և ավելի ուշ Mac OS X-ը:

BYOD-ի միտումը, որը սկսվել է 2010-ին և սկսվել է 2012-ին, նշանակում էր, որ ձեռնարկատիրական հավելվածների համար միայն աշխատասեղանի տեսլականն այլևս չի կարող պահպանվել:

Swing-ը չէր աշխատում այս սարքերից շատերի վրա և այսօր դեռ չի աշխատում: Մեր օրերում աշխատասեղաններին բաժին է ընկնում վաճառված սարքերի կեսից պակասը, և Swing-ի օգտակարությունը որպես շարժականության ապահովիչ մեծապես կորցրել է:

Հետևողական մատուցում և պիքսելների վրա հիմնված գրաֆիկա

Swing-ն ի սկզբանե առավելագույնի հասցրեց դյուրատարությունը՝ յուրաքանչյուր ՕՀ-ի յուրաքանչյուր էկրանին հետևողականորեն ցուցադրելով և աշխուժացնելով՝ շնորհիվ միացնելի տեսք և զգացողություն թեմաների:

Swing-ը հասավ դրան՝ մեծապես հենվելով գրաֆիկական պրիմիտիվների և կոորդինատային համակարգի վրա, որը քարտեզագրված էր սարքի հատուկ պիքսելների վրա:

Ժամանակի ընթացքում ստեղծվեցին բարձր DPI էկրաններ, որոնք կարող էին բարձրացնել պատկերի որակը՝ պիքսելները միմյանց ավելի մոտեցնելով: Սա շատ բազմազանություն բերեց օգտագործվող պիքսելների խտությունների միջև, և Swing հավելվածները շատ տարբեր տեսք կունենան՝ կախված օգտագործվող սարքից:

Սրա լուծումը կարող է նշանակել անխիղճ շփոթություն աշխատասեղանի հատուկ կարգավորումների հետ՝ մեծացնելու օգտատիրոջ միջերեսը հատուկ մոնիտորների համար և դարձավ կազմաձևման խնդիր:

Խնդիրն իր կրիտիկական կետին հասավ 2014-ին Java 8-ի հետ, երբ նոր էկրաններն ունեին այնքան բարձր DPI, որ Swing հավելվածները դարձան անօգտագործելի Windows-ում և Linux-ում:

Սա դրդեց Oracle-ին JDK 9-ում HiDPI շտկել, որը կոչվում է JEP 263: Ուղղումը դժվար էր, քանի որ չնայած OpenJDK-ի ավելի քան 50 սխալների շտկմանը, այնուհետև լիարժեք հետևողականություն դեռևս վերստին ձեռք բերված չէ:

Վերևի պատկերը ցույց է տալիս մասշտաբայնության խնդիրը լուծելու մարտահրավերները՝ պահպանելով հետընթաց համատեղելիությունը բնօրինակ պիքսելների վրա հիմնված վարքագծի հետ.

  1. Առանց մասշտաբավորման նմուշում երկու տողերն էլ սկսվում և ավարտվում են ճիշտ նույն y կոորդինատային դիրքերով, բայց մասշտաբով նմուշում 1 հարվածի լայնությամբ գիծն ավելի կարճ է: Միևնույն ժամանակ 2 լայնությամբ գիծը ցուցադրվում է ավելի երկար, երբ մասշտաբը կիրառվում է.
  2. 1 հարվածի լայնությամբ գիծը 50%-ով ավելի հաստ է մասշտաբով, քան առանց;
  3. Scaling-ը դարձնում է JTextField-ի եզրագիծը 50%-ով ավելի բարակ, և ֆոնն արյունահոսում է ձախ կողմի եզրագծից դուրս:

Այսպիսով, JEP 263-ին հաջողվեց տեքստը ընթեռնելի պահել HiDPI էկրանների վրա և ապահովեց Swing-ը օգտագործելի: Թերությունն այն է, որ Swing-ն այժմ անհետևողականորեն ցուցադրվում է նույն հարթակում, քանի որ միայն մասշտաբը որոշիչ գործոն է: Մի շարք ծրագրերի համար, ինչպիսիք են ծրագրային ապահովման ավտոմատացումը և պիքսելների վրա հիմնված փորձարկումը, այս անհամապատասխանությունը խնդրահարույց է:

Իմացեք, թե ինչպես կարող եք տեղափոխել ձեր Swing հավելվածները ժամանակակից վեբ՝ ձեր կոդը վերօգտագործելով այստեղ →:

Ռեսուրսների սպառման հակապատկերներ

Swing հավելվածները սովորաբար ունենում են ռեսուրսների սպառման օրինաչափություններ, որոնք չեն համապատասխանում այսօրվա ՏՏ միջավայրի կարիքներին առնվազն երեք առումներով: Սրանցից յուրաքանչյուրը խոչընդոտ է ստեղծում նորարարության համար:

Առաջինը ծայրամասային սարքերն են: Swing հավելվածները ստեղծվել են որպես աշխատասեղանի առաջին պլանի գործընթացներ աշխատելու համար՝ ուղղակի, արտոնյալ մուտքով դեպի նավահանգիստներ և ծայրամասային սարքեր, ինչպիսիք են ստեղնաշարը և մկնիկը:

Swing-ը չէր սահմանափակվում միայն տվյալների վրա հիմնված բիզնես հավելվածներով, և գրադարանն աջակցում էր բոլոր տեսակի գրաֆիկական օգտագործմանը: Հետևանքն այն է, որ Swing-ը զբաղվում է մկնիկի շարժման իրադարձություններով, որի արդյունքում դաստակի մի քանի շարժումները կարող են հանգեցնել ավելի քան հարյուր իրադարձությունների:

Իրադարձությունների հաղորդագրությունների բարձր թողունակությունը մարտահրավեր է Swing-ը գործարկելու լիարժեք էմուլյացիայի կամ վիրտուալացման կարգավորումներում, որտեղ այս տվյալները պետք է ուղարկվեն ցանցով:

Երկրորդը տվյալներն են: Ձեռնարկությունների կարգավորումներում տվյալների կարիք ունեցող Swing հավելվածները կարող են միանալ տվյալների բազաներին ամբողջ ցանցում, և MVC դիտումները կթարմացվեն տվյալների վերջին թարմացումների հիման վրա:

Swing հավելվածների օպտիմիզացումը ցանկացած տեսակի քեշավորման միջոցով նշանակում էր մեկ բան՝ տվյալներ հասցնել հաճախորդին: Սա կարող էր խնդիր չլիներ ժամանակի բարձր արագությամբ, ցածր լատենտային մալուխային Ethernet ցանցերի համար, բայց քանի որ անլար ցանցերը մեծ ժողովրդականություն են ձեռք բերել, մալուխային կապի ենթադրությունն անվավեր է, և Swing-ի կատարումն ավելի խնդրահարույց է:

Եվ երրորդը տեսանյութն է: Swing-ը չէր օգտագործում վիդեո քարտեր, որոնք թանկ էին և ներառված չէին ձեռնարկությունների աշխատասեղանների մեծ մասում: Փոխարենը, Swing-ն օգտագործեց կրկնակի բուֆերավորում՝ իր էկրանները նկարելով հավելվածի հիշողության բուֆերում գրաֆիկական պարզունակ հրահանգների հաջորդականություններից, որոնք կանչվում էին թարմացումներով:

Այս բուֆերներն այնուհետև պատճենվեցին էկրանին: Միևնույն ժամանակ, վիդեո քարտերը դարձել են շատ ավելի էժան և հասանելի և նույնիսկ հայտնվում են ձեռնարկության հաճախորդների վրա: Այսօրվա աշխատասեղանի վիրտուալացման տեխնոլոգիան ի վիճակի է օգտագործել հաճախորդի վիդեո քարտերը, սակայն Swing հավելվածները չեն ցուցադրվում այնպես, ինչպես սպասում են VDI-ները և վատ են չափվում դրանց ներսում՝ ստեղծելով ևս մեկ խոչընդոտ ընկերությունների համար, որոնք պարզեցնում են իրենց ենթակառուցվածքի կառավարումը:

Մեկ լեզու

Եթե ​​դուք գիտեիք Java-ն, ապա ձեզ հարկավոր չէր սովորել նոր ծրագրավորման լեզու կամ նոր շարահյուսություն՝ Swing-ով GUI հավելվածներ մշակելու համար: SQL-ի մի փոքր իմացությունը բավական էր նաև հավելվածը տվյալների վրա հիմնված և մի շարք տվյալների բազաներ մուտք գործելու համար՝ օգտագործելով JDBC կամ այլ արձանագրություններ:

Այսօր ծրագրավորողներին ավելի հարմար է բազմալեզու նախագծերը, և թե ինչպես կարելի է օբյեկտի վրա հիմնված ծրագրավորումն իր ուժեղ կողմերով համալրել լավագույն դեկլարատիվ լեզուներով, որոնք թույլ են տալիս կատարելագործված մոդելավորում, ըմբռնում և պահպանում:

Ընթացակարգային ծրագրավորումը դեկլարատիվ տարրերով համալրելու այս միտումը տարածում գտավ այլ շրջանակներում, ինչպիսիք են JavaFX-ը, Microsoft-ի WPF-ը և նաև Vaadin-ը: Այս գործիքներն անհասանելի են հիմնական Swing մշակողի համար:

Փոխանցելի մշակողի հմտություններ

Եթե ​​ունեիք Swing-ի հետ հավելված մշակելու փորձ և դառնայիք Certified Java Developer և կիրառեիք MVC որպես լավագույն պրակտիկա, ապա գաղափարն այն էր, որ դուք կունենաք այլ ընկերությունների Swing հավելվածները պահպանելու համար անհրաժեշտ հմտություններ:

Swing-ի հետ կապված խնդիրն այն է, որ այն ընդհանուր է, և Swing-ը հարմար է խաղ, բիզնես հավելված կամ վիճակագրական հավելված մշակելու համար:

Սա նաև նշանակում է, որ Swing-ը կատարելապես հարմար չէ որևէ հատուկ հավելված մշակելու համար, և ժամանակի ընթացքում ընկերությունները մշակել են գրադարաններ՝ հարմարեցնելու և ընդլայնելու Swing շրջանակը տիրույթի հատուկ մաքսային API-ներով:

Մենք տեսել ենք ծրագրային ապահովման ընկերություններ, որոնք գործում են ազգային կամ արդյունաբերական մակարդակով, որոնք սպասարկում են Swing ծրագրավորողներին տիրույթի հատուկ ընդլայնումներով: Բազմաթիվ տարբերակներով, Swing ծրագրավորողներն ունեն շատ ավելի քիչ հեշտությամբ փոխանցվող հմտությունների հավաքածուներ, որոնք աշխատում են բարդ հավելվածների համար, քան ենթադրվում էր Java-ի և MVC օրինաչափությունների վրա սկզբնական շեշտադրումը:

Ազատ հասանելի և տեղակայելի

Երբ Swing-ը թողարկվեց, այն ամենը, ինչ անհրաժեշտ էր մշակելու և գործարկելու համար, ներկառուցված էր Java-ի Standard Edition JDK-ում: Հավանաբար, ձեր աշխատասեղանն ուներ բոլոր այն գործիքները, որոնք ձեզ անհրաժեշտ էին, որպեսզի սկսեք գոնե պատահականորեն մշակել, փորձարկել և գործարկել Swing հավելվածը:

Ձեր հավելվածները մարդկանց աշխատասեղաններում տեղադրելը հեշտ էր Web Start-ի միջոցով, և դուք նույնիսկ կարող եք Swing-ը գործարկել զննարկիչում՝ Applets-ն օգտագործելիս: Այսօր այս ամենը վերացել է. «Ստանդարտ հրատարակություն» հասկացությունը դադարեցված է, Web Start-ը և Applets-ն այժմ հնացած կամ կոտրված են:

Սեղանի օպերացիոն համակարգերն անցել են sandbox webstore-ի հայեցակարգին, այնպես որ Swing հավելվածների բաշխումը, որոնք հիմնված են նախապես տեղադրված Java Runtime Environments-ի վրա, այժմ խնդիր է, և այսօր այն ստեղծելու համար գործիքներ գտնելը վճռականություն է պահանջում:

Եզրակացություն

Java Client Roadmap-ում Oracle-ը խոստացել է աջակցել Swing-ին առնվազն մինչև 2026 թվականը: Այդ ամսաթիվը կարող է բավականին հեռու թվալ ապագայում, սակայն Java Swing-ի տեխնիկական էրոզիան ստիպում է Swing-ի գոյություն ունեցող հավելվածների տեղափոխումը շատ ավելի հրատապ, քան պաշտոնական աջակցության ժամանակացույցերը: կառաջարկի.

Քանի որ դիմումների միգրացիոն նախագծերը հաճախ տևում են մի քանի տարի, խելամիտ է սկսել գնահատումը ավելի շուտ, քան ուշ:

Անկախ նրանից, թե թվայնացման արդյունքում բերված բիզնեսի նոր հնարավորություններից առավելագույնս օգտվելով, թե ծախսերի խնայողության հասնելու համար ապագա ապացուցված ճարտարապետության վրա համախմբելով, Swing-ն օգտագործող ընկերությունները շուտով պետք է նախաձեռնություններ սկսեն՝ ուսումնասիրելու առկա տարբերակները:

Իմացեք, թե ինչպես կարող եք տեղափոխել ձեր Swing հավելվածները ժամանակակից վեբ՝ ձեր կոդը վերօգտագործելով այստեղ →: