如果我决定使用 javascript 或 css 文件的 last_modified_time,并使用它的 unix 时间戳作为名称中的键,以便在修改文件时清除缓存。 以下两种做法有什么区别? 文件名是:my_script.js,时间戳是:1321951817
1/文件包含为:
<script type="text/javascript" src="http://example.com/js/my_script.js?v=1321951817"></script>
因此,查询字符串参数在每次 v 时都会创建一个新的缓存。被改变了。
2/文件被包含为:
<script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script>
文件名随每次修改而变化,重写规则删除时间戳并将请求的 url 指向 my_script.js
3/更新:基于以下答案的另一种方法:文件已重命名并包含为:
<script type="text/javascript" src="http://example.com/js/my_script.1321951817.js"></script>
文件名已更改且未使用重写规则。
问题:这两种技术本质上是否相同,或者使用查询字符串参数而不是直接文件名有什么优点/缺点。
最佳答案
使用更新的查询字符串是一个糟糕的解决方案。看看 Steve Souders 是怎么说的:http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/
理想的方法是重命名文件本身。 有些人更喜欢使用最后修改日期的时间戳,我认为这是一个问题。
在现代网络开发中,您确实需要尽可能多地优化您的页面,这意味着将 css 和 javascript 组合成单个文件,这些文件会被压缩。 这意味着您在流程中引入了一个构建步骤,并且文件的最后修改时间始终是在上次构建时。如果您将其设置为您的文件名,您基本上会一直破坏用户缓存,有时您不需要这样做。
我建议将文件重命名为其内容的 md5 和。这样你就可以一直做新的构建,但文件名只有在内容改变时才会改变。这使您的文件名成为内容的标识符。使用它,您可以在所有静态内容上设置一个遥远的 future 过期 header ,而不再担心它。
我可以推荐为此使用构建系统,因为这个工作流程很快就会变得乏味。 我的公司不久前开源了一个,它在优化您的网页的许多其他事情中执行此操作:https://github.com/One-com/assetgraph-builder 还有许多其他构建工具可以执行相同的操作。环顾四周,找到最适合您的开发设置的那个。
关于避免缓存的Javascript版本控制,这些做法的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8224736/
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这
请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_
我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行
如果我使用ruby版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更
我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题: