আমি কীভাবে gwt সংকলক গতি বাড়িয়ে তুলব?


201

আমরা আমাদের প্রকল্পগুলিতে জিডব্লিউটি ব্যবহারের ভারী ব্যবহার শুরু করি এবং জিডব্লিউটি সংকলকের কর্মক্ষমতা ক্রমশ বিরক্তিকর হয়ে উঠছে।

আমরা হোস্টিং-মোড ব্রাউজারের উপর আরও বেশি জোর দেওয়া সহ সমস্যাটি কমাতে আমাদের কাজের অনুশীলনগুলিতে পরিবর্তন শুরু করতে যাচ্ছি, যা পরবর্তী সময়ে জিডব্লিউটি সংকলক চালনার প্রয়োজনকে পিছনে ফেলেছে, তবে এটি তার নিজস্ব ঝুঁকি নিয়ে আসে, বিশেষতঃ আমরা যা চাই তার চেয়ে অনেক পরে সত্যিকারের ব্রাউজারগুলির সাথে সমস্যাগুলি ধরা না।

আদর্শভাবে, আমরা GWT সংকলকটি নিজেই দ্রুত তৈরি করতে চাই - মোটামুটি ছোট অ্যাপ্লিকেশনটি সংকলন করতে এক মিনিট প্রস্রাব গ্রহণ করছে। তবে, আমরা মোটামুটি নির্বোধ ফ্যাশন যদি সংকলনটি ব্যবহার করি, তাই আমি আশা করি আমরা কিছু দ্রুত এবং সহজ লাভ করতে পারি।

আমরা বর্তমানে পিঁপড়া পিঁপড়া লক্ষ্য থেকে একটি জাভা অ্যাপ্লিকেশন হিসাবে com.google.gwt.dev.Compiler আহ্বান করছি, 256 মিটার সর্বোচ্চ গাদা এবং প্রচুর স্ট্যাক স্পেস সহ। জাভা 6 এর উন্নত পারফরম্যান্সের চেষ্টা করতে এবং সুবিধা পেতে কাঁটা = সত্য এবং সর্বশেষতম জাভা 6 জেআরই ব্যবহার করে এন্টি দ্বারা সংকলকটি চালু করা হয়েছে। আমরা আমাদের প্রধান নিয়ামক শ্রেণিকে অ্যাপ্লিকেশন শ্রেণিপথের সাথে সংকলকটিতে পাস করি এবং এটি চলে যায়।

কিছু অতিরিক্ত গতি পেতে আমরা আর কী করতে পারি? আমরা কী এটি আরও তথ্য দিতে পারি তাই কী করা উচিত তা আবিষ্কার করতে এটি কম সময় ব্যয় করে?

আমি জানি আমরা এটি কেবল একটি ব্রাউজারের জন্য সংকলন করতে বলতে পারি, তবে আমাদের মাল্টি-ব্রাউজারের পরীক্ষা করা দরকার, যাতে এটি বাস্তবিকই কার্যকর নয় not

সমস্ত পরামর্শ এই মুহূর্তে স্বাগত।

উত্তর:


144

আসুন অস্বস্তিকর সত্য দিয়ে শুরু করা যাক: জিডব্লিউটি সংকলনের অভিনয়টি সত্যই লম্পট। আপনি এখানে এবং সেখানে কিছু হ্যাক ব্যবহার করতে পারেন, তবে আপনি উল্লেখযোগ্যভাবে আরও ভাল পারফরম্যান্স পাচ্ছেন না।

আপনি করতে পারেন এমন একটি দুর্দান্ত পারফরম্যান্স হ্যাক হ'ল আপনার নির্দিষ্ট রেখাটি সন্নিবেশ করে কেবল নির্দিষ্ট ব্রাউজারগুলির জন্যই সংকলন করা gwt.xml:

<define-property name="user.agent" values="ie6,gecko,gecko1_8"></define-property>

বা gwt 2.x বাক্য গঠনতে এবং কেবল একটি ব্রাউজারের জন্য:

<set-property name="user.agent" value="gecko1_8"/>

এটি উদাহরণস্বরূপ, কেবলমাত্র IE এবং FF এর জন্য আপনার অ্যাপ্লিকেশনটি সংকলন করবে। আপনি যদি জানেন যে আপনি পরীক্ষার জন্য কেবল একটি নির্দিষ্ট ব্রাউজার ব্যবহার করছেন তবে আপনি এই ছোট্ট হ্যাকটি ব্যবহার করতে পারেন।

