ทดลอง Erubis pre-processor

0 views
Skip to first unread message

polawat phetra

unread,
Sep 10, 2007, 2:07:01 AM9/10/07
to kv-d...@googlegroups.com
ผมเห็นว่าใน _menu.rhtml มี link_to ที่เป็น static อยู่จำนวนหนึ่ง
ก็เลยลองเอา pre-processor ของ Erubis มาทดสอบดู

ลอง apply patch ที่แนบมา แล้วทดสอบด้วยคำสั่ง

ab -n 10 http://localhost:3000/blog/xxxx/1


ได้ผลลัพท์ดังนี้ครับ
กรณีไม่ได้ใช้ pre-processor
Percentage of the requests served within a certain time (ms)
  50%    117
  66%    119
  75%    120
  80%    221
  90%   1016
  95%   1016
  98%   1016
  99%   1016
 100%   1016 (longest request)

กรณีที่ใช้ pre-processor
Percentage of the requests served within a certain time (ms)
  50%     86
  66%     88
  75%     91
  80%    186
  90%   1040
  95%   1040
  98%   1040
  99%   1040
 100%   1040 (longest request)

Note: restart server + memcache ก่อน test

เนื่องจาก pre-processor มัน evaluate link_to แค่ครั้งเดียว
ผมเลยไม่รู้ว่าจะมีผลต่อ i18n แค่ไหน
(คือไม่รู้ว่า kv ตอนนี้ มีหลายภาษา active พร้อมๆกันอยู่หรือไม่)

ส่วนที่ยังไม่ลองก็คือ กรณี pre-processor ที่มี variable argument

พลวัฒน์

p2

Thawatchai Piyawat

unread,
Sep 10, 2007, 4:52:52 AM9/10/07
to kv-d...@googlegroups.com
preprocessor ของ Erubis น่าสนใจมากครับ แต่ผมเห็นเขายังเขียนว่าเป็น
experimental feature ก็เลยยังไม่ได้เอามาใช้ครับ

ที่ใช้ Erubis อยู่ตอนนี้ผมใช้โดยการตั้ง require
'erubis/helpers/rails_helper' แต่ไม่ได้ patch ครับ
ข้อมูลจากบางที่บอกว่าถ้า patch จะทำงานได้เร็วกว่า แต่ผมว่าการ patch
จะยากต่อการ maintain ในอนาคตครับ ไม่ทราบว่าคุณพลวัฒน์คิดว่าอย่างไรครับ

ธวัชชัย


--
Thawatchai Piyawat, Ph.D.
Assistant Professor
Department of Business Administration,
Faculty of Management Sciences,
Prince of Songkla University
Hat Yai, Songkhla, Thailand 90112
http://gotoknow.org/blog/averageline
http://learners.in.th/blog/nomagic
http://researchers.in.th/blog/programmableart
http://usablelabs.com/

pphetra

unread,
Sep 10, 2007, 6:10:34 AM9/10/07
to kv-devel
ผมก็สงสัยเหมือนกันครับว่าทำไม มันต้องมี 2 วิธีให้เลือกด้วย
ลองแกะดูแล้ว ก็คือว่า จริงๆแล้ว patch ตัวนั้นมันแค่ refactor แยก code
ส่วนที่เรียก ERB.new ออกมาอยู่ข้างนอก
http://railsmanual.com/class/ActionView::Base/create_template_source/1.2.3
(เดิมมันอยู่กลาง method create_template_source เลยครับ)

จากนั้นตอนที่เรา require 'erubis/helpers/rails_helper'
มันก็จะตรวจสอบว่า มี patch apply อยู่หรือไม่ (โดยตรวจสอบว่ามี method
ชื่อ convert_template_into_ruby_code อยู่ใน ActionView::Base แล้วหรือ
ยัง)
ถ้ามีอยู่แล้ว ก็แค่ re-define method convert_template_into_ruby_code
ให้ไปเรียก erubis แทนที่ ERB
แต่ถ้าไม่มี ก็จะ re-define method create_template_source ทั้งตัวเลย
ครับ
(ดังนั้น code ของ create_template_source ก็จะ duplicate อยู่ใน erubis/
lib/helpers/rails_helper.rb ด้วย)

ถ้าดูประเด็นในแง่การ maintain แล้ว จะเห็นว่าทั้งสองวิธีมีโอกาสเจอปัญหา
ตอน upgrade rails เท่าๆกันครับ

ส่วนประเด็นเรื่อง performance
ผมคิดว่ามันไม่น่าจะต่างกันอย่างมีนัยสำคัญได้ครับ

พลวัฒน์

On Sep 10, 3:52 pm, "Thawatchai Piyawat" <thawatc...@gmail.com> wrote:
> preprocessor ของ Erubis น่าสนใจมากครับ แต่ผมเห็นเขายังเขียนว่าเป็น
> experimental feature ก็เลยยังไม่ได้เอามาใช้ครับ
>
> ที่ใช้ Erubis อยู่ตอนนี้ผมใช้โดยการตั้ง require
> 'erubis/helpers/rails_helper' แต่ไม่ได้ patch ครับ
> ข้อมูลจากบางที่บอกว่าถ้า patch จะทำงานได้เร็วกว่า แต่ผมว่าการ patch
> จะยากต่อการ maintain ในอนาคตครับ ไม่ทราบว่าคุณพลวัฒน์คิดว่าอย่างไรครับ
>
> ธวัชชัย
>

> On 9/10/07, polawat phetra <pphe...@gmail.com> wrote:
>

Reply all
Reply to author
Forward
0 new messages