Alexey Grachev: Go Frontend

Kyiv Go Meetup مئی 2018:

Alexey Grachev: Go Frontend

منتظم: - سب کو سلام! یہاں ہونے کا شکریہ! آج ہمارے پاس دو سرکاری اسپیکر ہیں - لیوشا اور وانیا۔ اگر ہمارے پاس کافی وقت ہے تو دو اور ہوں گے۔ پہلا اسپیکر الیکسی گراچیف ہے، وہ ہمیں گوفر جے ایس کے بارے میں بتائے گا۔

Alexey Grachev (اس کے بعد - AG): - میں گو ڈویلپر ہوں، اور میں گو میں ویب سروسز لکھتا ہوں۔ کبھی کبھی آپ کو فرنٹ اینڈ سے نمٹنا پڑتا ہے، کبھی کبھی آپ کو دستی طور پر اس میں داخل ہونا پڑتا ہے۔ میں گو آن دی فرنٹ اینڈ میں اپنے تجربے اور تحقیق کے بارے میں بات کرنا چاہتا ہوں۔

افسانہ یہ ہے: پہلے ہم اس بارے میں بات کریں گے کہ ہم Go کو فرنٹ اینڈ پر کیوں چلانا چاہتے ہیں، پھر ہم بات کریں گے کہ یہ کیسے کیا جا سکتا ہے۔ دو طریقے ہیں - ویب اسمبلی اور گوفر جے ایس۔ آئیے دیکھتے ہیں کہ ان حلوں کی کیا حیثیت ہے اور کیا کیا جا سکتا ہے۔

فرنٹ اینڈ میں کیا خرابی ہے؟

کیا سب اس بات سے متفق ہیں کہ فرنٹ اینڈ کے ساتھ سب کچھ ٹھیک ہے؟

Alexey Grachev: Go Frontend

کیا کافی ٹیسٹ نہیں ہیں؟ سست تعمیر؟ ماحولیاتی نظام؟ ٹھیک.

فرنٹ اینڈ کے بارے میں، مجھے وہ اقتباس پسند ہے جو فرنٹ اینڈ ڈویلپرز میں سے ایک نے اپنی کتاب میں کہا تھا:

Alexey Grachev: Go Frontend

جاوا اسکرپٹ میں ٹائپ سسٹم نہیں ہے۔ اب میں ان مسائل کا نام دوں گا جن کا مجھے اپنے کام کے دوران سامنا ہوا اور بتاؤں گا کہ ان کو کیسے حل کیا جاتا ہے۔

عام طور پر ٹائپ سسٹم کو Javasript میں شاید ہی ٹائپ سسٹم کہا جا سکتا ہے - ایسی لائنیں ہیں جو آبجیکٹ کی قسم کی نشاندہی کرتی ہیں، لیکن درحقیقت اس کا اقسام سے کوئی تعلق نہیں ہے۔ یہ مسئلہ TypeScript (Javasript میں ایک اضافہ) اور Flow (جاوا اسکرپٹ میں ایک جامد قسم کا چیکر) میں حل ہوتا ہے۔ دراصل، فرنٹ اینڈ پہلے ہی جاوا اسکرپٹ میں خراب قسم کے سسٹم کے مسئلے کو حل کرنے کے مقام پر پہنچ چکا ہے۔

Alexey Grachev: Go Frontend

براؤزر میں اس طرح کی کوئی معیاری لائبریری نہیں ہے - براؤزر میں کچھ بلٹ ان اشیاء اور "جادو" فنکشن موجود ہیں۔ لیکن جاوا اسکرپٹ میں ایسی کوئی معیاری لائبریری نہیں ہے۔ یہ مسئلہ پہلے ہی ایک بار jQuery کے ذریعہ حل کیا گیا تھا (ہر ایک نے jQuery کو تمام پروٹو ٹائپس، مددگاروں، فنکشنز کے ساتھ استعمال کیا جن کی کام کرنے کی ضرورت تھی)۔ اب ہر کوئی لوڈاش استعمال کرتا ہے:

Alexey Grachev: Go Frontend

کال بیک جہنم۔ میرے خیال میں ہر ایک نے تقریباً 5 سال پہلے جاوا اسکرپٹ کوڈ دیکھا تھا، اور یہ کال بیکس کی ناقابل یقین پیچیدگی کے "نوڈل" کی طرح لگتا تھا۔ اب یہ مسئلہ حل ہو گیا ہے (ES-15 یا ES-16 کے اجراء کے ساتھ)، جاوا اسکرپٹ میں وعدے شامل کیے گئے ہیں اور ہر کوئی تھوڑی دیر کے لیے آسان سانس لے سکتا ہے۔