অন্য বিকল্প: আপনি যদি বেশ কয়েকটি লোকেল ব্যবহার করে থাকেন এবং আবার পরীক্ষার জন্য কেবল একটি ব্যবহার করেন তবে আপনি সেগুলি সম্পর্কে সমস্ত মন্তব্য করতে পারেন যাতে GWT ডিফল্ট লোকেল ব্যবহার করে, এটি সংকলনের সময় থেকে কিছু অতিরিক্ত ওভারহেড শেভ করে।

নীচের লাইন: আপনি সংকলক পারফরম্যান্সে অর্ডার-অফ-প্রবৃদ্ধি পেতে যাচ্ছেন না, তবে বেশ কয়েকটি শিথিলতা নিয়ে আপনি কয়েক মিনিট এখানে এবং সেখান থেকে শেভ করতে পারেন।


3
এটি জিডব্লিউটি ২.০-এর জন্য উপস্থিত হয়েছে, আপনি প্রকৃতপক্ষে এই সিনট্যাক্সটি কোনও ব্যবহারকারী এজেন্ট নির্দিষ্ট করতে চান: <সেট-প্রপার্টি নাম = "ইউজারআজেন্ট" মান = "গেকো, গেকো 1_8" />
মুরডস

Gwt 2.2 এ কোনও জেকো নেই। সংকলক বলে যে "মান জেকো আগে সংজ্ঞায়িত ছিল না। উপাদান 'সেট-প্রপার্টি' প্রক্রিয়া করার সময় অপ্রত্যাশিত ব্যতিক্রম"
ইউথার্ক

"gecko1_8" মান বৈশিষ্ট্য শুধুমাত্র এবং পরে GWT 2.2 মধ্যে ফায়ারফক্স 1.5-এর জন্য কাজ করা উচিত
eaykin

এই উত্তরটি প্রায় দুই বছরের পুরানো। এই বিন্দুটি পরিষ্কার করার জন্য নির্দ্বিধায় এটিকে সম্পাদন করুন।
যুবাল আদম

6
২০১৩, এখনও জিডব্লিউটি সংকলন সময় সফলভাবে যে কেউ এই উত্তর উন্নতি করতে পারে, জিডব্লিউটি 2.5
ফরহাদ

62

যদি আপনি -লোকাল ওয়ার্কার্স পতাকা সহ জিডাব্লুটি সংকলক চালনা করেন তবে সংকলক সমান্তরালভাবে একাধিক অনুমানের সংকলন করবে। এটি আপনাকে একটি বহু-কোর মেশিনের সমস্ত কোর ব্যবহার করতে দেয়, উদাহরণস্বরূপ-লোকাল ওয়ার্কার্স 2 সংকলককে সমান্তরালভাবে দুটি ক্রমান্বয়ে সংকলন করতে বলবে। আপনি প্রস্থের পার্থক্যের ক্রম পাবেন না (সংকলকের সমস্ত কিছুই সমান্তরাল নয়) তবে আপনি যদি একাধিক অনুমানের সংকলন করে থাকেন তবে এটি এখনও একটি লক্ষণীয় স্পিডআপ।

আপনি যদি জিডাব্লুটিটির ট্রাঙ্ক সংস্করণটি ব্যবহার করতে ইচ্ছুক হন তবে আপনি যে কোনও ব্রাউজারের জন্য হোস্টেড মোডটি ব্যবহার করতে সক্ষম হবেন ( প্রক্রিয়াটি হোস্ট করা মোডের বাইরে ), যা হোস্টেড মোডের সাথে বর্তমান বেশিরভাগ সমস্যার সমাধান করে। জিডাব্লুটিটি যেদিকে চলেছে তা মনে হয় - সর্বদা হোস্টেড মোডের সাথে বিকাশ করুন, যেহেতু সংকলনগুলি দ্রুততর মাত্রা পেতে পারে না are


2
আহ, লোকাল ওয়ার্কার্স বিকল্পটি একটি মণি, এটি জানার মতো। দুঃখের বিষয়, আমাদের বেশিরভাগ ডেভ বাক্সগুলি সিঙ্গেল-কোর জিয়ন। ওওপিএইচএম খুব আশাব্যঞ্জক দেখাচ্ছে। সর্বদা পরবর্তী সংস্করণে এটি হ'ল ...
স্কাফম্যান

