সমস্ত জাভাস্ক্রিপ্ট </body> এর আগে অন্তর্ভুক্ত করুন


35

কেউ কি জানেন যে কীভাবে ম্যাজেন্টোর জেএস স্ক্রিপ্টের সমস্ত ট্যাগ থাকতে <script type="text/javascript" src="http://sitename.com/js/prototype/prototype.js"></script>পারে যেমন বন্ধ হওয়ার আগে রেন্ডার দিতে হবে </body>?

আমি এর আগে একবার চেষ্টা করেছি, তবে আমাকে একটি ত্রুটি দেওয়া হয়েছিল যা আমি মনে করি অ্যাডজেএস পদ্ধতিটি যেখানে আমি এটি ব্যবহার করেছি সেখানে সম্ভবত এটি রেফারেন্স ফুটারে ব্যবহার করা হচ্ছে না।


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

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

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

1
@ সোনাসি এ কথাটি বলার মতো যে আপনার প্রথম দেখা ব্যবহারকারীদের উপেক্ষা করা উচিত কারণ তাদের শীঘ্রই একটি প্রাথমিক ক্যাশে থাকবে। অবশ্যই পিএইচপি বর্ধন রয়েছে যা গ্রহণ করা উচিত এবং করা উচিত তবে ফ্রন্ট-এন্ডার হিসাবে আমি কীভাবে কেবল সম্পদ সরবরাহের গতি বাড়িয়ে তুলতে পারি তা নয় তবে ব্যবহারকারীর জন্য লোড টাইম এবং নীচের অংশে স্ক্রিপ্টগুলি লোড করার বিষয়টি বিবেচনা করা আমার কাজ ব্লকিং রেন্ডারিং প্রতিরোধের পৃষ্ঠাটি সেই কৌশলটির একটি অংশ। আধুনিক ব্রাউজারগুলি ব্লকিং ছাড়াই স্ক্রিপ্টগুলি পরিচালনা করতে পারে তবে আপনিও জানেন যে আপনি ইকমার্সে মিলিসেকেন্ড ==।। অবশ্যই এটি সাধারণত স্ক্রিপ্ট লোডার সহ একটি পয়েন্ট পয়েন্ট।
গ্লোব

আমি @ গ্লো এর সাথে আছি, এটি দক্ষতার সুরের একটি ছোট্ট অংশ এবং এটি একটি রাত এবং দিনের পার্থক্য নাও করতে পারে, তবে এড়ানো উচিত নয়। প্রথমবারের দর্শকের জন্য দ্রুত স্ক্রিনে সামগ্রী পাওয়া গুরুত্বপূর্ণ।
এসটিডাব্লু

উত্তর:


22

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

স্ক্রিপ্টটি সরানোর জন্য:

page.xmlআপনার থিমের নিম্নলিখিত লাইনটি সন্ধান করুন

<block type="core/text_list" name="before_body_end" as="before_body_end" translate="label">

এবং ঠিক আগে নিম্নলিখিতটি প্রবেশ করান:

<block type="page/html_head" name="jsfooter" as="jsfooter" template="page/html/jsfooter.phtml">
   <action method="addJs"><script>your_script.js</script></action>
</block>

Magento 1.9 এর জন্য এটি ব্যবহার করুন:

<block type="page/html_head" name="jsfooter" as="jsfooter" template="page/html/jsfooter.phtml">
       <action method="addItem"><type>skin_js</type><name>js/yourskinfile.js</name><params/></action>
    </block>

অ্যাপ / ডিজাইন / ফ্রন্টএন্ড / [প্যাকেজ] / [থিম] /template/page/html/jsfooter.phtml এ টেমপ্লেট ফাইল তৈরি করুন এবং নিম্নলিখিতটি রাখুন

<?php echo $this->getCssJsHtml() ?>

</body>ট্যাগ বন্ধ করার ঠিক আগে আপনার টেমপ্লেটে নীচে যুক্ত করুন ।