Alexey Grachev: Go Frontend

جب تک پرومیس ہیل نہیں پہنچتا... میں نہیں جانتا کہ فرنٹ اینڈ انڈسٹری کس طرح چلتی ہے، لیکن وہ ہمیشہ اپنے آپ کو کسی عجیب جنگل میں لے جاتے ہیں۔ ہم وعدوں پر بھی جہنم واصل ہوئے۔ پھر ہم نے ایک نیا قدیم - async/await شامل کرکے اس مسئلے کو حل کیا:

Alexey Grachev: Go Frontend

مطابقت پذیری کا مسئلہ حل ہو گیا ہے۔ Async/await مختلف زبانوں میں کافی مقبول قدیم ہے۔ Python اور دوسروں کے پاس یہ نقطہ نظر ہے - یہ بہت اچھا ہے۔ مشکل حل ہو گئی.

کونسا مسئلہ حل نہیں ہوتا؟ فریم ورک کی تیزی سے بڑھتی ہوئی پیچیدگی، ماحولیاتی نظام کی پیچیدگی اور خود پروگرام۔

Alexey Grachev: Go Frontend

  • جاوا اسکرپٹ کا نحو تھوڑا عجیب ہے۔ ہم سب ایک صف اور کسی چیز اور دیگر لطیفوں کو شامل کرنے کے مسائل کو جانتے ہیں۔
  • جاوا اسکرپٹ ملٹی پیراڈائم ہے۔ یہ اب ایک خاص طور پر دبانے والا نظام ہے جب ماحولیاتی نظام بہت بڑا ہے:
    • ہر کوئی مختلف انداز میں لکھتا ہے - کچھ ساختی طور پر لکھتے ہیں، کچھ عملی طور پر لکھتے ہیں، مختلف ڈویلپر مختلف طریقوں سے لکھتے ہیں۔
    • جب آپ مختلف پیکجوں کا استعمال کرتے ہیں تو مختلف پیکجوں سے، مختلف نمونے؛
    • Javasript میں فنکشنل پروگرامنگ کے ساتھ بہت "تفریح" ہے - rambda لائبریری نمودار ہوئی اور اب کوئی بھی اس لائبریری میں لکھے گئے پروگرام نہیں پڑھ سکتا۔

  • یہ سب ماحولیاتی نظام پر بڑا اثر ڈالتا ہے، اور یہ ناقابل یقین حد تک بڑھ گیا ہے۔ پیکیجز ایک دوسرے سے مطابقت نہیں رکھتے ہیں: کچھ وعدوں پر مبنی ہیں، کچھ async/await پر مبنی ہیں، کچھ کال بیکس پر مبنی ہیں۔ وہ بھی مختلف پیرایہ میں لکھتے ہیں!
  • اس سے پروجیکٹ کو برقرار رکھنا مشکل ہو جاتا ہے۔ اگر آپ کوڈ نہیں پڑھ سکتے ہیں تو بگ تلاش کرنا مشکل ہے۔

ویب اسمبلی کیا ہے؟

موزیلا فاؤنڈیشن اور کئی دوسری کمپنیوں کے بہادر لوگ ویب اسمبلی جیسی چیز لے کر آئے۔ یہ کیا ہے؟

Alexey Grachev: Go Frontend

  • یہ ایک ورچوئل مشین ہے جو براؤزر میں بنائی گئی ہے جو بائنری فارمیٹ کو سپورٹ کرتی ہے۔
  • بائنری پروگرام وہاں پہنچ جاتے ہیں اور تقریباً مقامی طور پر عمل میں آتے ہیں، یعنی براؤزر کو ہر بار جاوا اسکرپٹ کوڈ کے تمام "نوڈلز" کو پارس کرنے کی ضرورت نہیں ہوتی ہے۔
  • تمام براؤزرز نے حمایت کا اعلان کیا ہے۔
  • چونکہ یہ بائی کوڈ ہے، اس لیے آپ کسی بھی زبان کے لیے کمپائلر لکھ سکتے ہیں۔
  • چار بڑے براؤزرز پہلے ہی ویب اسمبلی سپورٹ کے ساتھ بھیج چکے ہیں۔
  • ہم جلد ہی Go میں مقامی حمایت کی توقع کر رہے ہیں۔ یہ نیا فن تعمیر پہلے ہی شامل کیا جا چکا ہے: GOARCH=wasm GOOS=js (جلد ہی)۔ اب تک، جیسا کہ میں سمجھتا ہوں، یہ فعال نہیں ہے، لیکن ایک بیان ہے کہ یہ یقینی طور پر گو میں ہوگا۔