4
একাধিক কোর সহ একটি বাক্সে একটি সংকলন পরিবেশকে ভার্চুয়ালাইজ করুন; দূরবর্তী এই ভিএম মধ্যে; কমান্ড লাইন জিডব্লিউটি কমপক্ষে লোকাল এবং ইউজার। আপনি যে ডিভাইসটি নিযুক্ত করছেন সেখানে ভিএম হোস্টিং বক্সটি একটি নেটওয়ার্ক পিয়র তা নিশ্চিত করুন। এর সংমিশ্রণটি আপনার কমপাইলটি প্রায় 30 সেকেন্ডে ডাব্লু / টমক্যাটে মোতায়েনের দিকে যায়। এছাড়াও এগুলি সব একটি স্ক্রিপ্টে লেখা যেতে পারে। আপনি স্থানীয় মেশিনেও ডেভেল করতে পারেন, একটি এসএনএন প্যাচ তৈরি করতে পারেন এবং আপনার স্ক্রিপ্টটি কেবলমাত্র এসসিআর ডিফেন্সে অনুলিপি করার প্রয়োজনীয়তা বাদ দিয়ে কিছু প্রকারের এনএফএস বা সাম্বা ভাগ করে ব্যবহার করে প্যাচটি প্রয়োগ করতে পারেন। হ্যাঁ!
কেআর।

সীমাবদ্ধ এডিএসএল, কেবল বা ওয়াইফাই সংযোগে রিমোট ডেভের জন্য এনএক্স ক্লায়েন্টও একটি বিশাল +++। প্লাস আপনি যেকোন স্থানে ডাব্লু / ইন্টারনেট
কেআর

মাভেন বিল্ডে প্ল্যাটফর্ম উপলব্ধ সংখ্যক সিপিইউতে ডিফল্ট। সুতরাং আমার জন্য এখানে কোন গতি নেই।
কেইকি

55

যদিও এই এন্ট্রিটি বেশ পুরানো এবং আপনার বেশিরভাগই সম্ভবত ইতিমধ্যে জানেন, আমি মনে করি এটি উল্লেখযোগ্য যে জিডব্লিউটি ২.x এর মধ্যে একটি নতুন সংকলন পতাকা রয়েছে যা অপ্টিমাইজেশন এড়ানোর মাধ্যমে সংকলন গতিবেগ করে। আপনার অবশ্যই জাভাস্ক্রিপ্টটি সেভাবে সংকলিত করা উচিত নয়, তবে এটি উত্পাদনহীন অবিচ্ছিন্ন বিল্ডগুলির সময় সময় রক্ষাকারী হতে পারে।

কেবল ফ্ল্যাগটি অন্তর্ভুক্ত করুন: আপনার জিডব্লিউটি সংকলক লাইনে -ড্রাফ্টকম্পাইল।


3
আমি এই বিকল্পটি ব্যবহার করেছি এবং আমাদের প্রকল্পে কখনও কখনও এটি একটি অদ্ভুত ত্রুটির সাথে ব্যর্থ হয়। তাই সচেতন থাকুন, যে কখনও কখনও সংকলন এটির কারণে কাজ না করে।
ভিক

31

এখানে ব্যবহারকারীর জন্য মূল্য নির্ধারণের তালিকা রয়েছে যা আপনি সেট করতে পারেন।

(এটি এখানে যুক্ত করা হচ্ছে কারণ আমি যখন ক্রোমের জন্য কেবলমাত্র একটি ক্রম উত্পাদন করতে পারি তা নির্ধারণ করার সময় আমি এখানেই শেষ করছি here উত্তরটি হল <set-property name="user.agent" value="safari"/>:)


কোথায় আমি এই সেট-সম্পত্তি উপাদান যুক্ত করার কথা? আমি আমার app.gwt.xML ফাইলে <মডুল> উপাদানটির ভিতরে এবং বাইরে এটি যুক্ত করার চেষ্টা করেছি এবং এটি কার্যকর হয় না।
অ্যালেক্স ওয়ার্ডেন

এটি আপনার মডিউল ABC.gwt.xML ফাইলে যায় যেখানে ABC আপনার মডিউলটির নাম।
গ্লেন

30

জিডাব্লুটিটির নতুন সংস্করণগুলিতে (২.৩ বা ২.৪ থেকে শুরু হয়, আমি বিশ্বাস করি), আপনি যুক্ত করতে পারেন

<collapse-all-properties />

