क्या pushStateबुरा है यदि आपको अपनी सामग्री पढ़ने के लिए खोज इंजन की आवश्यकता है?
नहीं, के बारे में बात pushStateहैशबंग्स के लिए एक ही सामान्य प्रक्रिया को पूरा करने के आसपास है, लेकिन बेहतर दिखने वाले URL के साथ। इस बारे में सोचें कि जब आप हैशबैंग का उपयोग करते हैं तो वास्तव में क्या होता है ...
तुम कहो:
हैशबैंग्स के साथ, Google अपनी स्थैतिक सामग्री प्राप्त करने के लिए escaped_fragment URL पर जाना जानता है।
तो दूसरे शब्दों में,
- Google एक लिंक देखता है
example.com/#!/blog
- Google अनुरोध करता है
example.com/?_escaped_fragment_=/blog
- आप उस सामग्री का स्नैपशॉट लौटाते हैं जिसे उपयोगकर्ता को देखना चाहिए
जैसा कि आप देख सकते हैं, यह पहले से ही सर्वर पर निर्भर करता है। यदि आप सर्वर से सामग्री का स्नैपशॉट नहीं दे रहे हैं, तो आपकी साइट ठीक से अनुक्रमित नहीं हो रही है।
तो Google पुशस्टेट के साथ कुछ भी कैसे देखेगा?
PushState के साथ, google सिर्फ कुछ भी नहीं देखता है क्योंकि यह जावास्क्रिप्ट लोड करने के लिए json लोड नहीं कर सकता है और बाद में टेम्पलेट बना सकता है।
वास्तव में, गूगल जो भी हो पर अनुरोध कर सकते हैं देखेंगे site.com/blog। एक URL अभी भी सर्वर पर एक संसाधन को इंगित करता है, और क्लाइंट अभी भी इस अनुबंध का पालन करते हैं। बेशक, आधुनिक ग्राहकों के लिए, जावास्क्रिप्ट ने पृष्ठ ताज़ा किए बिना सामग्री के साथ पुनर्प्राप्ति और बातचीत के लिए नई संभावनाएं खोली हैं , लेकिन अनुबंध समान हैं।
तो इसका उद्देश्य pushStateयह है कि यह सभी उपयोगकर्ताओं को पुराने और नए, JS- सक्षम और समान नहीं है, लेकिन नए उपयोगकर्ताओं को एक बढ़ाया अनुभव प्राप्त होता है ।
आपको अपनी सामग्री देखने के लिए Google कैसे मिलेगा?
फ़ेसबुक अप्रोच - URL पर उसी सामग्री को परोसें site.com/blogजो आपके क्लाइंट ऐप को /blogस्टेट पर पुश करने पर बदल जाएगी । (फेसबुक pushStateअभी तक उपयोग नहीं करता है कि मुझे पता है, लेकिन वे हैशबैंग के साथ ऐसा करते हैं)
ट्विटर का दृष्टिकोण - सभी आने वाले URL को हैशबैंग समकक्ष के लिए पुनर्निर्देशित करता है। दूसरे शब्दों में, "/ ब्लॉग" का एक लिंक /blogराज्य पर जोर देता है । लेकिन अगर यह सीधे अनुरोध किया जाता है, तो ब्राउज़र समाप्त हो जाता है #!/blog। (Googlebot के लिए, यह तब _escaped_fragment_आपके इच्छानुसार रूट होगा । अन्य क्लाइंट के लिए, आप pushStateसुंदर URL पर वापस आ सकते हैं )।
तो क्या आप _escaped_fragment_क्षमता खो देते हैं pushState?
दो अलग-अलग टिप्पणियों में, आपने कहा
बच गया टुकड़ा पूरी तरह से अलग है। आप शुद्ध अनुपचारित सामग्री, कैश्ड सामग्री की सेवा कर सकते हैं, और उस लोड के तहत नहीं डाल सकते हैं जो सामान्य पृष्ठ हैं।
Google के लिए आदर्श समाधान यह है कि या तो जावास्क्रिप्ट साइटों को करें या यह जानने का कोई तरीका लागू करें कि पुशस्टेट साइटों (robots.txt?) के लिए भी कोई बचा हुआ टुकड़ा URL है।
आपके द्वारा बताए गए लाभों को अलग नहीं किया गया है _escaped_fragment_। यह आपके लिए पुनर्लेखन करता है और विशेष रूप से नामित GETपरम का उपयोग करता है वास्तव में कार्यान्वयन विवरण है। इसके बारे में वास्तव में कुछ विशेष नहीं है जो आप मानक URL के साथ नहीं कर सकते थे - दूसरे शब्दों में, mod_rewrite या आपके सर्वर के समकक्ष का उपयोग करके अपने आप /blogको फिर से लिखना ।/?content=/blog
क्या होगा यदि आप सर्वर-साइड कंटेंट को सर्व नहीं करते हैं?
आप URL पुनः लिखने नहीं कर सकते और सेवा सामग्री के कुछ प्रकार पर /blog(या जो भी राज्य आप ब्राउज़र में धकेल दिया), तो अपने सर्वर वास्तव में नहीं रह गया है HTTP अनुबंध से बंधे है।
यह महत्वपूर्ण है क्योंकि एक पृष्ठ पुनः लोड (जो भी कारण के लिए) इस URL पर सामग्री खींचेगा। (देखें https://wiki.mozilla.org/Firefox_3.6/PushState_Security_Review - "व्यू-सोर्स और रीलोड दोनों नए URI में कंटेंट को लाएंगे यदि एक को पुश किया गया था।"
ऐसा नहीं है कि जेएस एपीआई के माध्यम से क्लाइंट-साइड और लोडिंग कंटेंट पर एक बार यूजर इंटरफेस खींचना एक बुरा लक्ष्य है, बस यह कि इसका वास्तव में HTTP और URL के साथ कोई हिसाब नहीं है और यह मूल रूप से पिछड़ा-संगत नहीं है।
फिलहाल, यह सटीक बात है कि हैशबैंग के लिए इरादा है - अलग-अलग पृष्ठ राज्यों का प्रतिनिधित्व करने के लिए जो क्लाइंट पर नेविगेट किए जाते हैं और सर्वर पर नहीं। उदाहरण के लिए, एक पुनः लोड, उसी संसाधन को लोड करेगा जो हैशेड मान को पढ़, पार्स और संसाधित कर सकता है।
यह सिर्फ ऐसा होता है कि उनका उपयोग (विशेष रूप से फेसबुक और ट्विटर द्वारा) किया जाता है, ताकि पृष्ठ ताज़ा किए बिना इतिहास को सर्वर-साइड स्थान पर बदल दिया जा सके। यह उन उपयोग मामलों में है कि लोग पुशस्टैट के लिए हैशबैंग को छोड़ने की सिफारिश कर रहे हैं।
यदि आप सभी सामग्री क्लाइंट-साइड को प्रस्तुत करते हैं, तो आपको pushStateएक अधिक सुविधाजनक इतिहास एपीआई के भाग के रूप में सोचना चाहिए , और हैशबैंग का उपयोग करने के तरीके से नहीं।