আমি কী অপ্টিমাইজেশন বন্ধ করতে পারি, তাই ক্লোজারগুলি থেকে ইন-স্কোপ ভেরিয়েবলগুলি "অনুকূলিতকরণ" নয়


11

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

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

visualSummaryIffalseConsoleLog

আপডেট / সম্পাদনা

এখানে আংশিক সমাধান রয়েছে, পল 1365972 এ creditণ।

আপনাকে বিশেষ বিকল্প সহ কমান্ড লাইন থেকে ক্রোম ব্রাউজারটি শুরু করতে হবে:

  1. সম্পূর্ণভাবে ক্রোম বন্ধ করুন
  2. "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax" উইন্ডোজ অন্যান্য ওএসের মতো একই সাথে কনসোল থেকে ক্রোম চালান ।
  3. বিকাশকারী কনসোল ওপেন করুন এবং কার্যকর করুন "%GetHeapUsage()"। আপনি যদি বিকল্পটি দিয়ে ক্রমটি সঠিকভাবে শুরু করেন, তবে একটি নম্বর কনসোলে লগ হবে, অন্যথায় আপনি একটি সিনট্যাক্স ত্রুটি পাবেন।

এই কমান্ড লাইন পতাকার মাধ্যমে আপনি কমান্ড দিয়ে 'ভি 8' ইঞ্জিনের সাথে কথা বলতে পারেন %, যা সাধারণ জাভাস্ক্রিপ্টে সিনট্যাক্স ত্রুটি। পৌলের উত্তরে এই জাতীয় ভি 8 কমান্ডের জন্য একটি তালিকা দেওয়া হয়েছিল ।

এই %NeverOptimizeFunction()তালিকায় রয়েছে যা দেখতে এমন কিছু যা দেখতে আমার মনে হয়েছিল কেবল কল করতে এবং এটি দিয়ে কাজটি করতে হবে। দুর্ভাগ্যক্রমে, সেই ফাংশনটি আমি যা প্রত্যাশা করেছিল তা করে না, যেমন পরবর্তী স্ক্রিনশটে প্রদর্শিত হয়েছে।

Lorem এখনও সংজ্ঞায়িত করা হয়নি

(( পলের উত্তর থেকে অন্য লিঙ্কটি (ভি 8-নেটিভ নোড মডিউল) আমাদের এখানে এখানে এই প্রসঙ্গে খুব বেশি গুরুত্ব দেয় না All কেবল এটি "%" ফাংশন কলের চারপাশে এক-লাইনার মোড়কে দেয় যাতে কোডটি ক্র্যাশ না হয় doesn't ব্রাউজারগুলি যা ভি 8 নয়)))

((আমি একটি সময় মনে করি এটি কখন কাজ করেছিল (যখন এই অপ্টিমাইজেশনটি এখনও আবিষ্কার হয়নি / কার্যকর করা হয়নি) আমি জানি না কত দিন আগে। দশ বছর? 15 বছর? এরকম কিছু। শেষ ক্রোম সংস্করণটি কী ছিল (যদি যে কোনও) এবং সর্বশেষ ফায়ারফক্স সংস্করণটি কী ছিল (আপনি নিশ্চিতভাবেই এটি করতে পারেন এটি এখানে নিশ্চিত) এটি আপনাকে অনুগ্রহ পাবে না, তবে এটি উত্তর হিসাবে আপনি যদি জানেন এবং পোস্ট করেন তবে এটি আপনাকে উজ্জীবিত করবে ।)))

সমাধান

আপনাকে পেট্র এসআরনিসিকে ধন্যবাদ

হ্যাকি ফিক্স

নতুন প্রশ্ন

যদিও পেটরের সমাধান অনেক সাহায্য করে, এটি নিখুঁত নয়। এই প্রশ্নটি খুব দীর্ঘ হচ্ছে, তাই পেটরের সমাধান কীভাবে উন্নত করা যায় সে সম্পর্কে আমি একটি নতুন প্রশ্ন পোস্ট করেছি । (আমি অবশ্যই এই প্রশ্নটি এখানে সম্পাদনা করতে পারতাম, তবে এটি "অবাস্তব" অনুভব করবে, যদি আপনি আমার অর্থ কী তা জানেন))