اب کیا کیا جائے؟ گوفر جے ایس

اگرچہ ہمارے پاس ویب اسمبلی کی حمایت نہیں ہے، گوفر جے ایس جیسا ایک ٹرانسپلر موجود ہے۔

Alexey Grachev: Go Frontend

  • گو کوڈ کو "خالص" جاوا اسکرپٹ میں منتقل کیا جاتا ہے۔
  • تمام براؤزرز میں چلتا ہے - کوئی نئی خصوصیات نہیں ہیں جو صرف جدید براؤزرز کے ذریعہ سپورٹ کی جاتی ہیں (یہ وینیلا جے ایس ہے، جو کسی بھی چیز پر چلتا ہے)۔
  • گو کے پاس موجود تقریباً ہر چیز کے لیے سپورٹ موجود ہے، بشمول گوروٹینز اور چینلز... ہر وہ چیز جس سے ہمیں پیار ہے اور بہت کچھ جانتے ہیں۔
  • تقریباً پوری معیاری لائبریری سپورٹ کی جاتی ہے، سوائے ان پیکجوں کے جن کو براؤزر میں سپورٹ کرنا کوئی معنی نہیں رکھتا: syscall، net تعاملات (ایک نیٹ/http کلائنٹ ہے، لیکن کوئی سرور نہیں، اور کلائنٹ کو XMLHttpRequest کے ذریعے ایمولیٹ کیا گیا ہے)۔ عام طور پر، پوری معیاری لائبریری دستیاب ہے - یہاں یہ براؤزر میں ہے، یہاں Go کی stdlib ہے، جو ہمیں پسند ہے۔
  • گو میں پورا پیکیج ایکو سسٹم، تمام تھرڈ پارٹی سلوشنز (ٹیمپلیٹنگ وغیرہ) کو GopherJS کا استعمال کرتے ہوئے مرتب کیا جا سکتا ہے اور براؤزر میں چلایا جا سکتا ہے۔

GopherJS حاصل کرنا بہت آسان ہے - یہ صرف ایک باقاعدہ Go پیکیج ہے۔ ہم حاصل کرتے ہیں، اور ہمارے پاس ایپلی کیشن بنانے کے لیے GopherJS کمانڈ ہے:

Alexey Grachev: Go Frontend

یہ اتنی چھوٹی ہیلو دنیا ہے...

Alexey Grachev: Go Frontend

...ایک باقاعدہ Go پروگرام، ایک باقاعدہ معیاری لائبریری fmt پیکیج اور Binding Js براؤزر API تک پہنچنے کے لیے۔ Println آخر کار کنسول لاگ میں تبدیل ہو جائے گا اور براؤزر "Hello gophers" لکھے گا! یہ بہت آسان ہے: ہم GopherJS بناتے ہیں – ہم اسے براؤزر میں لانچ کرتے ہیں – سب کچھ کام کرتا ہے!

آپ کے پاس اس وقت کیا ہے؟ پابندیاں

Alexey Grachev: Go Frontend

تمام مشہور js فریم ورک کے لیے پابندیاں ہیں:

  • JQuery;
  • Angular.js;
  • بڑے ڈیٹا کے ساتھ پلاٹ بنانے اور کام کرنے کے لیے D3.js؛
  • React.js;
  • VueJS;
  • یہاں تک کہ الیکٹران کے لیے بھی سپورٹ موجود ہے (یعنی، ہم پہلے ہی الیکٹران پر ڈیسک ٹاپ ایپلی کیشنز لکھ سکتے ہیں)؛
  • اور سب سے مزے کی چیز WebGL ہے (ہم مکمل گرافک ایپلی کیشنز بنا سکتے ہیں، بشمول 3D گرافکس، موسیقی اور تمام اشیاء کے ساتھ گیمز)؛
  • اور تمام مشہور جاوا اسکرپٹ فریم ورکس اور لائبریریوں کے لیے بہت سی دوسری پابندیاں۔