<?php echo $this->getChildHtml('jsfooter') ?>

আপনি কি নিশ্চিত core/text_listযে একটি addJs()পদ্ধতি আছে?
অ্যালেক্স

আপনি ঠিক বলেছেন অ্যালেক্স, আমার একটা ভুল হয়েছিল, তার জন্য দুঃখিত!
ওউজ ইলিকদেডির

চিয়ারস ম্যান, এই কাজ করে। এই কাজটি করার পরে আমি যা বলতে চাইছিলাম তা হ'ল আপনি যখন জেএস মার্জ হয়ে চলেছেন তখন এটি এটিকে উপেক্ষা করে কারণ মার্জ করা ফাইলটি তখন মাথায় সংযুক্ত হয়ে যায় তবে বাস্তবে, ম্যাজেন্টো আমার পরীক্ষায় যা করেছে বলে মনে হয় তা হ'ল দুটি সংযুক্ত ফাইল তৈরি করুন, প্রতিটি পৃষ্ঠার জন্য একটি / html_head ব্লক এবং ফুটার জেএসের জন্য মার্জ করা ফাইল '</body>' এর আগে যুক্ত করা হবে। এটি সম্ভাব্য কার্যকর। জেএস মার্জ এবং জিকুয়েরিতে আমার কিছু সমস্যা ছিল যা jQuery.noConflict না অন্তর্ভুক্ত ছিল। এখন আমার </ em>> এর আগে জেএসে জেএসে মার্জ করার জন্য দরকারী হতে পারে।
ওয়েস্টন

20

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

অন্য সমস্যাটি আসলে এটি করছে। <move />ট্যাগ, বা অনুরূপ কার্যকারিতা বলে মনে হচ্ছে না । আমি কাস্টম স্ক্রিপ্টগুলির জন্য যা করেছি তা হ'ল এটির মতো স্ক্রিপ্ট যুক্ত করা। এটি আরও বেশি রিন্ডন্ড্যান্ট তবে এটি কাজ করে:

<block type="page/html_head" name="foot.scripts" template="page/template/foot-scripts.phtml">
    <action method="addJs"><script>jmax/global-min.js</script></action>
</block>

@ ওউজ ইলেকডেমিরকে সঠিক হিসাবে চিহ্নিত করেছেন কারণ তিনি যে আরও কার্যকরী উত্তর সরবরাহ করেছেন সেগুলি কার্যকর হয়েছে, তবে আপনি মূলত একই উত্তরটি দিয়েছেন তাই এটি কার্যকরভাবে অনেক ধন্যবাদ।
ওয়েস্টন

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

15

ম্যাজেন্টো 1.x এ এটি একটি বোকামির কাজ। ম্যাগেন্তোতে টেম্পলেট ফাইল জুড়ে কেবল অনেকগুলি ইনলাইন স্ক্রিপ্ট লিখিত রয়েছে যা আপনি যদি জেএস ফাইলগুলি থেকে নতুন জেএস ফাইল স্থানান্তরিত করেন তবে তা ভেঙে যাবে <head>। সম্ভাব্যভাবে ম্যাজেন্টো 2-তে, এই পরিস্থিতি পরিবর্তিত হবে তবে ম্যাজেন্টো প্রোটোটাইপ থেকে দূরে সরে যাওয়ার সাথে সাথে এটি প্রোটোটাইপ এবং জিকুয়েরি বিস্তৃত করছে।

অন্যান্য স্ক্রিপ্টগুলির জন্য আপনার এটিকে </body>উপাদানটির আগে স্থাপন করা উচিত । আমি ম্যাজেন্টোর <action method="addJS|addItem">এক্সএমএল উপেক্ষা করা এবং প্রতিটি স্ক্রিপ্টের জন্য কেবল একটি নতুন টেম্পলেট ফাইল তৈরি করা সহায়ক বলে খুঁজে পেয়েছি , যার মধ্যে একটি সরল এইচটিএমএল স্ক্রিপ্টের উল্লেখ রয়েছে:

