Alexey Grachev: ሂድ Frontend

የኪየቭ ጎ ስብሰባ ሜይ 2018፡-

Alexey Grachev: ሂድ Frontend

እየመራ፡ - ሰላም ሁላችሁም! እዚህ በመሆኖ እናመሰግናለን! ዛሬ ሁለት ኦፊሴላዊ ተናጋሪዎች አሉን - ሊዮሻ እና ቫንያ። በቂ ጊዜ ካገኘን ሁለት ተጨማሪዎች ይኖራሉ. የመጀመሪያው ተናጋሪ Alexey Grachev ነው, እሱ ስለ GopherJS ይነግረናል.

አሌክሲ ግራቼቭ (ከዚህ በኋላ - AG): – እኔ የ Go ገንቢ ነኝ፣ እና በGo ውስጥ የድር አገልግሎቶችን እጽፋለሁ። አንዳንድ ጊዜ ከፊት ለፊት ጋር መገናኘት አለብዎት, አንዳንድ ጊዜ በእጅዎ ውስጥ መግባት አለብዎት. ስለ ልምዴ እና ስለ Go on frontend ምርምር ማውራት እፈልጋለሁ።

አፈ ታሪኩ ይህ ነው-በመጀመሪያ ለምን በግንባሩ ላይ Goን መሮጥ እንደፈለግን እንነጋገራለን, ከዚያ ይህ እንዴት እንደሚደረግ እንነጋገራለን. ሁለት መንገዶች አሉ - የድር ስብሰባ እና GopherJS. የእነዚህ መፍትሄዎች ሁኔታ ምን እንደሆነ እና ምን ማድረግ እንደሚቻል እንይ.

የፊት ገጽታው ምን ችግር አለው?

ሁሉም ነገር ከፊት ለፊት ጋር ጥሩ እንደሆነ ሁሉም ይስማማሉ?

Alexey Grachev: ሂድ Frontend

በቂ ፈተናዎች የሉም? ቀስ ብሎ መገንባት? ሥነ ምህዳር? ጥሩ።

የፊት ግንባርን በተመለከተ ከግንባር አዘጋጆች አንዱ በመጽሃፉ ላይ ያለውን ጥቅስ ወድጄዋለሁ፡-

Alexey Grachev: ሂድ Frontend

ጃቫስክሪፕት አይነት ስርዓት የለውም። አሁን በስራዬ ያጋጠሙኝን ችግሮች ስም ሰጥቼ እንዴት እንደሚፈቱ እገልጻለሁ።

በአጠቃላይ የዓይነት ስርዓት በጃቫስሪፕት ውስጥ ዓይነት ስርዓት ተብሎ ሊጠራ አይችልም - የነገሩን አይነት የሚያመለክቱ መስመሮች አሉ, ግን በእውነቱ ይህ ከአይነቶች ጋር ምንም ግንኙነት የለውም. ይህ ችግር በTyScript (ተጨማሪ ወደ ጃቫስሪፕት) እና ፍሰት (በጃቫስክሪፕት ውስጥ የማይንቀሳቀስ አይነት አረጋጋጭ) ተፈትቷል። እንደ እውነቱ ከሆነ ግንባሩ ቀደም ሲል በጃቫስክሪፕት ውስጥ ያለውን የመጥፎ አይነት ስርዓት ችግር ለመፍታት ደረጃ ላይ ደርሷል.

Alexey Grachev: ሂድ Frontend

በአሳሹ ውስጥ ምንም መደበኛ ቤተ-መጽሐፍት የለም - በአሳሾች ውስጥ አንዳንድ አብሮ የተሰሩ ነገሮች እና “አስማት” ተግባራት አሉ። ነገር ግን በጃቫስክሪፕት ውስጥ እንደዚህ ያለ መደበኛ ቤተ-መጽሐፍት የለም. ይህ ችግር ቀድሞውኑ በ jQuery አንድ ጊዜ ተፈትቷል (ሁሉም ሰው jQueryን ከሁሉም ፕሮቶታይፖች ፣ ረዳቶች ፣ ለመስራት የሚያስፈልጉ ተግባራትን ተጠቅሟል)። አሁን ሁሉም ሰው Lodash ይጠቀማል፡-