فریم ورک

  1. خاص طور پر GopherJS - Vecty کے لیے پہلے سے ہی ایک ویب فریم ورک تیار کیا گیا ہے۔ یہ React.js کا ایک مکمل اینالاگ ہے، لیکن GopherJS کی تفصیلات کے ساتھ صرف Go میں تیار کیا گیا ہے۔
  2. گیم بیگز ہیں (حیرت!) مجھے دو سب سے زیادہ مقبول ملے:
    • اینگو
    • ایبٹین۔

میں آپ کو کچھ مثالیں دکھاؤں گا کہ یہ کیسا لگتا ہے اور آپ Go میں پہلے سے کیا لکھ سکتے ہیں:

Alexey Grachev: Go Frontend

یا یہ آپشن (مجھے 3D شوٹر نہیں مل سکا، لیکن شاید یہ موجود ہو):

Alexey Grachev: Go Frontend

میں کیا پیش کر رہا ہوں؟

اب فرنٹ اینڈ انڈسٹری ایسی حالت میں ہے کہ وہ تمام زبانیں جو پہلے جاوا اسکرپٹ سے پکارتی تھیں وہاں پہنچ جائیں گی۔ اب سب کچھ "ویب اسمبلیوں" میں مرتب کیا جائے گا۔ ہمیں گوفرز کے طور پر وہاں اپنی صحیح جگہ لینے کی کیا ضرورت ہے؟

Alexey Grachev: Go Frontend

گو نے روایتی طور پر یہ فرض کیا ہے کہ یہ ایک سسٹم پروگرامنگ زبان ہے، اور UI کے ساتھ کام کرنے کے لیے عملی طور پر کوئی لائبریری نہیں ہے۔ کچھ ہے، لیکن آدھا لاوارث، آدھا غیر فعال ہے۔

اور اب Go میں UI لائبریریاں بنانے کا ایک اچھا موقع ہے جو GopherJS پر چلے گی! آپ آخر کار اپنا فریم ورک لکھ سکتے ہیں! یہ وہ وقت ہے جب آپ ایک فریم ورک لکھ سکتے ہیں، اور یہ سب سے پہلے میں سے ایک ہو گا اور جلد ہی اپنایا جائے گا، اور آپ ایک ستارہ ہوں گے (اگر یہ ایک اچھا فریم ورک ہے)۔

آپ بہت سارے مختلف پیکجوں کو جو پہلے سے ہی گو ایکو سسٹم میں موجود ہیں براؤزر کی خصوصیات کے مطابق ڈھال سکتے ہیں (مثال کے طور پر، ٹیمپلیٹ انجن)۔ وہ پہلے ہی کام کریں گے، آپ آسان پابندیاں بنا سکتے ہیں تاکہ آپ آسانی سے مواد کو براہ راست براؤزر میں رینڈر کر سکیں۔ اس کے علاوہ، آپ مثال کے طور پر، ایک ایسی سروس بنا سکتے ہیں جو سرور اور فرنٹ اینڈ پر ایک ہی کوڈ کا استعمال کرتے ہوئے ایک ہی چیز کو رینڈر کر سکتی ہے - وہ سب کچھ جو فرنٹ اینڈ ڈویلپرز کو پسند ہے (صرف گو میں)۔

آپ ایک کھیل لکھ سکتے ہیں! صرف تفریح ​​کے لئے...

میں بس یہی کہنا چاہتا تھا۔

Alexey Grachev: Go Frontend

آپ کے سوالات

سوال (جسے بعد میں Q کہا جاتا ہے): - کیا میں Go یا Js میں لکھتا ہوں؟

AG: – آپ روٹینز، چینلز، ڈھانچے، ایمبیڈنگ لکھتے ہیں – Go میں سب کچھ... آپ کسی ایونٹ کو سبسکرائب کرتے ہیں، وہاں ایک فنکشن پاس کرتے ہیں۔

پر: - تو میں "ننگے" Js میں لکھتا ہوں؟

AG: – نہیں، آپ گو میں گو میں لکھتے ہیں اور براؤزر API سے جڑتے ہیں (API تبدیل نہیں ہوا ہے)۔ آپ اپنی بائنڈنگ لکھ سکتے ہیں تاکہ چینل کو پیغامات بھیجے جائیں - یہ مشکل نہیں ہے۔

پر: - موبائل کے بارے میں کیا ہے؟

AG: - میں نے یقینی طور پر دیکھا: کورڈووا پیچ کے لئے پابندیاں ہیں جو جے ایس چلاتا ہے۔ مقامی ردعمل میں - مجھے نہیں معلوم؛ شاید وہاں ہے، شاید نہیں (مجھے خاص طور پر دلچسپی نہیں تھی)۔ N-go گیم انجن دونوں موبائل ایپلیکیشنز – iOS اور Android دونوں کو سپورٹ کرتا ہے۔

