Tags:
Node Thumbnail

Mozilla ได้พัฒนาระบบ JavaScript engine ตัวใหม่ ชื่อว่า IonMonkey ซึ่งเป็นคอมไพเลอร์ที่ใช้เทคนิค SSA เพื่อ optimize ไบต์โค้ดในหลายๆ ส่วนที่ JägerMonkey ไม่สามารถทำได้ โดยการปรับปรุงนี้มีอาทิเช่น การรวมฟังก์ชันมากกว่าหนึ่งฟังก์ชันใดๆ เป็นฟังก์ชันเดียว (inlining) การเลือกชนิดข้อมูลให้เหมาะสมกับตัวแปรมากขึ้น การปรับปรุงประสิทธิภาพในการจองรีจิสเตอร์ การกำจัดไบต์โค้ดส่วนที่ไม่มีประโยชน์ทิ้ง ปรับปรุงประสิทธิภาพของการทำนายการ branch ในไบต์โค้ด รวมถึงการปรับปรุงการใช้หน่วยความจำของตัว engine เองให้น้อยลง

นอกจากนี้ ยังมีการปรับปรุงในส่วนของ garbage collector โดยการปรับปรุงนี้จะเปลี่ยนไปใช้ garbage collector แบบใหม่ที่เรียกว่า generational GC ซึ่งจะช่วยให้การทำงานเร็วขึ้นถึง 40% เมื่อเทียบกับ TraceMonkey หรือ Crankshaft เลยทีเดียว

ทาง Mozilla วางแผนจะพัฒนา IonMonkey ให้เสร็จทัน Firefox 5

หมายเหตุผู้เขียนข่าว SSA(Static Single Assignment) เป็นเทคนิคในการ optimize ผลลัพธ์ของไบต์โค้ดที่คอมไพล์ได้จากคอมไพเลอร์ สามารถอ่านได้จาก ที่นี่

ที่มา - David Mandelin's blog

Get latest news from Blognone

Comments

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 3 May 2011 - 22:04 #284753
PaPaSEK's picture
  • สงครามจาวาสคริปยังไม่อยุด -> หยุด
  • ชื่ือว่า Iron monkey โดยกล่าวว่า -> คำว่า "ชื่อ" มีสระซ้อนครับ แนะนำว่าลบให้หมดทั้งคำแล้วพิมพ์ใหม่
  • การปรับปรุงประสิทธิภาพในการจองรีจิตเตอร์ -> รีจิสเตอร์
  • จาวาสคริป และ JavaScript ยังมีการใช้ปนกันอยู่ในบทความครับ ผมว่าเลือกเอาสักอันน่าจะดี (ความเห็นส่วนตัว)
  • คอมไพล์เลอร์ น่าจะเป็น คอมไพเลอร์ แต่ถ้าเป็นคำว่า Compile ก็ควรใช้ว่า คอมไพล์ครับ (ความเห็นส่วนตัว)
By: nant
ContributorWindows PhoneRed HatUbuntu
on 3 May 2011 - 22:11 #284756 Reply to:284753

แก้แล้วครับ
Javascript Engine -> JavaScriptEngine จะได้รวมเป็นคำเดียวเลย ใช้ได้ใหมครับ?

By: nuntawat
WriterAndroidWindowsIn Love
on 3 May 2011 - 22:17 #284757 Reply to:284756
nuntawat's picture
  • "สงครามจาวาสคริปยังไม่หยุด และล่าสุด" น่าจะขัดเกงาข้อความช่วงนี้ใหม่ (เช่น ตัดคำว่า "และ")
  • Engine => engine (คำนามทั่วไปขึ้นต้นตัวพิมพ์เล็ก)
  • Ironmonkey => IronMonkey
  • JavaScriptEngine ต้องแก้เป็น JavaScript engine ครับ (อ้างอิง)
By: nant
ContributorWindows PhoneRed HatUbuntu
on 3 May 2011 - 22:17 #284760 Reply to:284757
  1. แก้แล้วครับ
  2. แก้เป็น JavaScript engine ตามอ้างอิงนะครับ