Alexey Grachev: ሂድ Frontend

መልሶ ጥሪ ገሃነም. ከ5 ዓመታት በፊት ሁሉም ሰው የጃቫስክሪፕት ኮድን ያየው ይመስለኛል፣ እና ይህ የማይታመን የመልሶ መደወያ ውስብስብነት “ኑድል” ይመስላል። አሁን ይህ ችግር ተፈትቷል (ES-15 ወይም ES-16 በተለቀቀው) ተስፋዎች ወደ ጃቫስክሪፕት ተጨምረዋል እና ሁሉም ሰው ለተወሰነ ጊዜ በቀላሉ መተንፈስ ይችላል።

Alexey Grachev: ሂድ Frontend

Promice ሲኦል እስኪመጣ ድረስ ... የፊት-መጨረሻ ኢንዱስትሪ እንዴት እንደሚያስተዳድር አላውቅም, ነገር ግን ሁልጊዜ እራሳቸውን ወደ እንግዳ ጫካ ይነዳሉ። በተስፋ ቃልም ገሃነምን ማድረግ ችለናል። ከዚያ ይህንን ችግር አዲስ ፕሪሚቲቭ በማከል ፈትነናል - async/wait:

Alexey Grachev: ሂድ Frontend

ያልተመሳሰለው ችግር ተፈቷል. Async/wait በተለያዩ ቋንቋዎች በጣም ታዋቂ ጥንታዊ ነው። Python እና ሌሎችም ይህ አቀራረብ አላቸው - በጣም ጥሩ ነው። ችግሩ ተፈቷል.

ምን ችግር ነው ያልተፈታው? በከፍተኛ ደረጃ እየጨመረ የሚሄደው የማዕቀፎች ውስብስብነት, የስነ-ምህዳሩ ውስብስብነት እና ፕሮግራሞቹ እራሳቸው ናቸው.

Alexey Grachev: ሂድ Frontend

  • የጃቫስክሪፕት አገባብ ትንሽ እንግዳ ነው። ድርድር እና ዕቃ እና ሌሎች ቀልዶችን በመጨመር ችግሮቹን ሁላችንም እናውቃለን።
  • ጃቫ ስክሪፕት ባለብዙ ምሳሌ ነው። ሥርዓተ-ምህዳሩ በጣም ትልቅ በሚሆንበት ጊዜ ይህ በተለይ አፋጣኝ ስርዓት ነው።
    • ሁሉም ሰው በተለያየ ዘይቤ ይጽፋል - አንዳንዶቹ በመዋቅር ይጽፋሉ, አንዳንዶቹ በተግባራዊነት ይጽፋሉ, የተለያዩ ገንቢዎች በተለያየ መንገድ ይጽፋሉ;
    • ከተለያዩ ፓኬጆች, የተለያዩ ፓኬጆችን ሲጠቀሙ የተለያዩ ፓራዲዶች;
    • በጃቫስሪፕት ውስጥ በተግባራዊ ፕሮግራሚንግ ብዙ “አዝናኝ” አለ - ራምዳ ቤተ-መጽሐፍት ታየ እና አሁን ማንም በዚህ ቤተ-መጽሐፍት ውስጥ የተፃፉ ፕሮግራሞችን ማንበብ አይችልም።

  • ይህ ሁሉ በሥርዓተ-ምህዳሩ ላይ ትልቅ ተጽዕኖ ያሳድራል, እና በማይታመን ሁኔታ አድጓል. ጥቅሎቹ እርስ በእርሳቸው የማይጣጣሙ ናቸው: አንዳንዶቹ በተስፋዎች ላይ የተመሰረቱ ናቸው, አንዳንዶቹ በአሲንክ / በመጠባበቅ ላይ የተመሰረቱ ናቸው, አንዳንዶቹ በመልሶ ጥሪዎች ላይ የተመሰረቱ ናቸው. በተለያዩ ምሳሌዎችም ይጽፋሉ!
  • ይህ ፕሮጀክቱን ለመጠገን አስቸጋሪ ያደርገዋል. ኮዱን ማንበብ ካልቻሉ ስህተት ማግኘት ከባድ ነው።