پر: - ویب اسمبلی کے بارے میں سوال۔ کمپریشن اور "زپنگ" کے باوجود، زیادہ سے زیادہ جگہ لی جا رہی ہے... کیا ہم سامنے کی دنیا کو اس طرح سے اور زیادہ نہیں ماریں گے؟

AG: – ویب اسمبلی ایک بائنری فارمیٹ ہے، اور بائنری بطور ڈیفالٹ ٹیکسٹ سے زیادہ حتمی ریلیز میں نہیں ہو سکتی... آپ رن ٹائم کی طرف کھینچے جاتے ہیں، لیکن یہ ویسا ہی ہے جیسا کہ معیاری جاوا اسکرپٹ لائبریری کو گھسیٹنا ہے جب یہ موجود نہیں ہے، لہذا ہم کچھ لوڈاش استعمال کریں۔ مجھے نہیں معلوم کہ لوڈاش کتنا لیتا ہے۔

پر: - ظاہر ہے رن ٹائم سے کم...

AG: - "خالص" جاوا اسکرپٹ میں؟

پر: - جی ہاں. بھیجنے سے پہلے ہم اسے کمپریس کرتے ہیں...

AG: - لیکن یہ متن ہے... عام طور پر، ایک میگا بائٹ بہت زیادہ لگتا ہے، لیکن بس اتنا ہے (آپ کے پاس پورا رن ٹائم ہے)۔ اس کے بعد، آپ اپنی کاروباری منطق لکھیں، جو آپ کی بائنری میں 1% اضافہ کرے گی۔ اب تک میں اس کو فرنٹ اینڈ کو مارتے ہوئے نہیں دیکھ رہا ہوں۔ مزید برآں، ویب اسمبلی واضح وجہ سے جاوا اسکرپٹ سے زیادہ تیزی سے کام کرے گی - اسے پارس کرنے کی ضرورت نہیں ہے۔

پر: - یہ اب بھی ایک متنازعہ نکتہ ہے... ابھی تک "واسما" (ویب اسمبلی) کا کوئی حوالہ نافذ نہیں ہوا ہے تاکہ کوئی غیر واضح طور پر فیصلہ کر سکے۔ تصوراتی طور پر، ہاں: ہم سب سمجھتے ہیں کہ بائنری تیز تر ہونا چاہیے، لیکن اسی V8 کا موجودہ نفاذ بہت موثر ہے۔

AG: - جی ہاں.

پر: - وہاں کی تالیف واقعی بہت عمدہ کام کرتی ہے اور یہ حقیقت نہیں ہے کہ کوئی بڑا فائدہ ہوگا۔

AG: - ویب اسمبلی بھی بڑے لوگوں نے بنائی ہے۔

پر: - مجھے لگتا ہے کہ ویب اسمبلی کا فیصلہ کرنا اب بھی مشکل ہے۔ اب کئی سالوں سے بات چیت ہو رہی ہے، لیکن چند حقیقی کامیابیاں ہیں جنہیں محسوس کیا جا سکتا ہے۔

AG: - شاید. ہم دیکھیں گے.

پر: - ہمیں بیک اینڈ پر مسائل نہیں ہیں... شاید ہمیں ان مسائل کو فرنٹ اینڈ پر چھوڑ دینا چاہئے؟ وہاں کیوں جائیں؟

AG: - ہمیں فرنٹ لائن ورکرز کا عملہ رکھنا ہے۔

کچھ اشتہارات 🙂

ہمارے ساتھ رہنے کے لیے آپ کا شکریہ۔ کیا آپ کو ہمارے مضامین پسند ہیں؟ مزید دلچسپ مواد دیکھنا چاہتے ہیں؟ آرڈر دے کر یا دوستوں کو مشورہ دے کر ہمارا ساتھ دیں، کلاؤڈ VPS برائے ڈویلپرز $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 2 گنا سستا؟ صرف یہاں 2x 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 سے! کے بارے میں پڑھا انفراسٹرکچر کارپوریشن کو کیسے بنایا جائے۔ ڈیل R730xd E5-2650 v4 سرورز کے استعمال کے ساتھ کلاس جس کی مالیت 9000 یورو ہے؟

ماخذ: www.habr.com

نیا تبصرہ شامل کریں