By: nuntawat
WriterAndroidWindowsIn Love
on 3 May 2011 - 22:23 #284762 Reply to:284760
nuntawat's picture

ยังแก้ไม่หมดครับ

  • Javascript engine ที่หัวข่าว แก้เป็น JavaScript Engine
  • Iron monkey กับ Ironmonkey แก้เป็น IronMonkey
  • หน้าวงเล็บเปิด หลังวงเล็บปิด หลังไม้ยมก (ๆ) หลังคำว่า เช่น เว้น 1 เคาะ
  • ช่วยปรับการเว้นวรรคในย่อหน้าสองด้วยครับ (ลองอ่านดูครับ ถ้าสะดุดหลายที่ก็ควรแก้)
  • "ได้กล่าวให้ใน Bug 650181" ตัดคำว่า ให้
By: nant
ContributorWindows PhoneRed HatUbuntu
on 3 May 2011 - 22:33 #284764 Reply to:284762
1.แก้แล้ว
2.แก้แล้ว
3.แก้แล้ว
4.แก้แล้ว
5.ตัดแล้ว
O_O
เย้
By: PaPaSEK
ContributorAndroidWindowsIn Love
on 3 May 2011 - 22:33 #284769 Reply to:284764
PaPaSEK's picture

ฮา :p

By: mk
FounderAndroid
on 3 May 2011 - 22:37 #284771 Reply to:284753
mk's picture
  • "จาวาสคริปต์" นะครับ
  • ผมยังเห็น "ชื่ือ" สระซ้อนกันในบรรทัดแรกอยู่
  • (Static Single Assignment)เป็นเทคนิค - เครื่องหมายวรรคตอน
  • David Mandelin's blog , bug 650181 - เครื่องหมายวรรคตอน
  • garbage collector กับ "ตัวกำจัดขยะ" นี่ตกลงมันเป็นของสิ่งเดียวกันหรือเปล่า?
  • โปรโตไทป์ - ใช้ภาษาไทยได้
  • SSA คืออะไร?
By: nant
ContributorWindows PhoneRed HatUbuntu
on 3 May 2011 - 22:58 #284774 Reply to:284771
แก้แล้วครับ
SSA คุณเอ็มเคเห็นควรว่าไงครับ?
By: mk
FounderAndroid
on 3 May 2011 - 23:04 #284797 Reply to:284774
mk's picture

ผมว่าคุณลองใจเย็นๆ แล้วนั่งเรียบเรียงเนื้อหาทั้งหมดใหม่ (ผมแนะนำว่าให้เขียนใหม่แบบไม่ต้องดูของเก่า เพราะคุณจำเนื้อหาและเรื่องราวได้อยู่แล้ว) ลองให้สั้นลงเหลือสัก 75% ของของเดิม อะไรที่ไม่จำเป็น คำไหนที่มันซ้ำซ้อนก็ตัดออกไป (ต้องกล้าตัด) แล้วก็ตรวจสอบเรื่องการสะกดตามที่หลายๆ คอมเมนต์ในนี้บอกมาด้วยครับ

จะเป็นกำลังใจให้ครับ พยายามเข้า!

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 3 May 2011 - 23:22 #284806 Reply to:284774
PaPaSEK's picture

ผมเป็นกำลังใจให้อีกหนึ่งคนครับ ของผมแก้มันกว่านี้เยอะครับ

บางทีข้ามวัน ฮ่า ฮ่า

By: nant
ContributorWindows PhoneRed HatUbuntu
on 3 May 2011 - 23:24 #284807 Reply to:284806

แก้แล้วครับ

By: PaPaSEK
ContributorAndroidWindowsIn Love
on 3 May 2011 - 23:27 #284810 Reply to:284807
PaPaSEK's picture

สามารถอานได้จาก ที่นี่ -> อ่าน ครับ

สู้ๆ ใกล้แล้ว

By: nant
ContributorWindows PhoneRed HatUbuntu
on 3 May 2011 - 23:51 #284814 Reply to:284810

