কেন ডকুমেন্ট. রাইটকে একটি "খারাপ অভ্যাস" হিসাবে বিবেচনা করা হয়?


363

আমি জানি document.writeখারাপ অভ্যাস হিসাবে বিবেচিত; এবং আমি তৃতীয় পক্ষের বিক্রেতার কাছে কেন সেগুলি ব্যবহার করা উচিত নয় তা জমা দেওয়ার কারণগুলির একটি তালিকা সংকলন করার আশা করছিdocument.write তাদের অ্যানালিটিক্স কোডটি বাস্তবায়নে ।

document.writeনীচে একটি খারাপ অভ্যাস হিসাবে দাবি করার জন্য আপনার কারণ অন্তর্ভুক্ত করুন ।

উত্তর:


243

আরও কয়েকটি গুরুতর সমস্যা:

  • ডকুমেন্ট.উইরাইট (এখন থেকে ডিডাব্লু) এক্সএইচটিএমএলে কাজ করে না

  • DW সরাসরি ডিওএম সংশোধন করে না, আরও কারসাজি রোধ করে (এর প্রমাণ খোঁজার চেষ্টা করছে, তবে এটি সর্বোত্তম অবস্থানে রয়েছে)

  • পৃষ্ঠাটি লোড শেষ হওয়ার পরে মৃত্যুদন্ড কার্যকর করা পৃষ্ঠায় ওভাররাইট হবে, বা একটি নতুন পৃষ্ঠা লিখবে, বা কাজ করবে না

  • যেখানে ডাব্লু ডাব্লু সম্মুখীন হয়েছিল সেখানে কার্যকর করে: এটি কোনও প্রদত্ত নোড পয়েন্টে ইনজেক্ট করতে পারে না

  • ডিডাব্লু কার্যকরভাবে সিরিয়ালযুক্ত পাঠ্য রচনা করছে যা ডিওএম ধারণামূলকভাবে কাজ করে না এবং বাগগুলি তৈরি করার একটি সহজ উপায় (। ইনার এইচটিএমএল একই সমস্যা রয়েছে)

নিরাপদ এবং DOM বন্ধুত্বপূর্ণ DOM ম্যানিপুলেশন পদ্ধতি ব্যবহার করা আরও ভাল


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

7
ফায়ারব্যাগটি ডিওএমের সত্যিকারের উপস্থাপনা নয়। এটি মজিলার একটি ডিওএম এ এইচটিএমএলকে পার্স করার চেষ্টা attempt আপনি সম্পূর্ণরূপে ভাঙা এইচটিএমএল ফায়ারবগ ডিওএম ভিউতে উপযুক্ত দেখতে পারেন।
ফ্লাইওয়াত

8
ডিওএম হ'ল ডেটা কাঠামো যা পৃষ্ঠাটি রেন্ডার করতে ব্যবহৃত হয় এবং যেমন ব্যবহারকারী পৃষ্ঠায় যা দেখায় তার আলফা এবং ওমেগা। আপনি এইচটিএমএল! = ডিওএমটি সঠিক করেছেন, তবে ডিওএম দ্বারা ডিওএম সংশোধন করা হয়েছে কিনা তা প্রশ্ন থেকে নিরাকার। যদি ডিডব্লিউটি ডমকে সংশোধন না করে, আপনি পর্দাটি দেখতে পাবেন না - এটি সমস্ত ব্রাউজারের ক্ষেত্রেই সত্য এবং পৃষ্ঠাটি রেন্ডার করার জন্য ডোম যা ব্যবহৃত হয় ততক্ষণ ততক্ষণ থাকবে।
সিজিপি

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

7
@ রিকার্ডো রাইভালদো হ্যাঁ, তারা document.writeডকুমেন্টটি লোড করা শেষ করার পরে যদি ডাকা হয়
ইজকাটা

124

আসলে কিছুই নেই document.write, প্রতি সেয়ে। সমস্যাটি হ'ল এটির অপব্যবহার করা সত্যিই সহজ। মোটামুটি, এমনকি।

অ্যানালিটিক্স কোড সরবরাহকারী বিক্রেতাদের ক্ষেত্রে (গুগল অ্যানালিটিক্সের মতো) তাদের পক্ষে এই জাতীয় স্নিপেটগুলি বিতরণ করার পক্ষে এটি সহজতম উপায়

  1. এটি স্ক্রিপ্টগুলি ছোট রাখে
  2. ইতোমধ্যে প্রতিষ্ঠিত অনলোড লোড ইভেন্টগুলিকে ওভাররাইড করা বা নিরাপদে অনলোড ইভেন্টগুলি যুক্ত করতে প্রয়োজনীয় বিমূর্ততা সহ তাদের উদ্বিগ্ন হওয়ার দরকার নেই
  3. এটি অত্যন্ত সামঞ্জস্যপূর্ণ

যতক্ষন পর্যন্ত আপনি এটি ব্যবহার করতে পরে দস্তাবেজ লোড হওয়ার চেষ্টা করবেন না যেমন ,document.writeনা মজ্জাগতভাবে মন্দ আমার নত মতামত রয়েছে।


3
ডকুমেন্ট.ওরাইট এইচটিএমএল পার্সারদের কাছে সত্যই ভয়ঙ্কর কাজ করে এবং সাধারণ ক্ষেত্রে কেবল "অত্যন্ত সামঞ্জস্যপূর্ণ"।
ollলিজে

27
একটি বিশ্লেষণ ট্যাগ সন্নিবেশ মত? যে, সর্বোপরি, মূল প্রশ্নের অংশ। এবং অত্যন্ত সামঞ্জস্যপূর্ণ দ্বারা, আমি ডকুমেন্ট.রাইট পদ্ধতিতে কেবল কাঁচা ব্রাউজারের সমর্থন বোঝাতে চাইছি।
পিটার বেইলি 19

ক্রোম / আইই / সাফারি / অপেরা / ফায়ারফক্সের সর্বশেষতম সংস্করণগুলির সাথে কাজ করে এমন কোনও কিছুই সামঞ্জস্যপূর্ণ বলে মনে করা হয়।
পেসারিয়ার

2
ওভারলোডিং ইভেন্টগুলি ওভাররাইড হচ্ছে? এবং কি addEventListenerজন্য?
m93a

document.writeনির্দিষ্ট শর্ত পূরণ করার সময় Chrome কোনও স্ক্রিপ্ট সন্নিবেশ করে এমন অনুরোধগুলি চালাবে না ।
Flimm

44

এর আর একটি বৈধ ব্যবহার document.writeHTML5 বয়লারপ্লেট সূচক html উদাহরণ থেকে আসে ।

<!-- Grab Google CDN's jQuery, with a protocol relative URL; fall back to local if offline -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.3.min.js"><\/script>')</script>

আমি json2.js JSON পার্স / স্ট্রিংফাইড পলিফিল (আই 7 দ্বারা এবং নীচে প্রয়োজন ) ব্যবহার করার জন্যও একই কৌশলটি দেখেছি ।

<script>window.JSON || document.write('<script src="json2.js"><\/script>')</script>

11
এখানে খারাপ ব্যবহার নয়, তবে ডিওএম ম্যানিপুলেশন ফাংশনগুলি ব্যবহার করতে এখনও "আরও ভাল" - এমনকি গুগল গুগল অ্যানালিটিক্সের জন্য এটি করে। স্নিপেট এখানে আছে
বিমিনিয়ার

8
@ বিমিনার আপনি যদি ডিওএম scriptম্যানিপুলেশনের মাধ্যমে কোনও উপাদান ? োকান তবে এটি কি সমকালীনভাবে লোড হয়? এটি না হলে এটি কোনও প্রতিস্থাপন নয়।
জন ডিভোরাক

2
@ জানডভোরাক - ভাল কথা; ডিওএম ম্যানিপুলেশনগুলি ব্যবহার করার সময়, ব্রাউজারগুলি সাধারণত স্ক্রিপ্টটি অবিচ্ছিন্নভাবে লোড করবে। onloadঅ্যাসিঙ্ক্রোনালি লোড হওয়া স্ক্রিপ্ট কখন ব্যবহারের জন্য উপলব্ধ তা নির্ধারণ করতে আপনি ডোম ইভেন্টটি ব্যবহার করতে পারেন।
বিমিনিয়ার

1
@ জনডভোরাক এটি বাহ্যিক না থাকলে এটি সহ সিঙ্ক্রোনালি লোড করা হয় (থাকে না src) । অন্যথায় এটি "যত তাড়াতাড়ি সম্ভব" নির্বাহ করা হবে, তত্ক্ষণাতীতভাবে।
ওরিওল

1
এটি এখনও ভাঙতে পারে, কারণ ব্যবহারকারী 2 জি সংযোগে থাকলে ক্রম ইচ্ছাকৃতভাবে document.writeকলগুলি চালনা করতে অস্বীকার করবে যা <script>ট্যাগ সন্নিবেশ করানো হয়। বিকাশকারীরা
ওয়েবে

42

এটি আপনার পৃষ্ঠাটিকে অবরুদ্ধ করতে পারে

document.writeপৃষ্ঠাটি লোড হওয়ার সময় কেবলমাত্র কাজ করে; পৃষ্ঠাটি লোড হয়ে যাওয়ার পরে যদি আপনি এটি কল করেন তবে এটি পুরো পৃষ্ঠাটি ওভাররাইট করে দেবে।

এর কার্যকরভাবে অর্থ হল যে আপনাকে এটিকে একটি ইনলাইন স্ক্রিপ্ট ব্লক থেকে কল করতে হবে - এবং এটি ব্রাউজারটিকে পৃষ্ঠার অংশগুলির প্রক্রিয়াগুলি থেকে বিরত করবে will লিখনের ব্লক শেষ না হওয়া পর্যন্ত স্ক্রিপ্ট এবং চিত্রগুলি ডাউনলোড করা হবে না।


31

প্রো:

  • বাহ্যিক (আপনার হোস্ট / ডোমেনে) স্ক্রিপ্ট থেকে ইনলাইন সামগ্রী এম্বেড করার এটি সহজতম উপায়।
  • আপনি পুরো ফ্রেমটিকে ফ্রেম / আইফ্রেমে ওভাররাইট করতে পারেন। আরও আধুনিক আজাক্স কৌশলগুলি ব্যাপকভাবে উপলব্ধ হওয়ার আগে আমি এই কৌশলটি মেনু / নেভিগেশন টুকরো জন্য অনেক বেশি ব্যবহার করতাম (1998-2002)।

কন:

  • এটি বাহ্যিক স্ক্রিপ্টটি লোড না হওয়া পর্যন্ত বিরতি দেওয়ার জন্য রেন্ডারিং ইঞ্জিনকে সিরিয়ালাইজ করে, যা অভ্যন্তরীণ স্ক্রিপ্টের চেয়ে অনেক বেশি সময় নিতে পারে।
  • এটি সাধারণত এমনভাবে ব্যবহৃত হয় যে লিপিটি সামগ্রীটির মধ্যে স্থাপন করা হয়, যা খারাপ-রূপ বলে মনে করা হয়।

3
এর চেয়েও বেশি কনস রয়েছে। উদাহরণস্বরূপ, গুগল ক্রোম নির্দিষ্ট পরিস্থিতিতে চালনা করতে অস্বীকার করবে document.writeযা <script>ট্যাগ তৈরি করে । developers.google.com/web/updates/2016/08/…
ফ্লেম

@ ফ্লিম এটি লক্ষ্য করার মতো, আপনার মন্তব্যটি আমার উত্তরের 8 বছরের বেশি এবং এটি প্রায় 3 বছর পরে। হ্যাঁ, অন্য কনসও আছে ... এবং যদি ডকুমেন্ট.রাইট নিজেই না চলে যায় ... তেমনি সম্ভবত আরও কিছু অত্যাচারিত ইন্টারফেসও আমি অবাক হব।
ট্র্যাকার 1

10

এখানে আমার দ্বিগুণ মূল্য, সাধারণভাবে আপনার ব্যবহার করা উচিত নয় document.write ভারী উত্তোলনের জন্য , তবে একটি উদাহরণ রয়েছে যেখানে এটি অবশ্যই কার্যকর:

http://www.quirksmode.org/blog/archives/2005/06/three_javascrip_1.html

আমি এটি সম্প্রতি একটি এজেএক্স স্লাইডার গ্যালারী তৈরির চেষ্টা করে আবিষ্কার করেছি। আমি দুই নেস্টেড আছে divs সৃষ্টি করে এবং এতে width/ heightএবং overflow: hiddenবাইরের থেকে<div> জেএস দিয়ে সাথে । এটি এমন ছিল যে ইভেন্টটিতে ব্রাউজারটি জেএস অক্ষম করে, ডিভিটি চিত্রগুলিকে গ্যালারীটিতে স্থান দেওয়ার জন্য ভাসিয়ে তোলে - কিছু চমৎকার করুণ কৃপণতা।

বিষয়টি হ'ল উপরের নিবন্ধটির মতো, সিএসএসের এই জেএস হাইজ্যাকিং পৃষ্ঠাটি লোড না হওয়া পর্যন্ত শুরু হয়নি, ডিভিটি লোড হওয়ার সাথে সাথে একটি মুহূর্তের ফ্ল্যাশ ঘটায়। সুতরাং পৃষ্ঠাটি লোড হওয়ার সাথে সাথে আমার একটি সিএসএস বিধি লিখতে বা একটি শীট অন্তর্ভুক্ত করা দরকার।

স্পষ্টতই, এটি এক্সএইচটিএমএলে কাজ করবে না, তবে যেহেতু এক্সএইচটিএমএলটি একটি মৃত হাঁসের কিছু বলে মনে হচ্ছে (এবং আইআই-তে ট্যাগ স্যুপ হিসাবে রেন্ডার করে) এটি আপনার ডক্টেইপি বাছাইয়ের পুনরায় মূল্যায়নের পক্ষে মূল্যবান হতে পারে ...


7

এটি পৃষ্ঠায় সামগ্রীতে ওভাররাইট করে যা সর্বাধিক সুস্পষ্ট কারণ তবে আমি এটিকে "খারাপ" বলব না।

আপনি জাভাস্ক্রিপ্ট ব্যবহার করে একটি সম্পূর্ণ ডকুমেন্ট তৈরি না করা হলে এটির তেমন ব্যবহার হয় না which

তবুও, আপনি ডকুমেন্টটি লেখার সময় আপনি সত্যই ডিওএম ব্যবহার করছেন না you আপনি ডকুমেন্টটিতে কেবল একটি টুকরো টুকরো টুকরো টানছেন তাই আমি বলি এটি খারাপ রূপ it's


2
একটি স্পষ্টতা: ডকুমেন্ট.উইট পৃষ্ঠায় লিখিত সামগ্রী সন্নিবেশ করান, এটি সেগুলি ওভাররাইট করে না।
পিটার ডলবার্গ

5
@ পিটার, ডকুমেন্টটি লোড হওয়ার পরে আপনি যদি এটি কল করেন তবে এটি সামগ্রীটি ওভাররাইট করে। আমি অনুমান করছি যে আলেম মানে কি।
ম্যাথু ক্রামলে

2
আপনি কি পরামর্শ দিচ্ছেন যে কোনও ব্যক্তিকে কেবল কিছু করার পরিবর্তে ম্যানুয়ালি আলাদা আলাদা ডোম নোডগুলি কোডে তৈরি করা উচিত div.innerHTML = "<label for='MySelect'>Choose One</label><select id='MySelect'><option value='foo' selected=''>foo</option><option value='bar'>bar</option></select>";? দেখে মনে হচ্ছে এটি প্রচুর অপ্রয়োজনীয় এবং কম পঠনযোগ্য কোড তৈরি করবে। এটি জন রেসিগ এবং অন্যান্য জেএস বিকাশকারীদের অ্যাডভোকেটের পদ্ধতির ঠিক বিপরীত।
লস ম্যাজেস্টে