የድር ስብሰባ ምንድን ነው?

ከሞዚላ ፋውንዴሽን የመጡ ጀግኖች እና ሌሎች በርካታ ኩባንያዎች እንደ ዌብ ስብሰባ ያሉ ነገሮችን ይዘው መጡ። ምንድነው ይሄ?

Alexey Grachev: ሂድ Frontend

  • ይህ ሁለትዮሽ ቅርጸቱን የሚደግፍ በአሳሹ ውስጥ የተሰራ ምናባዊ ማሽን ነው።
  • ሁለትዮሽ ፕሮግራሞች እዚያ ይደርሳሉ እና በአገር ውስጥ ይከናወናሉ ፣ ማለትም ፣ አሳሹ ሁል ጊዜ ሁሉንም የጃቫስክሪፕት ኮድ “ኑድል” መተንተን አያስፈልገውም።
  • ሁሉም አሳሾች ድጋፍ ሰጥተዋል።
  • ይህ ባይትኮድ ስለሆነ ለማንኛውም ቋንቋ ማጠናከሪያ መፃፍ ይችላሉ።
  • አራት ዋና አሳሾች አስቀድመው በድር ስብሰባ ድጋፍ ይላካሉ።
  • በቅርቡ በ Go ውስጥ ቤተኛ ድጋፍን እንጠብቃለን። ይህ አዲስ አርክቴክቸር አስቀድሞ ታክሏል፡ GOARCH=wasm GOOS=js (በቅርቡ)። እስካሁን ድረስ እኔ እንደተረዳሁት, ተግባራዊ አይደለም, ነገር ግን በእርግጠኝነት በ Go ውስጥ እንደሚሆን መግለጫ አለ.

አሁን ምን ይደረግ? ጎፈርጄ.ኤስ

ለድር ስብሰባ ድጋፍ ባይኖረንም እንደ GopherJS ያለ ትራንስፓይለር አለ።

Alexey Grachev: ሂድ Frontend

  • ጎ ኮድ ወደ “ንፁህ” ጃቫስክሪፕት ተተርጉሟል።
  • በሁሉም አሳሾች ውስጥ ይሰራል - በዘመናዊ አሳሾች ብቻ የሚደገፉ ምንም አዲስ ባህሪያት የሉም (ይህ ቫኒላ JS ነው, በማንኛውም ነገር ላይ ይሰራል).
  • Go ለያዘው ነገር ሁሉ ማለት ይቻላል፣ ጎሮቲን እና ቻናሎችን ጨምሮ ድጋፍ አለ።
  • በአሳሹ ውስጥ መደገፍ ምንም ትርጉም ከሌለው ከእነዚያ ፓኬጆች በስተቀር ሁሉም መደበኛ ቤተ-መጽሐፍት ማለት ይቻላል ይደገፋሉ: syscall ፣ net interactions (የተጣራ/http ደንበኛ የለም ፣ ግን አገልጋይ የለም ፣ እና ደንበኛው በ XMLHttpRequest ተመስሏል)። በአጠቃላይ ፣ አጠቃላይ መደበኛው ቤተ-መጽሐፍት ይገኛል - እዚህ በአሳሹ ውስጥ ነው ፣ እኛ የምንወደው የ Go's stdlib እዚህ አለ።
  • በ Go ውስጥ ያለው አጠቃላይ የጥቅል ሥነ-ምህዳር፣ ሁሉም የሶስተኛ ወገን መፍትሄዎች (ቴምፕቲንግ፣ ወዘተ) በጎፈርጄኤስ በመጠቀም ሊዘጋጁ እና በአሳሹ ውስጥ ሊሰሩ ይችላሉ።

GopherJS ለማግኘት በጣም ቀላል ነው - እሱ መደበኛ የ Go ጥቅል ነው። ማግኘት እንሄዳለን፣ እና መተግበሪያውን ለመገንባት GopherJS ትእዛዝ አለን።

