我们正在使用 ZK 开发单页网络应用程序它不断与服务器通信并更新其屏幕的一部分。更新频率可以达到 1 秒。在这些更新期间,对大量 JS 对象的引用会丢失,这些对象最终必须由垃圾收集器清理。
据我们所知,Chrome 仅在不活动的标签页上运行其垃圾收集器。这对我们来说是一个问题,因为应用程序的选项卡通常处于事件状态并且几乎从不刷新,因此永远不会收集 JS 对象。如果保持事件状态足够长的时间,该选项卡最终会崩溃(Aww Snap 消息)。
我们需要手动启动垃圾回收。到目前为止,我们已经尝试使用 --js-flags="--expose-gc" 运行 Chrome 并运行 gc(),但它抛出异常:
ReferenceError: gc is not defined
这不会发生在 Firefox 上——内存使用或多或少是一个常量。
强制刷新页面不是一种选择。
我们将不胜感激任何和所有建议。
编辑:我们已经尝试在 Chrome 版本 23.0.1271.97 上运行 和 window.gc() 和 gc() m25.0.1364.2 dev-m
最佳答案
您可以获取 Chrome Dev Tools 的代码,修改它,以便不时调用 ProfilerAgent.collectGarbage();(这是当您单击“收集垃圾”按钮时调用的代码在时间轴面板上)并使用 --debug-devtools-frontend 标志运行 Chrome 和你的 DevTools 版本。
然而,这个解决方案非常极端,只有在你真的绝望时才尝试。到那时,我建议分析您的应用程序并检查为什么 v8 决定不清理垃圾(或不能清理垃圾)。 DevTools 的时间线面板将帮助您解决这个问题。首先检查此面板底部的“收集垃圾”按钮是否真的起作用,如果没有 - 您可能有内存泄漏(至少,根据 v8)。如果是这样,请尝试 leak-finder-for-javascript .
[EDIT] 我删除了有关 chrome 扩展的信息,因为事实证明 gc() 可以在 --js-flags 时从网页代码中调用使用 ="--expose-gc"。至少在我的 23.0.1271.64 上。
关于javascript - 在谷歌浏览器中强制垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13950394/
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我要下载http://foobar.com/song.mp3作为song.mp3,而不是让Chrome在其native中打开它浏览器中的播放器。我怎样才能做到这一点? 最佳答案 您只需要确保发送这些header:Content-Disposition:attachment;filename=song.mp3;Content-Type:application/octet-streamContent-Transfer-Encoding:binarysend_file方法为您完成:get'/:file'do|file|file=File.
如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail
我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT
使用ruby的watir测试网络应用程序时,浏览器最后会保持打开状态。网上的一些建议是,要进行真正的单元测试,您应该在每次测试时(在拆卸调用中)打开和关闭浏览器,但这很慢而且毫无意义。或者他们做这样的事情:defself.suites=superdefs.afterClass#Closebrowserenddefs.run(*args)superafterClassendsend但这会导致摘要输出不再显示(诸如“100次测试、100次断言、0次失败、0次错误”之类的内容仍应显示)。我怎样才能让ruby或watir在我的测试结束时关闭浏览器? 最佳答案
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
像这样转换数组的最快/单行方法是什么:[1,1,1,1,2,2,3,5,5,5,8,13,21,21,21]...进入像这样的对象数组:[{1=>4},{2=>2},{3=>1},{5=>3},{8=>1},{13=>1},{21=>3}] 最佳答案 要获得所需的格式,您可以附加一个调用以映射到您的解决方案:array.inject({}){|h,v|h[v]||=0;h[v]+=1;h}.map{|k,v|{k=>v}}虽然它仍然是单行的,但它开始变得凌乱了。 关于ruby-在Ruby
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文
是否有一个SASS扩展可以采用SASS样式表,找到中性属性(例如border-radius)并为其输出所有特定于供应商的属性(例如-webkit-border-radius等)自动?我真的不想手动创建所有混入,也不想手动编写代码。我确定一定有这样的扩展名,但我找不到它。帮忙? 最佳答案 有一个非常好的gem可以满足您的需求。它叫做Bourbon它不会用特定于供应商的css替换您的css,因为它可以像SASS一样工作。它基本上是一个正确生成跨浏览器css的mixin集合。 关于ruby-用
我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如