7

এটি এক্সএমএল রেন্ডারিং (এক্সএইচটিএমএল পৃষ্ঠাগুলির মতো) ব্যবহার করে পৃষ্ঠাগুলি ভেঙে দেয়।

সেরা : কিছু ব্রাউজার এইচটিএমএল রেন্ডারিংয়ে ফিরে যায় এবং সবকিছু ঠিকঠাক কাজ করে।

সম্ভাব্য : কিছু ব্রাউজার XML রেন্ডারিং মোডে ডকুমেন্ট.রাইট () ফাংশনটি অক্ষম করে।

সবচেয়ে খারাপ : যখনই ডকুমেন্ট.ওরাইট () ফাংশনটি ব্যবহার করা হয় তখন কিছু ব্রাউজার একটি এক্সএমএল ত্রুটি ছুঁড়ে দেয়।


6

আমার মাথার উপরে:

  1. document.writeপৃষ্ঠা লোড বা বডি লোড ব্যবহার করা প্রয়োজন। সুতরাং আপনি যদি অন্য কোনও সময়ে স্ক্রিপ্টটি ব্যবহার করতে চান তবে আপনার পৃষ্ঠার বিষয়বস্তু ডকুমেন্টটি আপডেট করুন rite রাইটটি বেশ অযথা।

  2. প্রযুক্তিগতভাবে document.writeকেবলমাত্র এইচটিএমএল পৃষ্ঠাগুলি আপডেট করবে এক্সএইচটিএমএল / এক্সএমএল নয়। আইই মনে হয় এটি সত্যই ভুলে গেছে তবে অন্যান্য ব্রাউজারগুলি তা করবে না।

http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite


9
আইআই ক্ষমা করছেন কারণ এটি এক্সএইচটিএমএল সমর্থন করে না। যদি / যখন তারা করেন, ডকুমেন্ট. রাইট সম্ভবত কাজ করা বন্ধ করবে (কেবলমাত্র এক্সএইচটিএমএলটিতে)।
ম্যাথিউ ক্রামলে

2
এক্সএইচটিএমএল ওয়েবে অপ্রাসঙ্গিক। একটি কঠোর এক্সএইচটিএমএল DOCTYPE সঙ্গে এমনকি পৃষ্ঠাগুলি আসলে যে বিষয়ে এক্সএমএল হিসাবে গণ্য করা হয় না, ব্রাউজার ডেভেলপারদের ট্রাস্ট পৃষ্ঠা লেখক না যে অনেক।
রবজি

4

ক্রোম ব্লক করতে পারে document.writeযা নির্দিষ্ট কিছু ক্ষেত্রে স্ক্রিপ্ট সন্নিবেশ করে। যখন এটি ঘটে, এটি কনসোলে এই সতর্কতাটি প্রদর্শন করবে:

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

তথ্যসূত্র:


3

ব্রাউজার লঙ্ঘন

.writeএটি কোনও ব্রাউজার লঙ্ঘন হিসাবে বিবেচিত হয় কারণ এটি পৃষ্ঠাটি রেন্ডারিং থেকে পার্সারকে থামিয়ে দেয়। পার্সার বার্তাটি গ্রহণ করে যে দস্তাবেজটি সংশোধন করা হচ্ছে; সুতরাং, জেএস এর প্রক্রিয়াটি শেষ না করা পর্যন্ত এটি অবরুদ্ধ হয়ে যায়। কেবলমাত্র এই সময়ে পার্সার আবার শুরু হবে।

কর্মক্ষমতা

