[前][次][番号順一覧][スレッド一覧]

rails:3650

From: dezawa <dezawa@a...>
Date: Fri, 14 Oct 2011 10:27:48 +0900
Subject: [rails:3650] Re: selectが多すぎて開くのが重い、何とかならないか

出沢です

CRCさんのおすすめにしたがってソースをpostします。
methodは関連する所だけ抜き出せば良いのですが、viewは
そのままなので、全体で150行程度になります、済みません。


実測
  DBのアクセス    7.6ms
  Render    1474.7ms
    Completed in 1837ms
 なのですが、ブラウザでの表示完了  に10秒
 HTMLをファイルに取って表示させると   7秒
 表示オンリーにしたときに表示完了 に 3秒
 
====
Controller の抜粋
  PlanLabels = [
                [:id                ,"ID","",:ro,2],
                [:jun               ,"優先順","",:text,2],
                [:lot_no            ,"番号","",:text],
                [:mass              ,"**数","",:text,2],
                [:person_id         ,"**名","",:personname], #Ajax],
                [:meigara           ,"**","",:text],
                [:ope2              ,"***","",:ro], #:text],
                [:plan_ope1_from    ,"","",:datetimero,7],
                [:plan_ope1_to      ,"","",:datetimero,7],
                [:plan_ope2_from    ,"","",:datetimero,7],
                [:plan_ope2_to      ,"","",:datetimero,7],
                [:plan_ope3_from    ,"","",:datetimero,7],
                [:plan_ope3_to      ,"","",:datetimero,7],
                [:plan_ope4_from    ,"","",:datetimero,7],
                [:plan_ope4_to      ,"","",:datetimero,7],
                [:result_ope1_from  ,"","",:datetime,8],
                [:result_ope1_to    ,"","",:datetime,8],
                [:result_ope2_from  ,"","",:datetime,8],
                [:result_ope2_to    ,"","",:datetime,8],
                [:result_ope3_from  ,"","",:datetime,8],
                [:result_ope3_to    ,"","",:datetime,8],
                [:result_ope4_from  ,"","",:datetime,8],
                [:result_ope4_to    ,"","",:datetime,8]
               ]
  def edit
    @sortkey = (params[:sort] || 'jun' )
    @TYTLE = "計画修正"
    @labels = Labels2
    @RunTimeLabels=RunTimeLabels
    @plabels= PlanLabels
    @personnames = Person.all(:conditions => "id < 40",:select =>
"name,id").map{|p| [p.name,p.id]}
    @model = Schedule.find( params[:id])# ,:include => {:plans => :person})
    plan_sort(@sortkey)
  end
=== Controller抜粋 ここまで ===
=====================
edit.erb
=====================
<h2>計画立案・修正</h2>
<%= error_messages(@model.errors) %>
<table><%# subコマンド、統計、累積の表示 %>
  <tr>
    <td valain=top><%# subコマンド %>
      <table><tr><TD>立案番号 <%= @model.id %></td></tr>
        <tr><td><%= button_to 'CSVダウンロード
',:action=>:csv_download,:id=>@model.id %></td></tr>
        <tr>
            <td><%= form_tag :action => :doc_out,:id=>@model.id %>
                <%= submit_tag '作業指示書' %> 期間
            </td>
        </tr>
        <tr><td>
              <input type='text' name='doc_from' size=4> 〜 <input
type='text' name='doc_to' size=4>
         </form>
            </td>
        </tr>
<% form_for(@model) do |f| %>
        <tr><td>立案期間<%= hidden_field_tag :id,value = @model.id %>
               <%= hidden_field_tag :sort,value = @sortkey %>
               <%= hidden_field :schedule,:sort,:value => @sortkey %>
            </td>
        </tr>
        <tr>
           <td> <%= edit_field(
:schedule_skd,@model,:skd_from,:date,{:size=>7}) -%>〜
              <%= edit_field(
:schedule_skd,@model,:skd_to,:date,{:size=>7})%>
           </td>
        </tr>
      </table>
    </td>
    <td><%= timeline %></td> <%# 各工程の予定、実績、空き時間などの表 -%>
    <td><%= runtimeline(true) %></td>    <%# 各工程の累積時間の表 -%>
  </tr>
</table>

<table><tr><td><font size=2>計画</td>
<td><%= submit_tag '立案実行' %><%= hidden_field_tag :id,value =
@model.id %></td>
<td><%= link_to  '表示',:action =>:show, :id=>@model.id,:sort =>@sortkey
-%> </td>
<% @sort.each{|sort| -%>
<%= "<td>"+link_to( @Sort[sort],:action => :sort_edit,:sort =>
sort,:id=>@model.id)+"</td>" %>
<% } -%>
</tr></table>
<%# 個別計画の表を描く -%>
<%= render :partial => "edit_plans" %>
<% end %>  <%# of  [form_for(@model) do |f| ] %>