โอเคนะครับ ตัดคำฟุ่มเฟียออก เหลือไว้แต่เนื้อที่ผมต้องการสื่อหละ

By: mr_tawan
ContributoriPhoneAndroidWindows
on 4 May 2011 - 02:29 #284854 Reply to:284753
mr_tawan's picture

อันนี้ความเห็นส่วนตัวนะครับ ผมว่าย่อหน้าแรกตั้งแต่หลัง [อาทิเช่น] เนี่ยอาจจะลองทำเป็น list ดู น่าจะอ่านง่ายกว่าน่ะครับ

ประมาณนี้ครับ

โดยการปรับปรุงนี้มีอาทิเช่น

  • การรวมฟังก์ชันมากกว่าหนึ่งฟังก์ชันใดๆ เป็นฟังก์ชันเดียว (inlining)
  • การเลือกชนิดข้อมูลให้เหมาะสมกับตัวแปรมากขึ้น
  • การปรับปรุงประสิทธิภาพในการจองรีจิสเตอร์
  • การกำจัดไบต์โค้ดส่วนที่ไม่มีประโยชน์ทิ้ง
  • ปรับปรุงประสิทธิภาพของการทำนายการ branch ในไบต์โค้ด
  • การปรับปรุงการใช้หน่วยความจำของตัว engine เองให้น้อยลง

ลองเก็บไปคิดดูนะครับว่ามันอ่านง่ายจริงหรือเปล่า :-)


  • 9tawan.net บล็อกส่วนตัวฮับ
By: mr_tawan
ContributoriPhoneAndroidWindows
on 4 May 2011 - 02:48 #284858 Reply to:284854
mr_tawan's picture

จะว่าไป คำว่า "โดยการปรับปรุง" เนี่ย คือคำว่า Optimize หรือเปล่าครับ ??

ถ้าใช่นะ (ไม่มั่นใจ) ผมว่าใช้คำใดคำนึงดีกว่าครับ


  • 9tawan.net บล็อกส่วนตัวฮับ
By: korrawit
ContributorAndroid
on 4 May 2011 - 16:20 #285103 Reply to:284753

อาทิเช่น -> เช่น ก็พอครับ

By: Thaina
Windows
on 3 May 2011 - 22:21 #284763

ผมสงสัยมากว่า เมื่อไหร่ JavaScript จะ Compile เปน ByteCode ตั้งแต่ตอน Deploy

แล้วให้ Browser แข่งกันทำ Compiler ไม่ใช่ Parser แบบตอนนี้

By: mr_tawan
ContributoriPhoneAndroidWindows
on 3 May 2011 - 23:15 #284803 Reply to:284763
mr_tawan's picture

ตอนเทสต์ก็คอมไพล์กันมันส์ :-) + ฝังลงไปใน HTML ไม่ได้ (ก็ฝังได้แหละแต่มันอ่านแทบไม่ออก)

ผมว่าจริง ๆ แล้วตอนนี้ Browser ก็ใช้ JIT กันหมดแล้วนะ ค้น ๆ ไปมันคอมไพล์ก่อนถึงจะเรนเดอร์หน้าด้วยซ้ำแฮะ ...

ถ้าจะเอา Precompile จริง ๆ คงไม่ใช่เพราะเรื่องความเร็วครับ คงเป็นเรื่องป้องกันการแกะโค๊ดมากกว่าล่ะนะ

ปล. แต่ถ้าอยากคอมไพล์เป็น Byte Code จริง ๆ ก็ ... https://developer.mozilla.org/en/Rhino_JavaScript_Compiler


  • 9tawan.net บล็อกส่วนตัวฮับ
By: Thaina
Windows
on 3 May 2011 - 23:34 #284812 Reply to:284803

ผมว่าบางทีอาจจะง่ายกว่านะ ทำ IDE ง่ายดี -

ส่วนตัวผมว่า ต่อให้ JIT ยังไง มันก็ต้อง Parse ก่อนรอบนึงอยู่ดี
ไอ้ตอน Parse เนี่ยผมว่าเสียเวลาสุด(ความเชื่อส่วนตัว)

