2010-12-01 21 views
5

मैंने हमेशा सोचा है कि एचटीएमएल पेज बनाने के लिए क्लाइंट-साइड कोड बनाम सर्वर-साइड कोड का उपयोग करने के बीच चयन करने का निर्णय कैसे लिया जाए। मैं अपने प्रश्न को और समझाने के लिए एक बहुत ही सरल PHP बनाम जावास्क्रिप्ट/jquery उदाहरण का उपयोग करूंगा। आपकी सलाह और टिप्पणी बहुत सराहना की है।सर्वर-साइड या क्लाइंट-साइड पर वेब पेज बनाना?

कहें कि मैं अपने वेब पेज में एक प्रकार की रिपोर्ट चुनने के लिए किसी उपयोगकर्ता को एक वेब पेज पेश करने वाला हूं। जो अधिक समझ में आता है?

सर्वर साइड निर्माण के लिए, मैं यह कर चाहते हैं:

<!-- filename: reportScreen.html --> 
<div id="reportChoices"> 
</div> 

<!-- I could put this in the document.ready handler, of course --> 
<script type="text/javascript"> 
$.getJSON("rt.php", {}, function(data) { 
var mainDiv = $("#reportChoices"); 
$.each(data, function(idx, jsonData) { 
    var newInput = $(document.createElement('input')); 

    newInput 
    .attr("type", "radio") 
    .attr("name", "reportType") 
    .attr("value", jsonData["htmlID"]) 

    mainDiv.append(newInput).append(jsonData["htmlLabel"]); 
}); 
}; 
</script> 

:

<div id="reportChoices"> 

<?php 
// filename: reportScreen.php 
// just for the sake of simplicity, say a database returns the following rows 
// that indicates the type of reports that are available: 

$results = array(
    array("htmlID"=>"battingaverage", "htmlLabel"=>"Batting AVG report"), 
    array("htmlID"=>"homeruntotals", "htmlLabel"=>"Home Run Totals report"), 
); 

foreach ($results AS $data) 
    echo "<input type='radio' name='reportType' value='{$data['htmlID']}'/>{$data['htmlLabel']}"; 
?> 

</div> 

क्लाइंट-साइड कोड का उपयोग करना, मैं निम्नलिखित की तरह पेज बनाने के लिए जावास्क्रिप्ट प्राप्त होता

<?php 
// filename: rt.php 
// again, let's assume something like this was returned from the db regarding available report types 

$results = array(
    array("htmlID"=>"battingaverage", "htmlLabel"=>"Batting AVG report"), 
    array("htmlID"=>"homeruntotals", "htmlLabel"=>"Home Run Totals report"), 
); 

echo json_encode($results); 
?> 

यह एक बहुत ही सरल उदाहरण है, लेकिन इधर-उधर: सभी मैं सर्वर पर की आवश्यकता होगी एक डेटा डंप PHP स्क्रिप्ट जैसे है मैं यह हूं, मैं विभिन्न क्षेत्रों में पेशेवरों और विपक्ष को देखता हूं।

1 - सर्वर-साइड समाधान का सब कुछ कैसे बनाया गया है इसके पीछे वास्तविक प्रोग्रामिंग तर्क को छिपाने में सक्षम होने का लाभ है। जब उपयोगकर्ता पृष्ठ स्रोत को देखता है, तो वे जो भी देखते हैं वह पहले से निर्मित वेब पेज है। दूसरे शब्दों में, क्लाइंट-साइड समाधान आपके सभी स्रोत कोड और प्रोग्रामिंग तर्क को देता है कि कुछ चीजें कैसे बनाई जाती हैं। लेकिन आप अपने स्रोत को और अधिक गूढ़ दिखने के लिए एक मिनीफायर का उपयोग कर सकते हैं।

2 - क्लाइंट-साइड समाधान क्लाइंट सिस्टम पर "संसाधन लोड" स्थानांतरित करता है (यानी ब्राउज़र को अधिकांश पृष्ठ बनाने के लिए क्लाइंट के कंप्यूटर संसाधनों का उपयोग करने की आवश्यकता होती है) जबकि सर्वर साइड समाधान नीचे गिरता है, ठीक है, सर्वर।

3 - रखरखाव और पठनीयता की बात आने पर क्लाइंट-साइड समाधान शायद अधिक सुरुचिपूर्ण है। लेकिन फिर, मैं PHP पुस्तकालयों का उपयोग कर सकता था जो HTML नियंत्रणों को मॉड्यूलर करते हैं और इसे बहुत अधिक पठनीय बनाते हैं।

कोई टिप्पणी? अग्रिम में धन्यवाद।

उत्तर

3

कॉन (क्लाइंट समाधान): क्लाइंट-साइड समाधान क्लाइंट पर आपके कोड को सही तरीके से निष्पादित करने पर निर्भर करता है। चूंकि आपके पास कोई क्लाइंट सिस्टम आपके कोड को निष्पादित करने पर कोई नियंत्रण नहीं रखता है, यह सुनिश्चित करना बहुत कठिन है कि यह लगातार सर्वर-साइड समाधान के समान परिणाम देगा।

यह विशेष समस्या वास्तव में को क्लाइंट-साइड समाधान की आवश्यकता नहीं है, है ना? मैं सर्वर-साइड समाधान के साथ रहना होगा। एकमात्र अतिरिक्त काम foreach लूप एक echo के साथ है और यह वास्तव में इतना संसाधन नहीं है (जब तक आप इसे प्रोफाइल नहीं करते हैं और जानते हैं कि यह है)? और परिणामस्वरूप कोड सभी एक ही स्थान पर और सरल है।

1

आमतौर पर, क्लाइंट पर जावास्क्रिप्ट सक्षम होने पर निर्भर नहीं है। इसके अतिरिक्त, आपके पृष्ठ को अधिकांश खोज इंजनों द्वारा क्रॉल नहीं किया जाएगा। आप अपने सर्वर/सर्वर-साइड कोड के बारे में जानकारी का खुलासा करते हैं (जब तक कि आप इसे स्पष्ट रूप से सार नहीं देते)।

यदि आप डेटा को देखने में बदलना चाहते हैं, तो आप एक्सएसएलटी पर एक नज़र डालना चाहेंगे। यदि आप पहले से नहीं हैं, तो पढ़ने के लिए एक और चीज प्रगतिशील वृद्धि है।

http://alistapart.com/articles/understandingprogressiveenhancement/

पहले क्लाइंट साइड समाधान आप प्रस्तुत में, यह वास्तव में कम कुशल है एक अतिरिक्त HTTP अनुरोध है क्योंकि। और दूसरा संभवतः बहुत कुशल नहीं है, जिसमें सभी डेटा json_encode के साथ संसाधित किया जाना चाहिए।

हालांकि, यदि आप जो काम कर रहे हैं वह एक समृद्ध वेब एप्लिकेशन है जो जावास्क्रिप्ट पर पर निर्भर करता है, तो मुझे जावास्क्रिप्ट के साथ सबकुछ करने में कोई समस्या नहीं दिखती है।

+0

दरअसल, Google जेएस सामग्री को अनुक्रमणित करने में बड़े कदम उठा रहा है। उदाहरण के लिए देखें http://googlewebmastercentral.blogspot.com/2007/11/spiders-view-of-web-20.html – nico

1

मुझे संदेह है कि रिपोर्ट पीढ़ी को क्लाइंट साइड पर ले जाना वास्तव में किसी भी संसाधन को बचाता है - याद रखें कि यह अभी भी आपके (?) सर्वर पर HTTP अनुरोध कर रहा है, इसलिए डेटाबेस प्रोसेसिंग अभी भी हो चुकी है।

इसके अलावा, क्लाइंट पक्ष पर अपना डेटाबेस स्कीमा देकर डेटाबेस हमलों के लिए एक नुस्खा हो सकता है।

शायद आपको सर्वर पर प्रस्तुति से व्यवसाय तर्क को अलग करने के लिए मॉडल-व्यू-कंट्रोलर पैटर्न का उपयोग करना चाहिए? कम से कम यह सभी कोड एक ही स्थान पर रखता है लेकिन फिर भी आपको घटकों को तर्कसंगत रूप से अलग करने देता है। यदि यह आपके लिए उपयोगी लगता है तो ज़ेंड फ्रेमवर्क की तरह कुछ देखें।

0

आप ग्राहक पक्ष पर इसे बनाकर चिंताओं को बेहतर ढंग से अलग कर सकते हैं, लेकिन अगर लोड करने के लिए बहुत कुछ है तो उपयोगकर्ता अनुभव की लागत पर आ सकता है (साथ ही आपको यह समझना होगा कि फ्रस्ट्रेटेड विथफॉर्म का क्या उल्लेख है)। मेरे लिए सर्वर पक्ष पर इसे बनाना आसान है, जिसका अर्थ यह है कि यदि आप सख्त समयरेखा पर हैं तो अधिक वांछनीय विकल्प बन जाते हैं, लेकिन अपने कौशल सेट के आधार पर निर्णय लेते हैं।

संबंधित मुद्दे