আমি লোকদের শুনছি (বিশেষত ক্রকফোর্ড) বলছি যে ডিওএম একটি ভয়ানক এপিআই, তবে সত্যই এই বিবৃতিটিকে ন্যায়সঙ্গত করে না। ক্রস ব্রাউজারের অসঙ্গতিগুলি ছাড়াও, ডিওএমকে এত খারাপ বলে গণ্য করার কয়েকটি কারণ কী?
আমি লোকদের শুনছি (বিশেষত ক্রকফোর্ড) বলছি যে ডিওএম একটি ভয়ানক এপিআই, তবে সত্যই এই বিবৃতিটিকে ন্যায়সঙ্গত করে না। ক্রস ব্রাউজারের অসঙ্গতিগুলি ছাড়াও, ডিওএমকে এত খারাপ বলে গণ্য করার কয়েকটি কারণ কী?
উত্তর:
ক্রোকফোর্ড "আন ইনকোভেনিয়েন্ট এপিআই: থিওরি অফ দম" শিরোনামে একটি বিস্তৃত উপস্থাপনা দিয়েছেন যেখানে তিনি DOM সম্পর্কে নিজের মতামত কম বেশি ব্যাখ্যা করেছেন। এটি দীর্ঘদেহ (১ ঘন্টা 18 মি), তবে বেশিরভাগ ক্রকফোর্ডের উপস্থাপনা হিসাবে এটি বেশ উপভোগযোগ্য এবং শিক্ষামূলক।
ক্রস ব্রাউজারগুলির অসঙ্গতিগুলি তার প্রধান উদ্বেগ বলে মনে হয় এবং আমি এটি সম্মত করি যে এটি ডোম সম্পর্কে একমাত্র সবচেয়ে বিরক্তিকর বিষয়। তিনি শনাক্ত করেন:
- মালিকানা ট্র্যাপ (ব্রাউজার এবং সার্ভার ট্র্যাপ),
- নিয়ম ভঙ্গ,
- কর্পোরেট যুদ্ধ,
- চরম সময়ের চাপ
বিভিন্ন অসঙ্গতির পিছনে মূল বিষয় হিসাবে, উপস্থাপনা, সেশন বা ইন্টারঅ্যাক্টিভিটি যুক্ত করে ওয়েবের মূল দৃষ্টিভঙ্গিতে কখনও প্রত্যাশিত ছিল না। অসঙ্গতির কয়েকটি উদাহরণ অন্তর্ভুক্ত:
document.all
, একটি মাইক্রোসফ্ট কেবল বৈশিষ্ট্য, name
এবং সত্যইid
document.getElementById(id)
, document.getElementsByName(name)
, *node*.getElementsByTagName(tagName)
) এবং আরও কয়েকটি উদাহরণ দিয়ে চালিয়ে যায়, বেশিরভাগটি ডিওএম, মেমরি ফাঁস এবং ইভেন্ট ট্রিকলিং এবং বুদবুদকে লক্ষ্য করে লক্ষ্য করে। একটি সংক্ষিপ্তসার স্লাইড রয়েছে, "DOM এর ক্র্যাকস" শিরোনাম:
- DOM বাগলিস্ট ব্রাউজারে সমস্ত বাগ অন্তর্ভুক্ত করে।
- DOM বাগলিস্টে সমস্ত সমর্থিত ব্রাউজারগুলিতে সমস্ত বাগ রয়েছে।
- কোনও ডিওএম পুরোপুরি মান প্রয়োগ করে না।
- অনেকটা ডিওএম কোনও স্ট্যান্ডার্ডে বর্ণিত হয় না।
সংক্ষেপে, এটি একটি অগোছালো, অগোছালো এপিআই। এটি নিটপিকিংয়ের মতো মনে হতে পারে তবে আপনার মনে রাখতে হবে যে আপনি যখন ওয়েবের জন্য বিকাশ করছেন তখন আপনার গ্রাহকরা যে ব্রাউজারটি ব্যবহার করবেন তা আপনি খুব কমই বেছে নিতে পারেন। প্রতিটি বড় ব্রাউজারের কমপক্ষে দুটি সংস্করণে সমস্ত কিছু পরীক্ষা করা খুব শীঘ্রই পুরানো হয়ে যায়। একটি এপিআই সামঞ্জস্যপূর্ণ হওয়ার কথা এবং ডিওএম ব্রাউজার যুদ্ধের শিকার হয়েছিল , তবে এটি আরও ভাল হচ্ছে। এটি এখনও ডাব্লু 3 সি এর মতো প্ল্যাটফর্ম নিরপেক্ষ নয় (এবং আমি মনে করি আমাদের সকলেরই এটি হওয়া উচিত) তবে ব্রাউজার বিক্রেতারা পাঁচ বা দশ বছর আগের তুলনায় তাদের সহযোগিতা করতে বেশ আগ্রহী বলে মনে হয়।
document.all
মানদণ্ডে রয়েছে
document.all
উদাহরণস্বরূপ, এটি মান কিন্তু একটি হিসাবে ইচ্ছাকৃত লঙ্ঘন ।
DOM এর সাথে কী সমস্যা? জাভা-অনুপ্রাণিত বাক্য গঠন (যা ক্রোকফোর্ড স্পর্শ করেছেন) বাদে, কিছুই নয়।
ব্রাউজার বিক্রেতাদের ক্ষেত্রে "ভুল" আংশিকভাবে প্রযোজ্য; "ভুল" কী বিকাশকারীদের জন্য প্রযোজ্য; "ভুল" কি অজ্ঞতার ক্ষেত্রে প্রযোজ্য।
তো, কোথায় শুরু করব?
ব্রাউজার বিক্রেতারা
প্রথম প্রথম, ব্রাউজার বিক্রেতারা "সেরা", "দ্রুততম", "সবচেয়ে সহজ" ইত্যাদি হয়ে দশক ধরে প্রতিযোগিতামূলকভাবে লড়াই করেছেন প্রথম দশকে (199x — 2000), মাইক্রোসফ্ট রোস্টকে শাসন করেছিল। ইন্টারনেট এক্সপ্লোরার উদ্ভাবনী ধারণা যেমন:
innerHTML
এবং
outerHTML
;innerText
এবং সহ সহজ পাঠ্য হেরফের outerText
;*tachEvent
) যা DOM স্তর 2 ইভেন্টের ( *EventListener
) জন্য নীলনকশা ছিল ।প্রত্যেকে আজকের ওয়েব ডেভলপমেন্ট স্ট্যাকের জন্য (আরও ভাল এবং আরও খারাপের জন্য) অবদান রেখেছেন। অপেরা এমনকি সংস্করণ ((2003) এ তিনটিই প্রয়োগ করতে পেরেছিল।
তবে নেটস্কেপের নিজস্ব ডোম ইভেন্টের মডেল ছিল ( *EventListener
)। 2000 সালে, এটি ডোম স্তর 2 ইভেন্ট ইভেন্টের স্পেসিফিকেশন হয়ে উঠেছে। সাফারি 1 (2003) এই মডেলটি প্রয়োগ করেছে; অপেরা 7 (2003) এই মডেলটি বাস্তবায়ন করেছে। নেটস্কেপের ধ্বংসাবশেষ মোজিলা হয়ে উঠলে ফায়ারফক্স ১ (2004) মডেলটি উত্তরাধিকার সূত্রে পেয়েছে।
দ্বিতীয় দশকের প্রথম বিভাগের জন্য (2000-2004) মাইক্রোসফ্ট সুপ্রিম রাজত্ব করেছিল। ইন্টারনেট এক্সপ্লোরার 6 (2001) তখনকার সেরা ব্রাউজারের থেকে খুব দূরে ছিল। এর অন্যতম প্রতিযোগী, অপেরা 6 (2001), ডিওএম লেভেল 1 কোর ( createElement
এট আল।) বাস্তবায়ন করতে পারেনি মাইক্রোসফ্ট স্পেসিফিকেশন এমনকি একটি সুপারিশ হওয়া (1998) হওয়ার আগেই এটি ইন্টারনেট এক্সপ্লোরার 4 (1997) এ প্রয়োগ করেছিল।
তবে দ্বিতীয় দশকের দ্বিতীয় বিভাগ (2004—2010) মাইক্রোসফ্টের জন্য বিপর্যয়কর প্রমাণিত হবে। 2003 সালে, অ্যাপল সাফারি 1.0 প্রকাশ করেছে; 2004 সালে, মোজিলা ফায়ারফক্স 1.0 শেষ করেছে। মাইক্রোসফ্ট আপাতদৃষ্টিতে ব্রাউজার পর্বতের উপরে তার সিংহাসনে ঘুমিয়ে ছিল। ইন্টারনেট এক্সপ্লোরার 7 2006 পর্যন্ত প্রকাশিত হয়নি: ইন্টারনেট এক্সপ্লোরার 6 এর মুক্তির তারিখের পাঁচ বছরের ব্যবধান। ইন্টারনেট এক্সপ্লোরার সংস্করণ 4 থেকে 6 এর বিপরীতে সংস্করণ 7 নতুন উদ্ভাবিত; DOM পরিবর্তনগুলি মিনিট ছিল। প্রায় আড়াই বছর পরে, ইন্টারনেট এক্সপ্লোরার 8 প্রকাশিত হয়েছিল। মাইক্রোসফ্ট তার ঘুম থেকে জেগেছিল এবং লক্ষ্য করেছে যে অন্যান্য ব্রাউজার বিক্রেতারা প্রচুর ওয়েব মানের প্রায় তৈরি হয়েছিল co দুর্ভাগ্যক্রমে, মাইক্রোসফ্টের শেষ আসল উদ্ভাবনের পরে অনেক বেশি সময় কেটে গিয়েছিল। ব্রাউজার বিক্রেতাদের মধ্যে একটি আন্দোলন তৈরি করা হয়েছিল। ডাব্লু 3 সিতে স্পেসিফিকেশন ফর্মটিতে নতুন ডিওএম বৈশিষ্ট্যগুলি যুক্ত করা হয়েছিল; মাইক্রোসফ্ট এর ধারণা অতীতে বাকি ছিল। মাইক্রোসফ্ট ইভেন্ট ইভেন্ট (*tachEvent
) ডিওএম লেভেল 2 ইভেন্ট ইভেন্টের মডেলটির জন্য তৈরি করা হয়েছিল। ইন্টারনেট এক্সপ্লোরার 9 (2011) সংস্করণ পর্যন্ত পূর্ববর্তী মডেলটি কার্যকর করে নি, যা ডিওএম স্তর 3 ইভেন্ট ইভেন্টে পরিণত হয়েছে।
মাইক্রোসফ্টের (ডিওএম) ফলগুলি নিম্নলিখিত বিষয়গুলি দ্বারা সংক্ষিপ্ত করা যেতে পারে:
উইন্ডোজের মূল বৈশিষ্ট্য হিসাবে উপস্থিতি এবং এর ফলে ওএস-স্তরের সুরক্ষা প্রয়োজনীয়তা;
ক্লায়েন্ট-সাইড কোডের জন্য অ্যাক্টিভএক্সের উপর নির্ভরতা;
সংস্করণ 6 (2001) এর পরে কৌতূহলীভাবে বন্ধ হওয়া উদ্ভাবন।
(ওয়েব) বিকাশকারীগণ
দ্বিতীয়ত, বিকাশকারীরা একটি নির্দিষ্ট পরিমাণে দোষ বহন করে। ওয়েব যেমন বন্ধ করে চলেছে, তত বেশি সংখ্যক লোক ওয়েব বিকাশে "ছকছক" করছে। এর ফলে প্রতিভা ও কাজের নৈতিকতা দুর্বল হয়ে পড়েছিল। সমস্যাটি অবশ্য মূলত মনোভাব নিয়েই। "এটি দ্রুত সম্পন্ন করুন" এর চেয়ে বেশি অগ্রাধিকার নিয়েছে "এটি ঠিক করুন" over ফলস্বরূপ, অসংখ্য ওয়েব পৃষ্ঠাগুলি বিভিন্ন ব্রাউজারের সাথে বেমানান। এই অসম্পূর্ণতার অন্যতম প্রধান কারণ হ'ল "ব্যবহারকারী এজেন্ট স্নিফিং" নামে পরিচিত একটি অনুশীলন। যদিও অনুশীলনটি আজও ব্যবহারে রয়েছে, এটি ভুল এবং ক্ষতিকারক উভয়ই হিসাবে প্রমাণিত হয়েছে। অপেরা এমনকি ইউজার এজেন্ট সংস্করণটি "9.80" সংস্করণ 10 (2009) এবং এর বাইরেও "ফ্রিজ" করতে পেরেছিল। এটি ভ্রান্ত স্ক্রিপ্টগুলি ভাঙ্গা থেকে রোধ করার উদ্দেশ্যে করা হয়েছিল। "আরও ভাল একটি অনুশীলন বলা হয়"
অজ্ঞতা
তৃতীয়ত, আমার দোষের পছন্দের বিষয়টি অজ্ঞতা; ব্রাউজার বিক্রেতারা ইউনিফাইড স্পেসিফিকেশন তৈরি করতে প্রায় একসাথে কাজ করেনি এ বিষয়টি সম্পর্কে অজ্ঞতা; মাইক্রোসফ্ট অন্যান্য ব্রাউজারের ব্যবহারকারীদের দূরে রেখেছিল তা সম্পর্কে অজ্ঞতা; সত্য যে ডেভেলপারদের হয় খুবই অলস বা খুব ক্ষীণদৃষ্টি ব্রাউজার গবেষণা বিরক্ত করার জন্য হয় অজ্ঞতা (বিশেষ করে যারা না En Vogue ।) API এবং বাস্তবায়নের মধ্যে অনেক পার্থক্য আছে। গবেষণা এবং পরীক্ষার উভয় পরিমাণের সমৃদ্ধ পরিমাণের পাশাপাশি একটি সরল-তবু-রক্ষণাত্মক পদ্ধতির (ডোম 0 এর উপর নির্ভরতা) মাধ্যমে এড়ানো যায়। অজ্ঞতা এই ধারণাটি নিয়েছিল যে ইন্টারনেট এক্সপ্লোরার 6 পৃথিবীর উপর এক ধর্ষণ (পূর্ব বর্ণিত ব্রাউজার সিংহাসনে এটির জায়গাটি স্মরণ করুন))
প্রতিফলন
দুঃখের বিষয়, DOM কেবল একটি ভুল বোঝাবুঝি API। অনেকে পাথর নিক্ষেপ করার ইচ্ছা পোষণ করে (এফইউডি দিয়ে), তবে এর জটিলতা শিখার খুব কম ইচ্ছা। এই অজ্ঞতার একটি ফল হ'ল ডিওএম "নির্বাচকদের" পরিচয়। হার্টের ডিওএম হ'ল ডকুমেন্ট ট্রি (গুলি) চালনার জন্য একটি এপিআই। পার্সড ডকুমেন্টের রূপটি প্রদত্ত জটিল সমস্যার জন্য ট্রি ট্রভারসাল ব্যবহার করা উচিত। ডিওএম সিলেক্টর এপিআই প্রবর্তনের সাথে সাথে একজন বিকাশকারী এখন ব্রাউজারের সিএসএস ট্র্যাভারসাল ইঞ্জিনটি উত্তোলন করতে পারবেন। এটি বেশ সুবিধাজনক, তবে এটি একটি নথি গাছের প্রকৃত রূপটি গোপন করে। "নির্বাচক" সহ, উপাদান নোড পুনরুদ্ধার প্রাথমিক element তবে, ডিওএম-এ অন্য এগারটি নোড নির্দিষ্ট করা আছে। পাঠ্য নোডের কী? মন্তব্য নোড? নথি নোড? এগুলি নোড যা প্রায়শই ডিওএমের সাথে ইন্টারঅ্যাক্ট করার সময় পছন্দসই হয়।
উপসংহার
সংক্ষেপে, আপনার সময় নিন এবং বিভিন্ন ডিওএম স্পেসিফিকেশন পড়ুন। যতটা সম্ভব ব্রাউজারে টেস্ট কোড। যদি ইন্টারনেট এক্সপ্লোরার অদ্ভুত আচরণ করে বলে মনে করা হয়, তবে এমএসডিএনের সাথে পরামর্শ করুন। বেশিরভাগ ক্ষেত্রেই আচরণটি নথিভুক্ত হয়।
(Anতিহাসিক উপাখ্যানগুলি ভুল হতে পারে এবং হতে পারে; যেকোনো ভুল-উত্থাপনকে স্বাগত জানানো হয়))
-মথি
ডিওএম একটি ভয়ঙ্কর এপিআই
এটি ভুল । ডোম কোনও ভয়ঙ্কর এপিআই নয়।
প্রথমত, মনে রাখবেন যে ডিওএম হ'ল ভাষা অজ্ঞাত। সমস্ত বড় ভাষা API প্রয়োগ করেছে। এটি কারণ আপনি কেবল এটি ব্রাউজারে ব্যবহার করেন না, তবে যে কোনও জায়গায় আপনার এক্সএমএল মোকাবেলা করতে হবে।
দ্বিতীয়ত, নোট করুন যে ডিওএম ক্লাসগুলি ব্যাখ্যা করে না তবে ইন্টারফেসগুলি। এটির একটি খুব গুরুত্বপূর্ণ বিষয় রয়েছে: ভাষাগুলি তাদের নির্মাণ ও দর্শনের পক্ষে এটি কার্যকর করতে পারে। এটি অন্যদের সাথে প্রয়োগের ক্ষেত্রে ধারাবাহিকভাবে থাকা থেকে সমস্ত ভাষাকে মুক্তি দেয়।
তৃতীয়, এক্সএমএল (অন্যটি স্যাক্স) পার্স করার দুটি প্রধান উপায়ের মধ্যে একটি হ'ল ডিওএম, এবং আপনার প্রসঙ্গের উপর নির্ভর করে, ডওম খুব কার্যকরী হতে পারে।
আপনি যা উল্লেখ করছেন সেটি হ'ল ব্রাউজার ডিওএম। এবং আমি সম্মত হই যে ব্রাউজারে ডোম "খারাপ" অনুভব করে। কারণটির অংশটি হ'ল ব্রাউজারের অসম্পূর্ণতা। তবে, আমি একমত নই যে ব্রাউজারে তারা ডমের খারাপ খ্যাতির একমাত্র কারণ।
প্রথমত, আপনি যদি এটির বিষয়ে চিন্তা করেন তবে ডিওএম সেই অঞ্চলগুলির মধ্যে একটি যেখানে এই অসম্পূর্ণতাগুলি তুলনামূলকভাবে সহজ relatively তুলনায়, উদাহরণস্বরূপ, ইভেন্টগুলি খুব কৌতুকময় এবং বিরল বিরক্তিকর।
দ্বিতীয়ত, ডিওএম বৈশিষ্ট্যগুলির জন্য বৈশিষ্ট্য সনাক্তকরণ অন্যান্য অঞ্চলের তুলনায় সহজ।
তৃতীয়, DOM 3 উপায় ভাল - এবং আজ সমস্ত ব্রাউজারগুলি এর বেশিরভাগ সমর্থন করে।
অবশ্যই, অসুবিধাগুলি বিরক্তিকর, তবে আপনি যখন তাদের কাছে নামেন, ডম খুব কম জ্বালা করে।
আমি মালিকানা ফাঁদ, কর্পোরেট যুদ্ধ ইত্যাদির কারণগুলির সাথেও একমত নই।
আমি মনে করি এটি জাভাস্ক্রিপ্টের একটি দ্য লাইটওয়েট ভাষা হিসাবে দর্শনের মধ্যে সংযোগ বিচ্ছিন্ন এবং জাভা থেকে অনুপ্রাণিত ডিওএম এর বাস্তবায়ন - যা হতাশার অনেকটা অবদান রেখেছে।
দ্বিতীয়ত, ডিওএম এক্সএমএল এর জন্য ডিজাইন করা হয়েছে এবং এটি এইচটিএমএল-এর জন্য রূপান্তর করা হয়েছে। তাই ব্রাউজারে, আমাদের ঠিক দুটি ডোম রয়েছে - এইচটিএমএল ডিওএম এবং এক্সএমএল ডোম - এবং সেগুলি বেমানান।
তৃতীয়ত, ব্রাউজারে ডিওএম ট্রভারসাল ভাল নয়। এইচটিএমএল ডিওমের জন্য আমাদের কাছে এক্সপথ নেই, সুতরাং সিএসএস নির্বাচক ইঞ্জিনগুলির আগে ট্র্যাভারসালগুলি করা সত্যিই ক্লান্তিকর ছিল।
পরিশেষে, আমি আজকে মনে করি , আধুনিক ব্রাউজারগুলি (এবং পুরানো ব্রাউজারগুলির সাথে ধীরে ধীরে বিলীন হয়ে) ডমকে খারাপ বলার কোনও কারণ নেই। এটি অবশ্যই ব্রাউজারে আরও ভাল হতে চলেছে - এপিআই এবং বাস্তবায়ন উভয়ই।
currentTarget
ইভেন্ট ইভেন্টের জন্য যদি আপনার সম্পত্তিটি সমর্থন করতে হয় - তবে এটি ক্ষুদ্র হবে?
currentTarget
কেবল ইভেন্ট বুদবুদ নয় - এবং আপনার নিজের ইভেন্ট বুদবুদ বাস্তবায়িত করা কি বুদ্ধিমানের কাজ হবে?
dataManager
বাইরে বসে, আপনি বলেন যে কোড তুচ্ছ? :)
Apart from cross-browser inconsistencies
তা কি যথেষ্ট নয়?