Alexey Grachev: ሂድ Frontend

ይሄ ትንሽ ሰላም አለም ነው...

Alexey Grachev: ሂድ Frontend

... መደበኛ የሂድ ፕሮግራም፣ መደበኛ መደበኛ ላይብረሪ fmt ጥቅል እና Binding Js አሳሹን ለመድረስ። Println በመጨረሻ ወደ ኮንሶል ሎግ ይቀየራል እና አሳሹ "ሄሎ ጎፈርስ" ይጽፋል! በጣም ቀላል ነው: GopherJS ግንባታን እንሰራለን - በአሳሹ ውስጥ እናስጀምረዋለን - ሁሉም ነገር ይሰራል!

በአሁኑ ጊዜ ምን አለህ? ማሰሪያዎች

Alexey Grachev: ሂድ Frontend

ለሁሉም ታዋቂ js ማዕቀፎች ማሰሪያዎች አሉ፡

  • JQuery;
  • Angular.js;
  • D3.js ለማሴር እና ከትልቅ ውሂብ ጋር ለመስራት;
  • ምላሽ.js;
  • VueJS;
  • ለኤሌክትሮን እንኳን ድጋፍ አለ (ማለትም ፣ ቀድሞውኑ በኤሌክትሮን ላይ የዴስክቶፕ መተግበሪያዎችን መፃፍ እንችላለን) ።
  • እና በጣም አስቂኝ ነገር WebGL ነው (ከ 3-ል ግራፊክስ ፣ ሙዚቃ እና ሁሉም ጥሩ ነገሮች ጋር ጨዋታዎችን ጨምሮ ሙሉ-ግራፊክ መተግበሪያዎችን መስራት እንችላለን);
  • እና ሌሎች ብዙ ማሰሪያዎች ለሁሉም ታዋቂ የጃቫስክሪፕት ማዕቀፎች እና ቤተ-መጻሕፍት።

መዋቅር

  1. አስቀድሞ ለ GopherJS - Vecty የተዘጋጀ የድር ማዕቀፍ አለ። ይህ የተሟላ የReact.js አናሎግ ነው፣ ግን በGo ውስጥ ብቻ ነው የዳበረው፣ ከ GopherJS ልዩ ነገሮች ጋር።
  2. የጨዋታ ቦርሳዎች አሉ (አስገራሚ!). ሁለቱን በጣም ተወዳጅ አግኝቻለሁ፡-
    • ኢንጎ;
    • ኢቢትን።

ምን እንደሚመስል እና አስቀድመው በ Go ውስጥ መጻፍ የሚችሉትን ሁለት ምሳሌዎችን አሳይሃለሁ፡-

Alexey Grachev: ሂድ Frontend

ወይም ይህ አማራጭ (3D ተኳሽ ማግኘት አልቻልኩም፣ ግን ምናልባት ሊኖር ይችላል)

Alexey Grachev: ሂድ Frontend

ምን እያቀረብኩ ነው?

አሁን የፊት-መጨረሻው ኢንዱስትሪ በእንደዚህ ዓይነት ሁኔታ ውስጥ ነው ፣ ከዚህ ቀደም ከጃቫ ስክሪፕት ያለቀሱ ቋንቋዎች ሁሉ ወደዚያ በፍጥነት ይሮጣሉ ። አሁን ሁሉም ነገር ወደ "ድር ስብሰባዎች" ይሰበሰባል. እንደ ጎፈር ያለንን ትክክለኛ ቦታ ለመያዝ ምን ያስፈልገናል?

Alexey Grachev: ሂድ Frontend

ጎ የስርዓት ፕሮግራሚንግ ቋንቋ ነው ብሎ ወስዶታል፣ እና ከUI ጋር ለመስራት ምንም ቤተ-መጻሕፍት የሉትም። የሆነ ነገር አለ, ግን ግማሹ የተተወ ነው, ግማሹ የማይሰራ ነው.