<script src="<?php echo $this->getSkinUrl('js/hobbiton.js'); ?>"></script>

তারপরে আপনি এই টেম্পলেট ফাইলটি যে কোনও জায়গায় এম্বেড করতে পারেন (এবং এখনও অর্ডার নিয়ন্ত্রণ করতে আগে / পরে ব্যবহার করুন):

<block type="core/template name="jquery.hobbiton" after="-" template="custom/jquery/hobbiton.phtml" />

6

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

একটি পদ্ধতির জন্য <script>রেন্ডার করা ব্লকগুলি থেকে পর্যবেক্ষককে ব্যবহার করে সমস্ত ইনলাইন উপাদানগুলি বের করা http_response_send_beforeএবং বাহ্যিক স্ক্রিপ্টগুলির শেষে ডানদিকে ডানদিকে সরানো। আপনি এটিতে থাকাকালীন, আপনি কেবল ইনলাইনই নয়, সমস্ত স্ক্রিপ্ট উপাদান সরাতে পারেন। এটি আপনাকে লেআউট মডেলটির মাধ্যমে তাদের সরানোর ঝামেলা বাঁচায়, যা স্পষ্টভাবে ম্যাজেন্টো দ্বারা উদ্দিষ্ট নয়।

টম রবার্টশো একটি এক্সটেনশান তৈরি করেছিলেন যা ঠিক এমনটিই করে, একক পর্যবেক্ষক যা নিয়মিত অভিব্যক্তি ব্যবহার করে প্রতিক্রিয়া এইচটিএমএল পরিবর্তন করে: https://github.com/bobbyshaw/magento-footer-js

তিনি core_block_abstract_to_html_afterইভেন্টটি ব্যবহার করেন তবে কেবলমাত্র যদি বর্তমান ব্লকটি মূল ব্লক হয় তবে পদক্ষেপ নেয়। এর অর্থ হল, পর্যবেক্ষককে আরও প্রায়শই বলা হয়, তবে এটি কিছুটা ডিগ্রি অবরুদ্ধ ব্লক ক্যাচিংয়ের উচিত।


ওপিসি কার্টের পেমেন্ট প্যানেল ব্যতীত রবার্টশো এক্সটেনশনটি পুরো সাইট জুড়েই খুব ভাল কাজ করে। পুরোপুরি প্যানেলটি ফাঁকা করে। আমি মনে করি এটি পেমেন্ট গেটওয়ে যাচাইকরণ স্ক্রিপ্ট। এটি ক্লোজিং </body>ট্যাগের ঠিক আগে সমস্ত কিছু নীচে নিয়ে যায় ।
ফায়াসকো ল্যাবগুলি

2

আপনার জাভাস্ক্রিপ্ট (এবং সিএসএস) এবং গুগল পেজস্পিড অন্তর্দৃষ্টি র‌্যাঙ্কিং উন্নত করতে আপনাকে সহায়তা করার জন্য আমি মিডিয়রক্স পেজস্পিড মডিউলটির উচ্চতর পরামর্শ দিচ্ছি।

এটি ম্যাজেন্টো দ্বারা এইচটিএমএল আউটপুটকে বিশ্লেষণ করে এবং এর পরে জাভাস্ক্রিপ্টকে এইচটিএমএল কোডের নীচে সরিয়ে নিতে কোডটিতে একটি কাটা এবং পেস্ট ক্রিয়া সম্পাদন করে কাজ করে। প্রক্রিয়াটি দ্রুত তবে এইচটিএমএল পরিবর্তনগুলি ক্যাশে করার জন্য একটি পূর্ণ পৃষ্ঠা ক্যাশের সাথে একত্রে ব্যবহৃত হয়।

