HT হেড বনাম জিইটি পারফরম্যান্স


111

আমি একটি REST ওয়েব পরিষেবা সেট আপ করছি যা যত দ্রুত সম্ভব হ্যাঁ বা না উত্তর দেওয়া দরকার N

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

আমি মনে করি যে আমার সার্ভারে খোলা / বন্ধ না হওয়ার জন্য আমি বডি স্ট্রিম অর্জন করেছি (প্রায় 1 মিলিসেকেন্ড?)। যেহেতু ফিরতে বাইটের পরিমাণ খুব কম, তাই আমি কি আইপি প্যাকেট সংখ্যায় পরিবহণে কোনও সময় অর্জন করতে পারি?

আপনার প্রতিক্রিয়ার জন্য আগাম ধন্যবাদ!

সম্পাদনা:

প্রসঙ্গটি আরও ব্যাখ্যা করতে:

  • আমার কাছে REST পরিষেবাদির একটি সেট রয়েছে যা তারা কিছু সক্রিয় অবস্থায় থাকলে কিছু প্রক্রিয়া চালায়।
  • আমার কাছে আরইএসটি পরিষেবা রয়েছে যা এই প্রথম পরিষেবাগুলির স্থিতি নির্দেশ করে।

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

আমি দুটি পদ্ধতির (হেড বনাম জিইটি) মধ্যে পার্থক্যটি বেঞ্চমার্ক করার চেষ্টা করেছি, যা 1000 বার কল চলছিল, কিন্তু কোনও লাভ দেখেনি (<1 মিমি) ...


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

উত্তর:


173

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

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

যদি আপনার সত্যিকারের তথ্য প্রয়োজন হয় তবে এমন কোনও উত্স সম্পর্কিত মেটা ডেটা যা HTTP শিরোনামগুলিতে সুন্দরভাবে উপস্থাপন করা যেতে পারে, বা উত্সটি বিদ্যমান কিনা তা যাচাই করার জন্য, HEAD সুন্দরভাবে কাজ পারে।

উদাহরণস্বরূপ, ধরুন আপনি 123 রিসোর্স বিদ্যমান কিনা তা পরীক্ষা করতে চান। একটি 200অর্থ "হ্যাঁ" এবং একটি 404অর্থ "না":

HEAD /resources/123 HTTP/1.1
[...]

HTTP/1.1 404 Not Found
[...]

তবে, আপনি যদি আপনার আরইএসটি পরিষেবা থেকে "হ্যাঁ" বা "না" চান তা মেটা ডেটার পরিবর্তে উত্সেরই একটি অংশ হয়ে থাকে, আপনার ব্যবহার করা উচিত GET


2
এই উত্তরের মতো সেরা জিনিসগুলি সর্বদা সহজ। ভাল খবর!
আফজাল এসএইচ

দুর্দান্ত উত্তর! আমি একটি প্রশ্ন পেয়েছি: touchসার্ভারে একটি পোষ্টের ভিউ গণনা আপডেট করার জন্য কমান্ড হিসাবে এটি ব্যবহার সম্পর্কে কী ? পোস্টের ডেটা ইতিমধ্যে একটি সাধারণ /postsকলের মাধ্যমে পুনরুদ্ধার করা হয়েছে , তাই ব্যবহারকারী কোনওভাবে পোস্টের সাথে ইন্টারঅ্যাক্ট করার পরে আমি ভিউ কাউন্টটি আপডেট করতে চাই।
আলাপ

1
@ অ্যালাপ যদি আপনি HEADঅনুরোধগুলির জন্য কোনও ভিউ কাউন্টার আপডেট করতে চলেছেন তবে অনুরোধগুলির জন্য আপনারও এটি করা উচিত GET। ব্যবহার করার সিদ্ধান্ত নেওয়া GETবা HEADশেষ পর্যন্ত এইচটিটিপি ক্লায়েন্টের উপর নির্ভর করে। আপনার সার্ভারের উভয় অনুরোধের ধরণের জন্য একইরকম আচরণ করা উচিত, যদি সাড়া দেওয়ার সময় কোনও প্রতিক্রিয়া বডি না থাকে HEAD। ভিউ কাউন্টারের মতো এটি কার্যকর করার কোনও ভাল উপায় কিনা তা আমি নিশ্চিত নই।
আন্দ্রে ডি

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

1
@ সিদ্ধার্থ, এটি প্রায়শই সত্য, তবে সবসময় নয়। Content-Lengthব্যবহার করার সময় বাদ দেওয়া যেতে পারে Transfer-Encoding: chunked। এমনকি Content-Lengthএটি সহ , এটি সম্ভব যে প্রকৃত সংস্থানটি এনে সার্ভারটি শিরোনামে ব্যবহৃত সংস্থার আকার এবং অন্যান্য মেটাডেটা পেতে পারে। সম্ভবত সেই মেটাডেটা খুব দ্রুত অ্যাক্সেসের জন্য মেমরিতে ক্যাশেও রয়েছে। এগুলি খুব বাস্তবায়ন নির্দিষ্ট।
আন্দ্রে ডি

