Tags:
Firefox

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

Comments

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

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

By: nuntawat
WriterAndroidWindows
nuntawat's blog
on 03/05/11 21:17 #284757 Reply to:284756 toggle
nuntawat's picture
  • "สงครามจาวาสคริปยังไม่หยุด และล่าสุด" น่าจะขัดเกงาข้อความช่วงนี้ใหม่ (เช่น ตัดคำว่า "และ")
  • Engine => engine (คำนามทั่วไปขึ้นต้นตัวพิมพ์เล็ก)
  • Ironmonkey => IronMonkey
  • JavaScriptEngine ต้องแก้เป็น JavaScript engine ครับ (อ้างอิง)
By: nant
ContributorRed HatUbuntuIn Love
nant's blog
on 03/05/11 21:17 #284760 Reply to:284757 toggle
nant's picture
  1. แก้แล้วครับ
  2. แก้เป็น JavaScript engine ตามอ้างอิงนะครับ
By: nuntawat
WriterAndroidWindows
nuntawat's blog
on 03/05/11 21:23 #284762 Reply to:284760 toggle
nuntawat's picture

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

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

ฮา :p

By: mk
FounderAndroidRed HatWindows
mk's blog
on 03/05/11 21:37 #284771 Reply to:284753 toggle
mk's picture
  • "จาวาสคริปต์" นะครับ
  • ผมยังเห็น "ชื่ือ" สระซ้อนกันในบรรทัดแรกอยู่
  • (Static Single Assignment)เป็นเทคนิค - เครื่องหมายวรรคตอน
  • David Mandelin's blog , bug 650181 - เครื่องหมายวรรคตอน
  • garbage collector กับ "ตัวกำจัดขยะ" นี่ตกลงมันเป็นของสิ่งเดียวกันหรือเปล่า?
  • โปรโตไทป์ - ใช้ภาษาไทยได้
  • SSA คืออะไร?

my disclaimer

By: nant
ContributorRed HatUbuntuIn Love
nant's blog
on 03/05/11 21:58 #284774 Reply to:284771 toggle
nant's picture
แก้แล้วครับ
SSA คุณเอ็มเคเห็นควรว่าไงครับ?
By: mk
FounderAndroidRed HatWindows
mk's blog
on 03/05/11 22:04 #284797 Reply to:284774 toggle
mk's picture

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

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


my disclaimer

By: PaPaSEK
ContributorAndroidWindowsIn Love
PaPaSEK's blog
on 03/05/11 22:22 #284806 Reply to:284774 toggle
PaPaSEK's picture

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

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

By: nant
ContributorRed HatUbuntuIn Love
nant's blog
on 03/05/11 22:24 #284807 Reply to:284806 toggle
nant's picture

แก้แล้วครับ

By: PaPaSEK
ContributorAndroidWindowsIn Love
PaPaSEK's blog
on 03/05/11 22:27 #284810 Reply to:284807 toggle
PaPaSEK's picture

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

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

By: nant
ContributorRed HatUbuntuIn Love
nant's blog
on 03/05/11 22:51 #284814 Reply to:284810 toggle
nant's picture

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

By: mr_tawan
ContributoriPhoneAndroidWindows
mr_tawan's blog
on 04/05/11 1:29 #284854 Reply to:284753 toggle
mr_tawan's picture

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

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

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

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

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


By: mr_tawan
ContributoriPhoneAndroidWindows
mr_tawan's blog
on 04/05/11 1:48 #284858 Reply to:284854 toggle
mr_tawan's picture

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

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


By: korrawit
AndroidUbuntu
korrawit's blog
on 04/05/11 15:20 #285103 Reply to:284753 toggle
korrawit's picture

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

By: Thaina
Windows
Thaina's blog
on 03/05/11 21:21 #284763 toggle
Thaina's picture

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

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


My Blog

By: mr_tawan
ContributoriPhoneAndroidWindows
mr_tawan's blog
on 03/05/11 22:15 #284803 Reply to:284763 toggle
mr_tawan's picture

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

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

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

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


By: Thaina
Windows
Thaina's blog
on 03/05/11 22:34 #284812 Reply to:284803 toggle
Thaina's picture

ผมว่าบางทีอาจจะง่ายกว่านะ ทำ 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 เปนหลัก อ่านไม่ออกอยู่ดี


My Blog

By: mr_tawan
ContributoriPhoneAndroidWindows
mr_tawan's blog
on 04/05/11 1:46 #284857 Reply to:284812 toggle
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 อ่านแล้วงง ๆ ก็ข้าม ๆ ไปนะ


By: Thaina
Windows
Thaina's blog
on 04/05/11 2:02 #284861 Reply to:284857 toggle
Thaina's picture

ผมก็ไม่มีปัญหากับเรื่องที่มันไม่ใช่ 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 ก็ครือๆกันอยู่ดี


My Blog

By: joomla
iPhoneUbuntu
joomla's blog
on 03/05/11 21:33 #284768 toggle
joomla's picture

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


v___v

By: nant
ContributorRed HatUbuntuIn Love
nant's blog
on 03/05/11 22:04 #284790 toggle
nant's picture

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

By: Pinery
ContributoriPhoneAndroid
Pinery's blog
on 03/05/11 23:04 #284822 Reply to:284790 toggle
Pinery's picture

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

By: nant
ContributorRed HatUbuntuIn Love
nant's blog
on 03/05/11 21:57 #284791 toggle
nant's picture

ซ้ำ

By: aomnaruk
ContributorAndroidUbuntuWindows
aomnaruk's blog
on 04/05/11 0:29 #284839 toggle
aomnaruk's picture

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


~ความกลัวทำให้เสื่อม~

By: lancaster
ContributoriPhoneAndroidWindows
lancaster's blog
on 04/05/11 4:00 #284883 toggle
lancaster's picture

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