এই জাতীয় পদ্ধতিতে নিয়োগের সবচেয়ে বড় পরিণতি হ'ল কর্মক্ষমতা। ব্রাউজার পৃষ্ঠার সামগ্রী লোড করতে আরও সময় নিবে। লোড টাইমের বিরূপ প্রতিক্রিয়া ডকুমেন্টে কী লেখা হচ্ছে তার উপর নির্ভর করে। আপনি <p>জাভাস্ক্রিপ্ট লাইব্রেরিগুলিতে 50-কিছু রেফারেন্সের অ্যারে পাস করার বিপরীতে ডিওমে একটি ট্যাগ যুক্ত করে দিলে আপনি খুব বেশি পার্থক্য দেখতে পাবেন না (এমন কিছু যা আমি কার্য কোডে দেখেছি এবং ফলস্বরূপ 11 সেকেন্ড বিলম্বিত হয়েছে - এর অবশ্যই এটি আপনার হার্ডওয়ারের উপরও নির্ভর করে)।

সর্বোপরি, যদি আপনি এটির সহায়তা করতে পারেন তবে এই পদ্ধতিটি পরিষ্কার করে দেওয়া ভাল।

আরও তথ্যের জন্য ডকুমেন্টের বিরুদ্ধে হস্তক্ষেপ দেখুন w রাইট ()


3

গুগল-ক্রোম দেব সরঞ্জামগুলির বাতিঘর নিরীক্ষণ দ্বারা করা বিশ্লেষণের ভিত্তিতে ,

ধীর সংযোগে থাকা ব্যবহারকারীদের জন্য, বাহ্যিক স্ক্রিপ্টগুলি গতিযুক্তভাবে ইনজেকশনের মাধ্যমে document.write()পৃষ্ঠা লোডকে কয়েক সেকেন্ডের মধ্যে বিলম্ব করতে পারে।

এখানে চিত্র বর্ণনা লিখুন


2
  • document.writeখারাপ অভ্যাস হওয়ার সহজ কারণ হ'ল আপনি এমন একটি দৃশ্যের সাথে আসতে পারবেন না যেখানে আপনি এর চেয়ে ভাল বিকল্প খুঁজে পাচ্ছেন না।
  • আরেকটি কারণ হ'ল আপনি বস্তুর পরিবর্তে স্ট্রিংয়ের সাথে কাজ করছেন (এটি খুব আদিম)।
  • এটি কেবলমাত্র নথিতে সংযোজন করে।
  • এটিতে এমভিসি (মডেল-ভিউ-কন্ট্রোলার) প্যাটার্নের সৌন্দর্যের কিছুই নেই ।
  • এজ্যাক্স + জিকুয়ারি বা কৌণিক জেএস সহ গতিশীল সামগ্রী উপস্থাপন করা অনেক বেশি শক্তিশালী ।

আপনার প্রথম বুলেট হিসাবে, আপনি কীভাবে সমাধান করতে যাচ্ছেন @ সানউউকুং তার উত্তরটিতে উত্তর দিয়েছিলেন? আমি সম্মত হ'ল আপনি এটি ডিওএম ম্যানিপুলেশনগুলির সাথে সমাধান করতে পারেন , তবে ডিওএম ম্যানিপুলেশনগুলি যেমন চলে যায়, সময় মতো এফইওওসি এড়ানো শক্ত document.write
বার্ট ব্রুইনোগে

FUOC কি আর সমস্যা?
অ্যান্ডারস লিন্ডেন

1

একটি উত্স কোড স্ট্রিং মূল্যায়ন হিসাবে ডকুমেন্ট.উইট () (এবং .innerHTML) সম্পর্কে ভাবতে পারেন। এটি অনেক অ্যাপ্লিকেশন জন্য খুব সহজ হতে পারে। উদাহরণস্বরূপ যদি আপনি কোনও উত্স থেকে স্ট্রিং হিসাবে এইচটিএমএল কোড পান তবে এটি কেবল "মূল্যায়ন" করা সহজ।

লিস্পের প্রসঙ্গে, ডিওএম হেরফেরটি তালিকার কাঠামোয় হেরফেরের মতো হবে, উদাহরণস্বরূপ কাজটি করে তালিকা তৈরি করুন (কমলা):

(cons 'orange '())