বিকাশের উদ্দেশ্যে আপনার gwt.xML এ যান। এটি জিডব্লিউটি সংকলককে একটি একক ক্রমাঙ্কন তৈরি করতে বলবে যা সমস্ত লোকাল এবং ব্রাউজারগুলিকে কভার করে। অতএব, আপনি এখনও সমস্ত ব্রাউজার এবং ভাষাতে পরীক্ষা করতে পারেন, তবে এখনও কেবলমাত্র একটি একক ক্রমানুসারে সংকলন করছেন


2
আকর্ষণীয় ... খারাপ দিকটা কী?
স্কাফম্যান

একক ক্রমান্বয়ে সংকলন যা সমস্ত ব্রাউজার এবং ভাষাগুলিকে পরিচালনা করে তা কেবলমাত্র একটি ব্রাউজার এবং ভাষা পরিচালনা করে এমন একক ক্রমা ছাড়ার চেয়ে কিছুটা বেশি সময় নেয়, তবে পার্থক্যটি আমার অভিজ্ঞতাতে তাৎপর্যপূর্ণ নয়। (~ 25% আরও আমি দেখতে পাচ্ছি, তবে একাধিক অনুমানের সংকলনের তুলনায় এটি এখনও একটি বিশাল উন্নতি)
চি

আমি এর জন্য কোনও ডক লিঙ্ক খুঁজে পাচ্ছি না ... আপনি কি কোনও কিছুর সাথে লিঙ্ক করতে পারেন?
স্কাফম্যান

যদিও এই ট্যাগটি সংকলনের গতি বাড়িয়েছে, এটি সুপার ডেভ মোডে (কমপক্ষে 2.6 এর জন্য) ডিবাগিংও ভেঙে দেয়। ক্রোম ডিবাগারে প্রদর্শিত উত্স কোডটি সংকলিত জেএস কোড থেকে পৃথক। সুতরাং আমি যখন কিছু জাভা পদ্ধতিতে ব্রেকপয়েন্ট রাখি, তখন ডিবাগার অন্য পদ্ধতিতে থামে।
দামালুয়ার

18

আপনি উত্পাদনের জন্য আপনার বিল্ডে একটি বিকল্প যুক্ত করতে পারেন:

-localWorkers 8- যেখানে 8 হ'ল সমান্তরাল থ্রেডগুলির সংখ্যা যা ক্রমান্বয়ে গণনা করে। আপনাকে যা করতে হবে তা হ'ল এই নম্বরটি আপনার পক্ষে আরও সুবিধাজনক এমন সংখ্যার সাথে সামঞ্জস্য করা। দেখুন GWT সংকলন কর্মক্ষমতা (ডেনিস ইশ মন্তব্যের ধন্যবাদ)।

আপনি যদি পরীক্ষার পরিবেশকে সংকলন করে থাকেন তবে আপনি এটি ব্যবহার করতে পারেন:

-draftCompile যা দ্রুত সক্ষম করে, তবে কম-অপ্টিমাইজড সংকলন

-optimize 0 যা আপনার কোডটি অনুকূলিত করে না (9 সর্বোচ্চ অনুকূলকরণের মান)

বিল্ড এবং হোস্ট করা মোডের পারফরম্যান্স দ্বিগুণেরও বেশি একটি জিনিস ছিল এসএসডি ডিস্কের ব্যবহার (এখন হোস্টেডমোড একটি কবজির মতো কাজ করে)। এটি কোনও সস্তা সমাধান নয়, তবে আপনি জিডাব্লুটিটি এবং আপনার সময়ের ব্যয়কে কতটা ব্যবহার করেন তার উপর নির্ভর করে এটির মূল্য হতে পারে!

আশা করি এটি আপনাকে সহায়তা করবে!


স্থানীয় কর্মীদের কোরের সংখ্যায় সেট করা খুব অনুকরনীয় হতে পারে। রেফারেন্সের জন্য এটি দেখুন: josephmarques.wordpress.com/2010/07/30/…
ডেনিস আইচ

আপনাকে ডেনিস মন্তব্য করার জন্য ধন্যবাদ। আসলে, আমার একটি এসএসডি আছে এবং 2 জি মেমরি দেয়। অবশ্যই, ওয়ার্কের সংখ্যা, কোর, মেশিন ইত্যাদির উপর নির্ভর করে লোকাল ওয়ার্কারের সংখ্যা অবশ্যই প্রতিটি ক্ষেত্রে সুর করা উচিত ... আমার ক্ষেত্রে, যখন আমি আমার ল্যাপটপে সংকলন করি এবং ওয়েবে নেভিগেট করতে চাই, 2 কোর বিনামূল্যে ছেড়ে দিন। এটি কেবল একটি উদাহরণ। তবে আপনার ধারণাটি অন্তর্ভুক্ত করতে আমার পোস্টটি সম্পাদনা করবে। ধন্যবাদ।
martins.tuga