እና አሁን በጎፈርጄኤስ ላይ የሚሰሩ የUI ቤተ-ፍርግሞችን በGo ውስጥ ለመስራት ጥሩ እድል ነው! በመጨረሻም የራስዎን መዋቅር መጻፍ ይችላሉ! ይህ ማዕቀፍ መጻፍ ይችላሉ ጊዜ ነው, እና የመጀመሪያው መካከል አንዱ ይሆናል እና ቀደም ጉዲፈቻ, እና ኮከብ ይሆናል (ጥሩ ማዕቀፍ ከሆነ).

አስቀድመው በ Go ስነ-ምህዳር ውስጥ ያሉትን ብዙ የተለያዩ ፓኬጆችን ከአሳሹ ዝርዝር (ለምሳሌ አብነት ሞተር) ጋር ማስማማት ይችላሉ። እነሱ ቀድሞውኑ ይሰራሉ, በአሳሹ ውስጥ ይዘቱን በቀላሉ ለማቅረብ እንዲችሉ ምቹ ማያያዣዎችን ማድረግ ይችላሉ. በተጨማሪም ፣ ለምሳሌ ፣ በአገልጋዩ ላይ እና በፊት-መጨረሻ ላይ ተመሳሳይ ነገር መስጠት የሚችል አገልግሎት ፣ ተመሳሳይ ኮድ በመጠቀም - የፊት-መጨረሻ ገንቢዎች የሚወዱትን ሁሉ (አሁን በ Go ውስጥ) ማድረግ ይችላሉ ።

ጨዋታ መጻፍ ይችላሉ! ለፈገግታ...

ይህን ነው ለማለት የፈለኩት።

Alexey Grachev: ሂድ Frontend

ጥያቄዎች

ጥያቄ (ከዚህ በኋላ ጥ ይባላል)፡- - በ Go ወይም Js ውስጥ እጽፋለሁ?

AG - የዕለት ተዕለት ተግባራትን ፣ ሰርጦችን ፣ መዋቅሮችን ፣ መክተትን - ሁሉንም ነገር በ Go ውስጥ ይጽፋሉ… ለአንድ ክስተት ደንበኝነት ይመዝገቡ ፣ እዚያ አንድ ተግባር ያስተላልፉ።

AT: - ስለዚህ "እራቁት" Js ውስጥ እጽፋለሁ?

AG – አይ፣ በ Go ውስጥ እንዳለህ ጻፍክ እና ከአሳሹ ኤፒአይ ጋር ተገናኝ (ኤፒአይ አልተቀየረም)። መልዕክቶች ወደ ሰርጡ እንዲላኩ የራስዎን ማያያዣዎች መጻፍ ይችላሉ - አስቸጋሪ አይደለም.

AT: - ስለ ሞባይልስ?

AG – በእርግጠኝነት አየሁ፡ Js ለሚያስኬደው Cordova patch ማሰሪያዎች አሉ። በ React Native - እኔ አላውቅም; ምናልባት ሊኖር ይችላል, ምናልባት ላይሆን ይችላል (በተለይ ፍላጎት አልነበረኝም). የ N-go ጨዋታ ሞተር ሁለቱንም የሞባይል አፕሊኬሽኖች - iOS እና አንድሮይድ ሁለቱንም ይደግፋል።

AT: - ስለ ድር ስብሰባ ጥያቄ. መጭመቂያው እና “ዚፕ” ቢደረግም ብዙ ቦታ እየተወሰደ ነው...የፊተኛውን ዓለም በዚህ መንገድ የበለጠ አንገድለውም?

AG – ድረ-ገጽ መገጣጠም የሁለትዮሽ ፎርማት ነው፣ እና ሁለትዮሽ በነባሪ ከጽሑፍ በላይ በመጨረሻው ልቀት ላይ ሊሆን አይችልም... ወደ Runtime ይሳባሉ፣ ነገር ግን ይህ በሌለበት ጊዜ መደበኛውን የጃቫስክሪፕት ላይብረሪ ከመጎተት ጋር ተመሳሳይ ነው፣ ስለዚህ እኛ አንዳንድ ሎዳሽ ይጠቀሙ . ሎዳሽ ምን ያህል እንደሚወስድ አላውቅም።