เท่าที่คิดตอนนี้คือ น่าจะให้ Server มัน compile javascript ที่อยู่ใน page ให้เปน bytecode หรือ CLR (แล้วอาจจะ cache เก็บไว้จนกว่าจะ deploy version ใหม่ ขึ้นมา) แล้วส่งไปให้ Browser
จะ JIT หรืออะไรก็ตามสะดวก หรือบางที Browser รุ่นหน้าอาจจะดึงเอา JVM หรือ .NET มาใช้แทนไปเลย

พูดถึงตอนนี้ ผมเขียน GAE ด้วย Eclipse
มันมีพวก GWT ที่เขียน JavaScript ให้จากฟังค์ชั่น Java
จริงๆก็คล้ายๆเขียน ASP Form ละมั้ง? คิดว่านะครับ

มันก็ทำ obfuscated code เปนหลัก อ่านไม่ออกอยู่ดี

By: mr_tawan
ContributoriPhoneAndroidWindows
on 4 May 2011 - 02:46 #284857 Reply to:284812
mr_tawan's picture

ปัญหาคือบน iOS และ Android ไม่มี (และในอนาคตอันไกลโพ้นก็คงจะไม่มี) CLR Runtime และ/หรือ JVM อ่ะครับ ถ้ามันจะมีจริงก็คงเป็นมาตรฐานของ javascript เอง ซึ่งผมคิดว่ามีความเป็นไปได้สูงกว่ามาก ถ้ามันเป็นมาตรฐานที่ออกโดย W3C น่ะนะครับ (ก็ต้องรอบริษัทใน W3C ไปตบตีฆ่าฟันกันให้ได้มาตรฐานก่อนล่ะมั้ง ?)

นี่ยังไม่นับอุปกรณ์สารพัดรูปแบบที่ท่องเวปได้ในปัจจุบันเลยนะ เอาเข้าจริง ๆ ประโยชน์ของการทำ Precompile น่าจะไปตกกับพวกอุปกรณ์มือถือ หรือพวก Embeded ทั้งหลายที่แรงม้าต่ำล่ะมั้ง ?

ส่วนเรื่อง IDE นี่อาจจะช่วยเรื่อง ... Debug ได้ง่ายขึ้น ... หรือเปล่า (พยายามนึกอยู่) ปัจจุบันตัว Debugger น่าจะอาศัย Browser เป็นคน Debug ให้ (แล้วตัวเองก็ป้อนข้อมูล/รับข้อมูลกลับ อย่างเดียว) การที่ส่งเข้าไปเป็น Byte Code อาจจะทำให้คุยกับ Browser ได้ง่ายขึ้นก็ได้ (แต่จริง ๆ ตอนนี้อาจจะคุยกันด้วย Byte Code อยู่แล้วล่ะมั้ง ?)

อืม ผมลืมเรื่อง GAE ไปเลยล่ะ 555 ไม่ได้จับอ่ะครับ

เรื่องนึงที่ผมคิด ก็คือ HTML เนี่ย ตามคอนเซพท์แล้วเค้าออกแบบมาให้ส่งข้อมูลเป็นข้อความ และเลี่ยงการส่งข้อมูลที่เป็น Binary ในส่วนที่ตัว Browser จะต้องตีความ (พวก Object ต่าง ๆ นี่ Browser ทำได้แค่เอาไปวางไว้ในตำแหน่ง แต่ว่าตัวมันเองไม่เข้าใจหรอกว่า Object พวกนี้คืออะไร) และภาษา Script เองก็เป็นส่วนนึงของ HTML ไปแล้ว (แบบงง ๆ ผมว่า HTML เนี่ย พอมี Script เข้ามามันดูมั่ว ๆ ชอบกล) และ Browser เองก็ต้องตีความสคริปท์นี้เพราะว่ามันมีส่วนที่มีปฎิสัมพันธ์กับ HTML ส่วนอื่น ๆ ดังนั้นมันยังคงต้องคงความเป็น Text ตาม HTML เอาไว้

