2013-04-21 53 views
1

我在帮助程序中有以下Ruby on Rails代码。当我在页面上有很多链接时,我的视图加载缓慢。需要帮助重构和加速if语句的视图

任何人都可以告诉我一个重构的版本,这将是干燥和加速?

https://gist.github.com/anonymous/2afe1956e7565731ff20

module ApplicationHelper 

    def link_to_doc(document) 
    if document.document_type.downcase == "image" 
     link_to "#{document.name}", "#{document.url}", class: "sublime" 
    elsif document.document_type.downcase == "video" 
     sublime_video_link_to(document) 
    elsif document.url && document.url.length > 0 
     link_to "#{document.name}", "#{document.url}", download: "#{document.name.parameterize}" 
    elsif document.admin_url && document.admin_url.length > 0 
    content_tag :a, href: document.admin_url do 
     link_to "#{document.name}", document.admin_url 
    end 
    else 
     link_to "#{document.name}", document_url(document) 
    end 
    end 

    def btn_link_to_doc(document) 
    if document.document_type.downcase == "image" 
     link_to "View #{ document.document_type.downcase }", "#{document.url}", class: "document-link btn sublime" 
    elsif document.document_type.downcase == "video" 
     sublime_video_btn_link_to(document) 
    elsif document.url && document.url.length > 0 
     link_to "Download #{ document.document_type.downcase }", "#{document.url}", download: "#{document.name.parameterize}", class: "document-link btn" 
    elsif document.admin_url && document.admin_url.length > 0 
    content_tag :a, href: document.admin_url do 
     link_to "View", document.admin_url, class: "document-link btn" 
    end 
    else 
     link_to "View", document_url(document), class: "document-link btn" 
    end 
    end 


private 


    def sublime_video_btn_link_to(document) 
    tag=[] 
     tag<<link_to("View #{ document.document_type.downcase}", "#video#{document.id}", class: "document-link btn sublime", data: { settings: 'close-button-visibility:visible' }) 
     tag<< content_tag(:video,{ id: "video#{document.id}", style: "display:none;", width:'480', height:'270', preload: true }) do 
       content_tag(:source, nil,{src: document.url}) 
      end 
     tag.join.html_safe 
    end 

    def sublime_video_link_to(document) 
    tag=[] 
     tag<<link_to("#{document.name}", "#video#{document.id}", class: "sublime", data: { settings: 'close-button-visibility:visible' }) 
     tag<< content_tag(:video,{ id: "video#{document.id}", style: "display:none;", width:'480', height:'270', preload: true }) do 
       content_tag(:source, nil,{src: document.url}) 
      end 
     tag.join.html_safe 
    end 
end 
+0

你有没有使用任何分析工具t检查它实际上是这些助手而不是别的?分析工具也可能帮助您找出问题的部分原因。 – FluffyJack 2013-04-21 13:16:09

+0

您是否介意将您的代码复制并粘贴到最初的问题中?我不介意点击并查看代码,但Stack Overflow约定规定代码在问题中是正确的(此外,它可能会鼓励更多的ppl查看和回答!)。 – aceofbassgreg 2013-04-21 13:21:54

回答

2

,而不是这种双重检查

document.admin_url && document.admin_url.length > 0 

可以使用

document.url.to_s.blank? 

它将检查零和空字符串

+0

更改为.blank?大大提高了性能。但是,页面加载时间仍然是1.5秒,并且大部分来自if语句,因为它正在遍历列表并且重复遍历每个文档的函数。所以我正在努力进一步改进它。还有什么建议? – user2012677 2013-04-21 14:50:41

+0

这取决于这个列表是多久,但你可以给他们一些提示,看看他们是否可以帮助 array.compact! **将删除阵列中的所有nils ** array.flatten! **在数组上创建阵列** array.uniq! **删除所有重复的项目** – 2013-04-22 04:26:20

+0

也可以使用2种方法** delete_if **,如果您过滤大部分数组用户** keep_if ** – 2013-04-22 04:28:52