AT: - በእርግጥ ከስራ ጊዜ ያነሰ...

AG - በ "ንጹህ" ጃቫስክሪፕት?

AT: - አዎ. ከመላካችን በፊት እንጨምቀዋለን...

AG - ግን ይህ ጽሑፍ ነው ... በአጠቃላይ ሜጋባይት ብዙ ይመስላል, ግን ያ ብቻ ነው (ሙሉውን የሩጫ ጊዜ አለዎት). በመቀጠል የእራስዎን የንግድ ሥራ አመክንዮ ይጽፋሉ, ይህም የእርስዎን ሁለትዮሽ በ 1% ይጨምራል. ይህ ግንባሩን ሲገድል እስካሁን አይታየኝም። ከዚህም በላይ የድረ-ገጽ መገጣጠም ግልጽ በሆነ ምክንያት ከጃቫስክሪፕት በበለጠ ፍጥነት ይሰራል - መተንተን አያስፈልግም.

AT: - ይህ አሁንም አከራካሪ ነጥብ ነው ... አንድ ሰው በማያሻማ ሁኔታ እንዲፈርድ የ "ቫስማ" (የድር ስብሰባ) ምንም ዓይነት ማጣቀሻ እስካሁን የለም. በፅንሰ-ሀሳብ ፣ አዎ: ሁላችንም ሁለትዮሽ ፈጣን መሆን እንዳለበት እንገነዘባለን ፣ ግን የአሁኑ የ V8 ትግበራ በጣም ቀልጣፋ ነው።

AG - አዎ.

AT: - እዚያ ማጠናቀር በጣም ጥሩ ነው የሚሰራው እና ትልቅ ጥቅም ይኖረዋል የሚለው እውነታ አይደለም።

AG - የድረ-ገጽ ስብሰባ እንዲሁ በትልልቅ ሰዎች የተሰራ ነው።

AT: – አሁንም በድር ስብሰባ ላይ መፍረድ ከባድ እንደሆነ ይሰማኛል። አሁን ለብዙ አመታት ውይይቶች ነበሩ, ነገር ግን ሊሰማቸው የሚችሉ ጥቂት እውነተኛ ስኬቶች አሉ.

AG - ምን አልባት. እናያለን.

AT: - በጀርባው ላይ ችግሮች የለብንም ... ምናልባት እነዚህን ችግሮች በግንባሩ ላይ መተው አለብን? ለምን እዚያ መሄድ?

AG - የፊት መስመር ሠራተኞችን ሠራተኞች ማቆየት አለብን።

አንዳንድ ማስታወቂያዎች 🙂

ከእኛ ጋር ስለቆዩ እናመሰግናለን። ጽሑፎቻችንን ይወዳሉ? የበለጠ አስደሳች ይዘት ማየት ይፈልጋሉ? ትእዛዝ በማዘዝ ወይም ለጓደኞች በመምከር ይደግፉን፣ ደመና ቪፒኤስ ለገንቢዎች ከ$4.99, በእኛ ለእርስዎ የተፈለሰፈው ልዩ የመግቢያ ደረጃ አገልጋዮች አናሎግ፡- ስለ VPS (KVM) ሙሉ እውነት E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps ከ$19 ወይንስ እንዴት አገልጋይ መጋራት ይቻላል? (በRAID1 እና RAID10፣ እስከ 24 ኮሮች እና እስከ 40GB DDR4 ድረስ ይገኛል።

በአምስተርዳም ውስጥ በ Equinix Tier IV የመረጃ ማዕከል ውስጥ Dell R730xd 2x ርካሽ? እዚህ ብቻ 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV ከ$199 በኔዘርላንድስ! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ከ$99! ስለ አንብብ የመሠረተ ልማት ኮርፖሬሽን እንዴት እንደሚገነባ ክፍል ጋር Dell R730xd E5-2650 v4 አገልጋዮች ዋጋ 9000 አንድ ሳንቲም ዩሮ?

ምንጭ: hab.com

አስተያየት ያክሉ