এবং ডকুমেন্ট.উইরাইট () স্ট্রিংকে মূল্যায়ন করার মতো, যেমন উত্স কোড স্ট্রিংকে মূল্যায়ন করে একটি তালিকা তৈরি করুন:

(eval-string "(cons 'orange '())")

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

(eval '(cons 'orange '()))

আপনি যদি সহজ লাইভ সম্পাদকদের মতো কোডিং সরঞ্জামগুলি বাস্তবায়ন করেন তবে স্ট্রিংকে দ্রুত মূল্যায়নের দক্ষতা অর্জন করা খুব সহজ, উদাহরণস্বরূপ ডকুমেন্ট.ইউরাইট () বা .innerHTML ব্যবহার করে। লিস্প এই দিক থেকে আদর্শ, তবে আপনি জেএসেও খুব শীতল জিনিসগুলি করতে পারেন, এবং অনেক লোক http://jsbin.com/ এর মতো তা করছেন are


1

ডকুমেন্ট.রাইটের অসুবিধাগুলি মূলত এই 3 টি বিষয়ের উপর নির্ভর করে:

ক) বাস্তবায়ন

ডকুমেন্ট.উইরাইট () বেশিরভাগই সেই সামগ্রীর প্রয়োজন হওয়ার সাথে সাথে পর্দায় লিখিত সামগ্রী লিখতে ব্যবহৃত হয়। এর অর্থ এটি কোনও জাভাস্ক্রিপ্ট ফাইল বা কোনও HTML ফাইলের মধ্যে স্ক্রিপ্ট ট্যাগের অভ্যন্তরে, যে কোনও জায়গায় ঘটে। স্ক্রিপ্ট ট্যাগ যেমন এইচটিএমএল ফাইলের মধ্যে যে কোনও জায়গায় রাখা হয়েছে, স্ক্রিপ্ট ব্লকগুলির মধ্যে ডকুমেন্ট.উইরাট () বিবৃতিগুলি কোনও ওয়েব পৃষ্ঠার অভ্যন্তরে এইচটিএমএল দ্বারা জড়িত থাকা একটি খারাপ ধারণা।

খ) রেন্ডারিং

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

গ) অসম্ভব হেরফের

একবার লেখা হয়ে গেলে এটি শেষ হয়ে যায়। আমরা ডিওমে আলতো চাপ না দিয়ে এটিকে কাজে লাগাতে ফিরে যেতে পারি না।


1

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

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


-3

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

পৃষ্ঠায় একটি স্থানধারক উপাদান সেট করা আরও ভাল, এবং তারপরে এটি অভ্যন্তরীণ এইচটিএমএলকে ম্যানিপুলেট করুন।


15
এটি সত্য নয়। ডকুমেন্ট.উইট পৃষ্ঠার শেষে যেমন এটি যুক্ত হয় তেমন সামগ্রী যুক্ত করে না। তারা জায়গায় লেখা হয়।
পিটার বেইলি

1
@ পিটার বেইলি, আমি জানি এটি একটি পুরানো থ্রেড, তবে সত্যই এটি হ্রাস করা উচিত নয়। ডকুমেন্ট.ওলিখন () পৃষ্ঠাটি লোড হওয়ার সময় ইনলাইন চালায় কিনা তার উপর নির্ভর করে কিনা। পৃষ্ঠা লোড হওয়ার পরে যদি এটি কোনও ফাংশন থেকে কল করা হয় তবে প্রথম ডকুমেন্ট.উইট () পুরো শরীরটি প্রতিস্থাপন করবে এবং পরবর্তী কলগুলি এতে যুক্ত হবে।
অক্টোপাস

3
@ অক্টোপাস হ্যাঁ, তবে এটি পরিস্থিতিগত। এটি সেই দৃশ্যে সংযোজন করে কেবল একটি নতুন দলিল আছে। এটি এখনও "ডকুমেন্ট.ওরাইট () সংযোজন" বলা সঠিক নয়। হ্যাঁ, এটি একটি পুরানো উত্তর এবং একটি পুরানো ডাউনওয়েট, তবে আমি এখনও এর পাশে আছি।
পিটার বেইলি

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