এই মডিউলটি কীভাবে কাজ করে এবং পৃষ্ঠাগুলি র‌্যাঙ্ক উন্নত করতে আপনাকে এখানে সহায়তা করতে পারে সে সম্পর্কে আরও তথ্য:

http://blog.gaiterjones.com/magento-google-pagespeed-jscsshtmlminify-optimisation/


-1

ম্যাজেন্টো ভি 1 .6 এর জন্য (পুরানো সংস্করণগুলিতে পরীক্ষা করা প্রয়োজন);

1 - page/html/footer/extras.phtmlএই বিষয়বস্তু দিয়ে একটি টেম্পলেট ফাইল তৈরি করুন :

<?php echo $this->getCssJsHtml() ?>

2 - আপনার লেআউট এক্সএমএলে এই এইচটিএমএল নোড যুক্ত করুন:

<reference name="before_body_end">
<block type="page/html_head" name="extra_js" as="extraJs" after="-" template="page/html/footer/extras.phtml">
    <action method="addItem"><type>skin_js</type><name>js/jquery.min.js</name></action>
</block>

3 - এটাই!


-2

এই অন্যান্য স্ক্রিপ্টের সাথে সমস্যার কারণে (প্রোডাক্ট / লিস্ট.এফটিএমটিএল) <script type="text/javascript"> decorateList('category-list', 'none-recursive') </script> আমাকে আমার পৃষ্ঠার শেষে কিছু জেএস স্থানান্তর করতে হয়েছিল।

উপরের কাজের নির্দেশিত জিনিসটি আমি তৈরি করতে সক্ষম হলাম না তাই আমি অর্জনের জন্য আরও একটি উপায় খুঁজে পেয়েছি:

আমি Mage/page/Block/Html/Footer.php controllerএকই পথে এটি পুনরায় তৈরি করে ওভাররাইড করি app/local folder

যদি না থাকে তবে এখানে তৈরি করার সম্পূর্ণ পথটি এখানে রয়েছে:

অ্যাপ্লিকেশন / স্থানীয় / পুরোনো যাদুকর / পৃষ্ঠা / ব্লক / html / footer.php

এই ফাইলে আমি হেড.এফপি থেকে ফাংশনগুলি যুক্ত করি যা ম্যাজেন্টোর কোরের একই ফোল্ডারে (যেমন Mage / পৃষ্ঠা / ব্লক / এইচটিএমএল / হেড.এফপি) পাওয়া যায়।

এটি কার্যকর করার জন্য আপনার যে কাজগুলি করতে হবে তা হ'ল (স্পষ্টতই সম্পূর্ণ ফাংশন, এখানে আমি সংক্ষিপ্ত থাকার জন্য কেবল নামটি ইঙ্গিত করেছি):

public function addItem($type, $name, $params=null, $if=null, $cond=null)
{...}

public function addJs($name, $params = "")
{...}

public function getCssJsHtml()
{...}

protected function &_prepareStaticAndSkinElements($format, array $staticItems, array $skinItems, $mergeCallback = null)
{...}

protected function _separateOtherHtmlHeadElements(&$lines, $itemIf, $itemType, $itemParams, $itemName, $itemThe)
{...}

protected function _prepareOtherHtmlHeadElements($items)
{...}

তারপরে আমি আমার কাস্টমকে (আমার থিমের একটি) পৃষ্ঠা / এইচটিএমএল / ফুটার.এফটিএমএল এর জন্য কলটি যুক্ত করব:

<?php echo $this->getCssJsHtml() ?>

শেষে, এখন আমি আমার পাদলেখকে জেএস যুক্ত করতে চাইলে এটিকে কোনও লেআউটে কল করে

<action method="addJs"><script>yourscript.js</script></action>

আকর্ষণীয় পদ্ধতির, তবে এটি ম্যাজেন্টো আর্কিটেকচারের জন্য খুব, খুব ভুল পদ্ধতির।
বেনমার্কস

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