অনিচ্ছাকৃত পরিণতি, অষ্টম দশম হাজারে। এই কোডিংয়ের শৈলীতে এই অপটিমাইজেশনটি নেতিবাচক প্রভাব ফেলে। আমি নিজেকে লুপের জন্য পুরানো ফ্যাশন ব্যবহার করছি (.Map,। ForEach, .reduce এর পরিবর্তে) অন্যথায় চাই না, কেবল আমি এই ইস্যুটিতে চালানো এড়াতে চাই।
ম্যাথহেডিংক্লাউডস

v8-nativesগ্রন্থাগার শুধুমাত্র একটি সহজ লাইব্রেরিতে কোডে গুরুত্বপূর্ণ% কল হওয়া উচিত গোপন noopsএকটি ব্রাউজার বা নোড যা বিশেষ --allow-নেটিভস-সিনট্যাক্স পতাকা শুরু করা হয় নি মধ্যে ..
নথনেল

আমি কিছু পরীক্ষা চালিয়েছি, 'বডিঅনল্ড' ফাংশনটি যাইহোক অপ্টিমাইজ করা হয়নি; তাই অভ্যন্তরীণ কমান্ডগুলি ব্যবহার করে চেষ্টা করার জন্য এবং এটি জোর করে ডি-অপ্টিমাইজ করার জন্য কোনও কাজ করে না।
নথনেল

@ নাথনেল: গুরুত্বপূর্ণ কলটি %NeverOptimizeFunction(foo)আমি কেবল এটি বডিঅনলোডের জন্যও বলেছি, "ঠিক কারণ", "ভাল, এটি ক্ষতি করবে না" ভেবে। সমস্যাটি হ'ল fooআমি যেভাবে প্রত্যাশা করছিলাম সেটিকে ডিওপিমাইজ করা হয়নি। পরিবর্তনশীল loremঅদৃশ্য। ধরা যাক আমি কিছু কোড লিখতে চাই যা ফাংশন ফুতে যেতে হয়। এটি আমার পাঠ্য সম্পাদককে টাইপ করার পরিবর্তে আমি এটি ডি কনসোলে টাইপ করি (ডিবাগার যখন বসে বসে থাকে), দেখুন এটি আমার কী করে তা দেখুন এবং তারপরে এটি আমার টেক্সট সম্পাদকে কনসোল থেকে অনুলিপি / আটকান। আমি এভাবেই কাজ করতে পছন্দ করি। এবং পারে না। অপ্টিমাইজেশনের কারণে। এটা নাও?
mathheadinclouds

1
পল 1365972 তার উত্তর পোস্ট করার আগে আমি বেশ কয়েকটি আমাদের বিভিন্ন --js-flags(বিভিন্ন টার্বো ফ্যান সম্পর্কিত সম্পর্কিত) এবং বেশ কয়েকটি ভি 8 নেটিভ কমান্ডের সাথে পরীক্ষামূলকভাবে ব্যয় করেছি তবে আমি পছন্দসই আচরণটি অর্জন করতে সক্ষম হইনি। আমি বিশ্বাস করি যে এই পদ্ধতির একটি শেষ পরিণতি হতে পারে। [v8]এই প্রশ্নে একটি ট্যাগ যুক্ত করা সার্থক হতে পারে । ভি 8 এর অভ্যন্তরীণ কর্মের গভীর বোঝার সাথে যে কেউ এই পথে যেতে পারে বা সম্ভবত আপনাকে সঠিক দিক নির্দেশ করে কিনা তা স্পষ্ট করে বলতে সক্ষম হতে পারে।
পেট্র স্র্নেক

উত্তর:


2

আপনি এই ধরনের কোনো Eval মধ্যে ডিবাগার বিবৃতি মোড়কে সব ভেরিয়েবল অ্যাক্সেস পেতে পারেন: eval("debugger;");। এই হ্যাকি সলিউশনটি কল স্ট্যাকের সাথে আরেকটি বেনামে ফাংশন যুক্ত করেছে এবং এটি অবশ্যই ডেভটুলগুলিতে ম্যানুয়ালি সেট করা ব্রেকপয়েন্টগুলির জন্য কোনও ব্যবহারের নয় of

এটি খুব ভাল সমাধান বলে মনে হচ্ছে না, তবে যেহেতু এখন পর্যন্ত এটি কেবলমাত্র অভিযুক্ত আচরণ অর্জন করেছে, তাই আমি উত্তর হিসাবে পোস্ট করছি।


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

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

কেউ এইভাবে এই কৌশলটি সংশোধন করতে পারে: ইভাল ("ডিবাগার") এর পরিবর্তে স্রেফ ইভাল ("") রাখুন - তবে তাদের মধ্যে অনেকগুলিই সমস্ত কোডে বিতরণ করেছেন, যেখানে আপনি যেখানে মনে করেন যে আপনি একটি 'বর্ধিত ব্রেকপয়েন্ট' চান। তারপরে আপনি একটি ব্রেকপয়েন্টটি সেট করতে পারেন (দেব সরঞ্জামগুলির সাহায্যে) যেখানে সেগুলিগুলির একটি ('') বিবৃতি রয়েছে, এবং একবার আপনি সেখানে থামার পরে আপনি "পদক্ষেপে" প্রবেশ করুন। আমি প্রতিটি ক্রিয়াকলাপের শুরুতে এই বিবৃতিগুলি রাখার জন্য একটি সামান্য ট্রান্সিলার (একটি ছোট জিনিস যা আমি করছি তার জন্য বড় শব্দ) লিখতে বিবেচনা করছি। stackoverflow.com/questions/59159996/...
mathheadinclouds

আমি কেবল ইভাল ("ডিবাগার") প্রতিস্থাপনের চেষ্টা করে ইভাল (); ডিবাগার এবং ফায়ারফক্স বা ক্রোমের ব্যবহারের উপর নির্ভর করে বিভিন্ন ফলাফল পেয়েছে। i.stack.imgur.com/wy5WT.png
mathheadinclouds

3

গুগল ক্রোম ভি 8 জেএস-ইঞ্জিন ব্যবহার করে, আপনি - নেট-নেটিজ -সিনট্যাক্স পতাকা সহ এটিতে স্থানীয় কলগুলি সক্ষম করতে পারবেন, এটি আপনার অনুসন্ধানের মতো অনেকগুলি দরকারী ডিবাগিং ফাংশন ( এখানে পুরো তালিকা ) প্রকাশ করে:% কখনই নাউত্তিমূলক ফাংশন () । এই পতাকা ব্যতীত, এই কলগুলি অবৈধ বাক্য গঠন হবে তাই মোতায়েনের সময় সাবধানতা অবলম্বন করুন (বা ভি 8-নেটিভ লাইব্রেরি ব্যবহার করুন )।

এই বৈশিষ্ট্যটি সক্ষম করতে কেবল --js-flags = "- অনুমতি-নেটিভস-সিনট্যাক্স" দিয়ে ক্রোম খুলুন (কেবল এটি বিশ্বস্ত ওয়েবসাইটগুলির ডিবাগিংয়ের জন্য ব্যবহার করুন, কারণ এটি অবিশ্বস্ত জেএস কোডকে এমন জিনিসগুলিতে অ্যাক্সেস দিতে পারে যা আপনি সত্যিই চান না want প্রবেশ করতে).


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

tl; dr ব্যবহার --js-flags = "- এর পরিবর্তে মঞ্জুরি-নেটিজ-সিনট্যাক্স"। বৈশিষ্ট্যটি সক্ষম করতে ভি 8 জেএস-ইঞ্জিনটি - নিল - নেটিভস-সিনট্যাক্স পতাকা দিয়ে শুরু করা দরকার, তবে আপনি সরাসরি এটি শুরু করতে পারবেন না এটি ক্রোমের কাজ। তাই আপনাকে পতাকাটি দিয়ে ইঞ্জিন শুরু করতে ক্রোমকে বলতে হবে, আপনি এটি কীভাবে করবেন? কেবলমাত্র --js-flags = <আপনার পতাকা এখানে> ক্রোম-এর মাধ্যমে উল্লিখিত ইঞ্জিনের পতাকাটি দিন।
পল 1365972

নাঃ। নিরাপদে থাকার জন্য আর একবার চেষ্টা করেছিলেন। "অপারেটিং সিস্টেম কনসোলে 'ক্রোম' পরে আমি যে জিনিসটি টাইপ করি তা" হিসাবে আমি উভয় --allow-natives-syntaxএবং --js-flags="--allow-natives-syntax"একাধিকবার চেষ্টা করেছি । আমি যদি এই সমস্ত চেষ্টা না করে থাকি তবে আমারও মনে হয় টাইপোর সবচেয়ে সম্ভবত ব্যাখ্যা। আমি আর একটি স্ক্রিনশট তৈরি করেছি। i.stack.imgur.com/7cpPP.png একটি টাইপো দেখতে পাচ্ছেন ? দয়া করে আমাকে একটি সত্য উত্তর দিন: আপনি কি কেবল "নিবন্ধটি পড়েছেন এবং বুঝতে পেরেছেন" (স্পষ্ট করে বলতে গেলে, এতে কোনও ভুল নেই, যদি আপনি আরও দাবি না করেন), বা আপনি আসলে আপনার মেশিনে সমস্ত চেষ্টা করেছেন? thx
mathheadinclouds

কেবলমাত্র অনুমান: এটি হতে পারে যে আমি সেই বিকল্পটি দিয়ে ক্রোম এক্সিকিউটেবল শুরু করি না , তবে আমি সেই বিকল্পটি দিয়ে ক্রোম সি ++ (বা যাই হোক না কেন) উত্সগুলি সংকলন করব ?
ম্যাথহেডইনক্লাউডস

1
অদ্ভুত যে আমি এটি পরীক্ষা করেছি এবং এটি দুর্দান্ত কাজ করেছে, সংকলনের দরকার নেই। আমি ঠিক যা লিখলাম ঠিক তেমন লিখব তাই কোনও ভুল বোঝাবুঝি নেই। 1. ক্রোম সম্পূর্ণভাবে বন্ধ করুন 2. "সি: / প্রোগ্রাম ফাইল (x86) / গুগল / ক্রোম / অ্যাপ্লিকেশন / ক্রোম.এক্সে" --js-flags = "- অনুমতি-নেটিভ-সিনট্যাক্স" দিয়ে ক্রোমটি চালান বিকাশকারী কনসোল এবং সবকিছু কাজ করছে কিনা তা পরীক্ষা করতে "% গেটহিপ ইউজেজ ()"
চালিত করুন

0

আমি সত্যিই আশা করি এই প্রশ্নের সত্যই উত্তর আছে। যা অনুসরণ করে তা বাস্তব উত্তর নয়, এটি একটি অস্থায়ী কাজ। আমি একটি সহায়ক সরঞ্জাম লিখেছিলাম যার if (false) { console.log(variables, from, closures); }সাহায্যে আপনি স্থির বিশ্লেষণ ব্যবহার করে ফর্মটির মূর্খ সহায়ক সহায়ক কোড তৈরি করতে পারেন (প্রশ্নে স্ক্রিন শট দেখুন) - আপনি আপনার কোডে পেস্ট করুন, মূ statement় বিবৃতি তৈরি হয়, আপনি এটি অনুলিপি করতে পারেন, তারপরে আপনার প্রয়োজন নেই এটি টাইপ করতে। আমি জানি না যে এটি অনেক সাহায্য করে কিনা, যেহেতু এই সমস্ত অনুলিপি করা এবং আটকানোতেও সময় লাগে, তবে আমি এটি পেয়েছি।

স্ক্রিনশট

বেহালা

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