============
_edit_plans.erb
===========
<table border=1>
  <tr><% %w(ID 優先順 番号 **数 **名 ** ***).each{|lbl| -%>
    <td rowspan=2 align=center><%= lbl %></td>
    <% } -%>
    <% %w(予定 実績).each{|lbl| %><td colspan=8 align=center><nobr><%=
lbl %>/開始,終了</td><% }%>
  </tr>
  <tr><% 2.times{ %w(** ** ** **).each{|lbl| %><td colspan=2
align=center><nobr><%= lbl %></td><%}%>
      <%}%>
  </tr>
  <% @plans.each do |plan| id = plan.id -%>
  <%= "<tr id='pro_#{id}'>" %><% @plabels.each{|items| -%>
    <td><nobr><%= edit_field_with_items :plan,plan,items,{:size=>5},''
%></td><% } -%>
  </tr>
  <% end -%>
</table>
<br />

==================
helper
==================
  def edit_field_with_items(domain,obj,items,opt={},htmlopt="")
    sym,lbl,hlpnsg,type,width = items
    opt[:size] = width ? width : opt[:size] ? opt[:size] : 2

    case type
    when :ro   ; htmlopt + obj.send(sym).to_s +
        "<input type='hidden' id='#{domain}_#{obj.id}_id'
name='#{domain}[#{obj.id}][id]' value='#{obj.id}'>"
    when :datetimero  ;  str = obj.send(sym); htmlopt + (str ?
str.strftime("%m/%d %H:%M") : "")
    when :text ;
      htmlopt + text_field(domain,sym,opt.merge(:index =>
obj.id,:value=>obj.send(sym)))
    when :datetime  ; str = obj.send(sym) ; str = str ?
str.strftime("%m/%d %H:%M"):""
      htmlopt + text_field(domain,sym,opt.merge(:index =>
obj.id,:value=>str))
    when :date  ; str = obj.send(sym) ; str = str ?
str.strftime("%Y/%m/%d"):""
      htmlopt + text_field(domain,sym,opt.merge(:index =>
obj.id,:value=>str))
    when :personname   ;"\n<nobr>"+
        (obj.person_id < 40 ?
         my_select( domain,:person_id,@personnames
                opt.merge(:index => obj.id,:value=>obj.person_id
                          )) :  obj.personname
         )
    when :personnameAjax
      "<div id='pre#{obj.id}'>#{obj.personname}</div></td><td>"+
        link_to_remote("修",
                       :url => {:action => :select,:id=>obj.id,:per_id
=> obj.person_id},
                       :update => {:success => "per#{obj.id}" ,:failure
=> "error"}
                       ) +
        "</div>"
    when :ope_select ; select_with_id(domain,sym , obj,obj.id,@select)
    else        ; "\n"+send(type,obj,:index => obj.id)
    end
  end
  def my_select(object, method, choices, options = {}, html_options = {})
    id = options.delete(:index) ;     id = id ? "[#{id}]" : ""
    value = options.delete(:value)
    include_blank = options.delete(:include_blank) ? "<option
value=''></option>\n" : ""
    "<select name='#{object}#{id}[#{method}]'>\n" + include_blank +
      choices.map{|lbl,val| selected = (val==value ? "
selected='selected'" : "" )
      "<option value='#{val}'#{selected}>#{lbl}</option>\n"
    }.join+"</select>\n"
  end

--
ML: rails@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

      3635 2011-10-12 13:08 [dezawa@a...         ] selectが多すぎて開くのが重い、何とかならないか
      3636 2011-10-12 16:01 ┣[yukihiro.k@g...     ]                                       
      3637 2011-10-12 17:31 ┃┣[masaki@h...         ]                                     
      3638 2011-10-13 02:26 ┃┗[dezawa@a...         ]                                     
      3639 2011-10-13 03:46 ┃ ┗[yukihiro.k@g...     ]                                   
      3640 2011-10-13 04:04 ┣[ohyama@r...         ]                                       
      3641 2011-10-13 05:32 ┃┗[dezawa@a...         ]                                     
      3643 2011-10-13 09:25 ┃ ┗[dezawa@a...         ]                                   
      3644 2011-10-13 15:39 ┃  ┗[masaki@h...         ]                                 
      3645 2011-10-13 18:35 ┣[motoyuki.oya@g...   ]                                       
      3646 2011-10-14 00:02 ┃┗[dezawa@a...         ]                                     
->    3650 2011-10-14 03:27 ┗[dezawa@a...         ]