来自阅读很多文章,比如How do I include a JavaScript file in another JavaScript file? - 显然不可能将一个脚本包含到另一个脚本中。
所以这是我的问题 - 我担心 JS 膨胀。或者有太多未使用的代码加载到不使用/不需要它的页面。但是,有时我会需要在多个页面上使用相同的功能,但不是所有页面。
如果我们考虑将在线应用程序的逻辑部分制作成对象,例如“客户”或“元素”——我们可能会有一堆特定于这些“对象”的代码。
例如,我可以有一组“个人资料”代码,允许我管理我的个人资料,它可能有多个使用 Ajax 的 div-pop-ups,为了这个例子,让我们说我有几个控制我的“送货地址”的函数,它们控制 div 弹出窗口,它们处理特定于该信息的 Ajax。 - 可以说我为此目的有 4 个功能。但这只是一个更大的“profile.js”文件的一部分,该文件处理我所有的“profile”crud ...
现在我有了应用程序的另一部分——比如购物车——我需要允许用户访问“送货地址”div-pop-up 和所有 Ajax 功能。
我想我只想重用 profile.js 中的那些函数——因为“重写”做同样事情的代码似乎是“糟糕的形式”——因为那样我就会有很长的时间术语代码维护问题 - 如果我进行了更改 - 我必须记住我使用该代码的所有地方。
所以如果让我推断出“最佳实践”——考虑到这些技术如何工作的局限性——我不能像在服务器端那样“嵌套”和重用 js包括或 CSS。
我的代码将不得不分解成单独的文件,并且(理论上)将使用许多较小的 .js 文件
所以我的<head>看起来像这样
<head>
<script src='smallfile_1.js'...>
<script src='smallfile_2.js'...>
...
<script src='smallfile_10.js'...>
<head>
和“如果”我需要在另一页中的一个部分
<head>
<script src='that_other_object_/smallfile_3.js'...>
</head>
...对这些较小文件的重复 TTP 调用不会成为开销吗?在流量大的应用程序中 - 网络和服务器开销似乎开始成为一个问题,或者只是小题大做?
对于 10 个 5k 文件的 100k 请求,真的等于 - 100k 请求对于 1 个 50k 文件吗?
现在我把它写出来了 - 想想看 - 页面上的每个图像也是对服务器的单独调用 - 所以也许我正在制造一个问题这不是问题。
我能否就其他人在跨模块重用 JS 代码方面所做的工作获得一些反馈 - 而无需跨模块共享“巨大”文件。
最佳答案
答案很简单 - 您创建一个库或一个包含您拥有的所有实用功能的框架,然后在您的所有页面上加载该库。由于浏览器缓存,客户端唯一需要检索该文件的时间是在初始加载时,因此即使文件相当大,客户端也只需要加载一次。
这意味着某些网站(例如 Stack Overflow)仅使用一个主 JavaScript 文件,该文件包含网站上所有页面正常运行所需的大部分代码。尽管每个页面可能只需要几个功能,但浏览器缓存意味着这种方法会更有效。
另一种防止这种情况发生的方法是创建一个小的服务器端文件,该文件将动态组合服务器上的多个 JavaScript,并在客户端请求它们时提供它们,例如:
<script src="/resource/js?load=file1,file2,file3" type="text/javascript></script>
但是,不推荐使用此方法,因为它会破坏浏览器缓存。因此,最佳做法是通常维护一个大型主 JavaScript 文件,其中包含网站运行所需的所有代码,该文件在初始页面加载时缓存。
关于javascript 最佳实践 - 管理脚本/代码重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4976832/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题: