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
แก้แล้วครับ
Javascript Engine -> JavaScriptEngine จะได้รวมเป็นคำเดียวเลย ใช้ได้ใหมครับ?
ยังแก้ไม่หมดครับ
ฮา :p
ผมว่าคุณลองใจเย็นๆ แล้วนั่งเรียบเรียงเนื้อหาทั้งหมดใหม่ (ผมแนะนำว่าให้เขียนใหม่แบบไม่ต้องดูของเก่า เพราะคุณจำเนื้อหาและเรื่องราวได้อยู่แล้ว) ลองให้สั้นลงเหลือสัก 75% ของของเดิม อะไรที่ไม่จำเป็น คำไหนที่มันซ้ำซ้อนก็ตัดออกไป (ต้องกล้าตัด) แล้วก็ตรวจสอบเรื่องการสะกดตามที่หลายๆ คอมเมนต์ในนี้บอกมาด้วยครับ
จะเป็นกำลังใจให้ครับ พยายามเข้า!
ผมเป็นกำลังใจให้อีกหนึ่งคนครับ ของผมแก้มันกว่านี้เยอะครับ
บางทีข้ามวัน ฮ่า ฮ่า
แก้แล้วครับ
สามารถอานได้จาก ที่นี่ -> อ่าน ครับ
สู้ๆ ใกล้แล้ว
โอเคนะครับ ตัดคำฟุ่มเฟียออก เหลือไว้แต่เนื้อที่ผมต้องการสื่อหละ
อันนี้ความเห็นส่วนตัวนะครับ ผมว่าย่อหน้าแรกตั้งแต่หลัง [อาทิเช่น] เนี่ยอาจจะลองทำเป็น list ดู น่าจะอ่านง่ายกว่าน่ะครับ
ประมาณนี้ครับ
ลองเก็บไปคิดดูนะครับว่ามันอ่านง่ายจริงหรือเปล่า :-)
จะว่าไป คำว่า "โดยการปรับปรุง" เนี่ย คือคำว่า Optimize หรือเปล่าครับ ??
ถ้าใช่นะ (ไม่มั่นใจ) ผมว่าใช้คำใดคำนึงดีกว่าครับ
อาทิเช่น -> เช่น ก็พอครับ
ผมสงสัยมากว่า เมื่อไหร่ JavaScript จะ Compile เปน ByteCode ตั้งแต่ตอน Deploy
แล้วให้ Browser แข่งกันทำ Compiler ไม่ใช่ Parser แบบตอนนี้
ตอนเทสต์ก็คอมไพล์กันมันส์ :-) + ฝังลงไปใน HTML ไม่ได้ (ก็ฝังได้แหละแต่มันอ่านแทบไม่ออก)
ผมว่าจริง ๆ แล้วตอนนี้ Browser ก็ใช้ JIT กันหมดแล้วนะ ค้น ๆ ไปมันคอมไพล์ก่อนถึงจะเรนเดอร์หน้าด้วยซ้ำแฮะ ...
ถ้าจะเอา Precompile จริง ๆ คงไม่ใช่เพราะเรื่องความเร็วครับ คงเป็นเรื่องป้องกันการแกะโค๊ดมากกว่าล่ะนะ
ปล. แต่ถ้าอยากคอมไพล์เป็น Byte Code จริง ๆ ก็ ... https://developer.mozilla.org/en/Rhino_JavaScript_Compiler
ผมว่าบางทีอาจจะง่ายกว่านะ ทำ 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 เปนหลัก อ่านไม่ออกอยู่ดี
ปัญหาคือบน 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 อ่านแล้วงง ๆ ก็ข้าม ๆ ไปนะ
ผมก็ไม่มีปัญหากับเรื่องที่มันไม่ใช่ 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 ก็ครือๆกันอยู่ดี
จะยังคงเป็นแฟนคลับต่อไปอีกนาน สู้ๆ
คงแก้หมด หละมั้ง +_+ รึว่ายังมีอะไรเหลืออยู่อีก โปรดชี้แนะ
สู้ๆ นับถือในความพยายามมากครับ เย่ ^0^
ซ้ำ
================
(อ่านเนื้อข่าวผิด)
"Those who make peaceful revolution impossible will make violent revolution inevitable." JFK.
อ่านข่าวแล้วตกใจ ผมยังใช้ TraceMonkey อยู่เลย -*-