... ไม่รู้นะ ตอนนี้จะตีสองแล้ว คิดอะไรไม่ค่อยออกอ่ะครับ 555 อ่านแล้วงง ๆ ก็ข้าม ๆ ไปนะ


  • 9tawan.net บล็อกส่วนตัวฮับ
By: Thaina
Windows
on 4 May 2011 - 03:02 #284861 Reply to:284857

ผมก็ไม่มีปัญหากับเรื่องที่มันไม่ใช่ CLR หรือ JVM นะ

จริงๆก็คิดว่ามันควรจะเปนอย่างนั้น คือเปนมาตรฐาน ของ Compiled JavaScript ออกโดย W3C

ประเด็นคือถ้ามีมาตรฐานตัวนี้ เราไม่ต้องยึดติดกับภาษา JavaScript เลยด้วย
เขียน C# แล้วแทนที่จะ Compile เปน CLR หรือเขียน Java แล้วแทนที่จะออกมาเปน ByteCode ก็เปนตัวนี้แทน
เขียน Flash หรือ HTML5 ก็ออกมาเปนตัวนี้

และ อย่างที่พูดเลยครับ ผลดีของ PreCompile ที่มันอัพ Performance มันก็ไปเข้าทางพวกอุปกรณ์พกพาร้อยแปด

แถม ต่อให้เล่นเว็บบน PC อีกหกปีข้างหน้า มี Performance มากกว่ามันก็ดีกว่าอยู่ดีแหละ

ไอเดียผมคิดว่า ถ้ามี PreCompile แล้วเปิดฟังค์ชั่น Debug
ก็คือให้มันแทรกโค้ดส่งข้อมูลกลับมาที่ IDE ที่เขียนนั่นแหละครับ
แทนที่จะต้องทำ PlugIn ใน Browser ให้วุ่นวาย ก็ยิง WebSocket กลับมาหา IDE ไปเลยประมาณนั้น

สุดท้าย....ไม่รู้นะ ส่วนตัวผมคิดว่า มันน่าจะง่ายๆ
คือ HTML ก็เขียนแต่ HTML ไปเลย
ส่วน Binary ไม่ต้องโหลดมาพร้อมกัน แต่ใช้อะไรประมาณ AJAX สูบมาทีหลัง

คือเขียนแค่แบบ OnLoadFinish=Server.OnLoadFinish อะไรพวกเนี้ย พอ
ที่เหลือ กอง Binary จะส่งมาตามนั้น ไม่ได้รวมมาด้วย

เดี๋ยวนี้ผมเห็นหลายเว็บละ ที่หน้าเว็บว่างเปล่า มีโหลด JavaScript ฟังค์ชั่นเดียว
GAE ก็ทำงี้เหมือนกัน

ผมว่า งี้จะ Binary หรือ Script ก็ครือๆกันอยู่ดี

By: joomla
iPhoneUbuntu
on 3 May 2011 - 22:33 #284768
joomla's picture

จะยังคงเป็นแฟนคลับต่อไปอีกนาน สู้ๆ

By: nant
ContributorWindows PhoneRed HatUbuntu
on 3 May 2011 - 23:04 #284790

คงแก้หมด หละมั้ง +_+ รึว่ายังมีอะไรเหลืออยู่อีก โปรดชี้แนะ

By: Pinery
ContributoriPhoneAndroidIn Love
on 4 May 2011 - 00:04 #284822 Reply to:284790

สู้ๆ นับถือในความพยายามมากครับ เย่ ^0^

By: nant
ContributorWindows PhoneRed HatUbuntu
on 3 May 2011 - 22:57 #284791

ซ้ำ

By: aomnaruk
ContributorAndroidUbuntuWindows
on 4 May 2011 - 01:29 #284839

================
(อ่านเนื้อข่าวผิด)


"Those who make peaceful revolution impossible will make violent revolution inevitable." JFK.

By: lancaster
Contributor
on 4 May 2011 - 05:00 #284883

อ่านข่าวแล้วตกใจ ผมยังใช้ TraceMonkey อยู่เลย -*-