14

জিডাব্লুটি সংকলক প্রচুর কোড বিশ্লেষণ করছে তাই এটির গতি বাড়ানো কঠিন হতে চলেছে। গুগল আইও ২০০৮ এর এই অধিবেশনটি আপনাকে জিডাব্লুটিটি কী করছে এবং এটি কেন এত বেশি সময় নেয় সে সম্পর্কে একটি ভাল ধারণা দেবে।

আমার প্রস্তাবটি যতটা সম্ভব होস্টেড মোড বিকাশের জন্য এবং তারপরে কেবল যখন আপনি নিজের পরীক্ষাটি করতে চান তখনই সংকলন করুন comp এটি ইতিমধ্যে আপনি যে সমাধানটি এসেছেন সেটির মতো শোনাচ্ছে তবে মূলত সে কারণেই হোস্টেড মোডটি রয়েছে (ভাল, এটি এবং ডিবাগিং)।

আপনি জিডব্লিউটি সংকলন গতি বাড়িয়ে দিতে পারেন তবে কেবলমাত্র কয়েকটি ব্রাউজারের জন্য সংকলন করুন, জিডাব্লুটিটি ডিফল্টরূপে যা করে 5 ধরণের। আপনি যদি হোস্টেড মোড ব্যবহার করতে চান তবে নিশ্চিত করুন যে আপনি কমপক্ষে দুটি ব্রাউজারের জন্য সংকলন করেছেন; আপনি যদি কোনও একক ব্রাউজারের জন্য সংকলন করেন তবে ব্রাউজার সনাক্তকরণ কোডটি অপ্টিমাইজ করা হয় এবং তারপরে হোস্ট করা মোড আর কাজ করে না।

কম ব্রাউজারের জন্য সংকলন কনফিগার করার একটি সহজ উপায় হল একটি দ্বিতীয় মডিউল যা আপনার মূল মডিউল থেকে উত্তরাধিকার সূত্রে তৈরি হয়:

<module rename-to="myproject">
  <inherits name="com.mycompany.MyProject"/>
  <!-- Compile for IE and Chrome -->
  <!-- If you compile for only one browser, the browser detection javascript
       is optimised away and then Hosted Mode doesn't work -->
  <set-property name="user.agent" value="ie6,safari"/>
</module>

যদি rename-to বৈশিষ্ট্যটি একই সেট করা থাকে তবে আউটপুট ফাইলগুলি একই রকম হবে যদি আপনি একটি সম্পূর্ণ সংকলন করেছিলেন


11
  • আপনার অ্যাপ্লিকেশনটিকে একাধিক মডিউল বা এন্ট্রি পয়েন্টগুলিতে বিভক্ত করুন এবং কেবলমাত্র যখন প্রয়োজন তখন পুনরায় সংকলন করুন।
  • ট্রাঙ্ক সংস্করণ ব্যবহার করে আপনার অ্যাপ্লিকেশনটি বিশ্লেষণ করুন - যা আপনার সংকলনের গল্প সরবরাহ করে । এটি 1.6 সংকলকের সাথে প্রাসঙ্গিক বা নাও হতে পারে তবে এটি কী চলছে তা নির্দেশ করতে পারে।

একাধিক এন্ট্রি পয়েন্টগুলি কাজ করা উচিত, তবে মডিউলগুলি নয় কারণ জিডব্লিউটি সর্বদা আপনার কোডের সাথে সংযুক্ত সমস্ত কিছু যাচাই করে এবং একটি একতাত্ত্বিক পরিণতি সংকলন করে। জিডব্লিউটি ফ্রেমওয়ার্কটি মডিউলারিটি নীতিগুলির জন্য একটি জগাখিচুড়ি এবং অপমান। এমন একটি ভাল প্রকল্প খুঁজে পাওয়া যায় নি যা GWT ফ্রেমওয়ার্ক স্টাফগুলি পুনরায় ব্যবহার করেছে।
ব্যবহারকারী 1050755

4

GWT 2.x এর জন্য আমি সন্ধান করেছি যে আপনি যদি এটি ব্যবহার করেন

<set-property name="user.agent" value="ie6"/>
<extend-property values="ie8,gecko1_8" name="user.agent"/>

এমনকি আপনি একাধিক ক্রয়ের অনুমতি নির্দিষ্ট করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.