38

অনুরোধকারী জিজ্ঞাসা করা একই প্রশ্নটি খুঁজতে গিয়ে আমি এই উত্তরটি পেয়েছি। আমি এটি http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html এও পেয়েছি :

সার্ভারটি প্রতিক্রিয়াতে কোনও বার্তা-শরীরে ফেরত পাঠানো উচিত নয় ব্যতীত শিরোনামের পদ্ধতিটি জিইটির সমান। একটি প্রধান অনুরোধের প্রতিক্রিয়া হিসাবে এইচটিটিপি শিরোনামগুলিতে অন্তর্ভুক্ত মেন্টেনফর্মেশনটি জিইটি অনুরোধের প্রতিক্রিয়ায় প্রেরিত তথ্যের অনুরূপ হওয়া উচিত। এই পদ্ধতিটি সত্তা-দেহ নিজেই স্থানান্তর না করে অনুরোধ দ্বারা সূচিত সত্তা সম্পর্কে মেন্টেনফর্মেশন অর্জনের জন্য ব্যবহার করা যেতে পারে। এই পদ্ধতিটি প্রায়শই বৈধতা, অ্যাক্সেসযোগ্যতা এবং সাম্প্রতিক পরিবর্তনের জন্য হাইপারটেক্সট লিঙ্কগুলি পরীক্ষার জন্য ব্যবহৃত হয়।

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


14

আমি দৃ kind়ভাবে এই ধরণের পদ্ধতিকে নিরুৎসাহিত করি।

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

এবং মনে রাখবেন: প্রাথমিক অপ্টিমাইজেশন হ'ল সমস্ত মন্দের মূল।


8

আপনার পারফরম্যান্স GET অনুরোধের পরিবর্তে একটি হেড অনুরোধ ব্যবহার করে খুব কমই বদলে যাবে।

তদাতিরিক্ত আপনি যখন এটি বিশ্রামের মতো হতে চান এবং যখন আপনি ডেটা পেতে চান আপনার একটি প্রধান অনুরোধের পরিবর্তে একটি জিইটি অনুরোধ ব্যবহার করা উচিত।


8

মাথা + শরীর নিয়ে আসে, হেড কেবল মাথা নিয়ে আসে। কোনটি দ্রুত তা মতের বিষয় হওয়া উচিত নয়। আমি উপরের উত্সাহীন উত্তরগুলি বাতিল করতে চাই না। আপনি যদি হেডের চেয়ে মেটার তথ্যের সন্ধান করেন তবে এই উদ্দেশ্যে।


3

'বডি স্ট্রিম উন্মুক্ত / বন্ধ থাকায়' আপনার উদ্বেগ আমি বুঝতে পারি না। প্রতিক্রিয়া বডিটি এইচটিএমএস প্রতিক্রিয়া শিরোনামের সমান প্রবাহের উপরে চলে যাবে এবং দ্বিতীয় সংযোগ তৈরি করবে না (যা উপায় 3-6 মিমির মধ্যে বেশি)।

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

আমার উত্তর হ'ল না, GET ব্যবহার করুন যদি এটি বোধগম্য হয়, হেড ব্যবহার করে কোনও পারফরম্যান্স লাভ নেই gain


ধরুন কন্টেন্টটি 100MB। অবশ্যই মাথা আকারে কন্টেন্ট চেয়ে কম হবে। এখন আমরা যখন আপনার মতে জিইটি বা হেড পদ্ধতি দ্বারা সেই সংস্থানটি অনুরোধ করি তখন তাদের মধ্যে কোনও পারফরম্যান্সের পার্থক্য নেই ?!
মোহাম্মদ আফরাশতেহ

3
ওপিতে প্রতিক্রিয়ার শরীরে 250 টি অক্ষর বর্ণিত হয়েছে। 100MB নয়। এটি পুরোপুরি একটি আলাদা প্রশ্ন।
স্ম্যাসে

1

হেড অনুরোধগুলি জিইটি অনুরোধের মতো , প্রতিক্রিয়াটির শূন্যস্থান ব্যতীত। এই ধরণের অনুরোধটি ব্যবহার করা যেতে পারে যখন আপনি চান সমস্ত ফাইল সম্পর্কে মেটাডেটা থাকে তবে ফাইলটির সমস্ত ডেটা পরিবহনের প্রয়োজন হয় না।


-1

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

আমি আরও জিইটি-র সাথে যাব কারণ এটি আরও সঠিক। আপনি এইচটিটিপি শিরোনামে সামগ্রী ফেরত দেওয়ার কথা নয়, কেবল মেটাডেটা।


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