jjzjj

magento - 是否真的需要 Magento 加载的所有默认脚本?

coder 2024-07-19 原文

这是 Magento 默认加载的所有脚本的列表:

../js/prototype/prototype.js    //prototype library
../js/prototype/validation.js   //don't know what this does
../js/scriptaculous/builder.js  //don't know what this does
../js/scriptaculous/effects.js  //base scriptaculous effects library?
../js/scriptaculous/dragdrop.js //component of scriptaculous effects
../js/scriptaculous/controls.js //not sure?
../js/scriptaculous/slider.js   //more scriptaculous effects
../js/varien/js.js          //don't know what this is
../js/varien/form.js        //form validation scripts?
../js/varien/menu.js        //menu/drop down menu scripts
../js/mage/translate.js     //don't know what this does
../js/mage/cookies.js       //don't know what this does

这些脚本总共有 316.8K 的 javascript...都处于各种缩小状态(例如,prototype.js 未缩小)。

所以我的第一个问题:

1) 除了 prototype.js 之外,所有其他的真的都需要吗?

2) 删除这些脚本的“正确”方法是什么?布局更新?还是在模板中硬编码?

我想让我的 magento 网站的加载尽可能轻。

谢谢!

最佳答案

回答第 1 部分 - 并非所有这些都是必需的,但大多数是必需的,这取决于您的主题。 默认的 magento 主题会使用所有这些主题,但自定义主题几乎肯定不需要所有脚本主题。

varien、mage 和 prototype 几乎总是需要的,创建一个消除所有这些的主题非常、非常、困难,因为一些依赖于它们的页面内 javascript 实际上不是来自主题,而是来自核心 php 文件。

在简单的主题上,由于我不使用产品缩放显示,所以删除拖放和 slider 后效果很好。如果您不使用 Magento 菜单,您可以删除菜单,但前提是您准备制作虚拟 js 函数以捕获对它留下的任何调用 - 菜单导航对象直接从需要的 php 层注入(inject) javascript 函数被捕获(或者更好的是,您可以滚动自己的类别导航对象,但不会这样做!)。

对于第 2 部分 - 编辑您的主题 page.xml 布局以将它们从 <block type="page/html_head" name="head" as="head"> 标签。我建议将它们注释掉并在进行时测试每一个。

您可以通过将 javascript 标记添加到相应布局文件的头部,将所需的 javascript 文件注入(inject)到确实需要它们的页面类型中。作为如何完成此操作的示例,请查看默认的 sendfriend.xml 布局文件,该文件仅将 product.js 文件添加到需要它的页面的头部。

如果您开始根据页面类型积极添加/删除 javascript,您还需要考虑 Magento 如何合并 javascript 文件。配置屏幕的开发人员区域中有一个设置可以合并 javascript 文件,打开它是一件非常好的事情。 这会将使用“addJs”或“addItem”注入(inject)的头部区域内的所有 javascript 文件与项目类型“js”或“skin_js”合并。

但是正因为如此,如果您开始逐页包含/排除脚本,您会发现您在不同的页面上生成了不同的合并 js 文件 - 破坏了缓存单个大型 js 文件的大部分好处!

为了两全其美,您应该能够使用但不指定项目类型将 js 注入(inject)头部,从而防止该文件被合并 - 但我还没有尝试过这个。如果这有效,您会发现核心库已合并,并且您的每页自定义文件单独包含,这意味着您缓存了大文件,它们只下载了更改的部分。

关于magento - 是否真的需要 Magento 加载的所有默认脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2995289/

有关magento - 是否真的需要 Magento 加载的所有默认脚本?的更多相关文章

  1. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  2. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  3. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  4. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  5. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  6. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  7. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  8. ruby - rspec 需要 .rspec 文件中的 spec_helper - 2

    我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只

  9. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  10. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

随机推荐