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

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand
  • สงครามจาวาสคริปยังไม่อยุด -> หยุด
  • ชื่ือว่า Iron monkey โดยกล่าวว่า -> คำว่า "ชื่อ" มีสระซ้อนครับ แนะนำว่าลบให้หมดทั้งคำแล้วพิมพ์ใหม่
  • การปรับปรุงประสิทธิภาพในการจองรีจิตเตอร์ -> รีจิสเตอร์
  • จาวาสคริป และ JavaScript ยังมีการใช้ปนกันอยู่ในบทความครับ ผมว่าเลือกเอาสักอันน่าจะดี (ความเห็นส่วนตัว)
  • คอมไพล์เลอร์ น่าจะเป็น คอมไพเลอร์ แต่ถ้าเป็นคำว่า Compile ก็ควรใช้ว่า คอมไพล์ครับ (ความเห็นส่วนตัว)
  • "สงครามจาวาสคริปยังไม่หยุด และล่าสุด" น่าจะขัดเกงาข้อความช่วงนี้ใหม่ (เช่น ตัดคำว่า "และ")
  • Engine => engine (คำนามทั่วไปขึ้นต้นตัวพิมพ์เล็ก)
  • Ironmonkey => IronMonkey
  • JavaScriptEngine ต้องแก้เป็น JavaScript engine ครับ (อ้างอิง)

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

  • Javascript engine ที่หัวข่าว แก้เป็น JavaScript Engine
  • Iron monkey กับ Ironmonkey แก้เป็น IronMonkey
  • หน้าวงเล็บเปิด หลังวงเล็บปิด หลังไม้ยมก (ๆ) หลังคำว่า เช่น เว้น 1 เคาะ
  • ช่วยปรับการเว้นวรรคในย่อหน้าสองด้วยครับ (ลองอ่านดูครับ ถ้าสะดุดหลายที่ก็ควรแก้)
  • "ได้กล่าวให้ใน Bug 650181" ตัดคำว่า ให้
  • "จาวาสคริปต์" นะครับ
  • ผมยังเห็น "ชื่ือ" สระซ้อนกันในบรรทัดแรกอยู่
  • (Static Single Assignment)เป็นเทคนิค - เครื่องหมายวรรคตอน
  • David Mandelin's blog , bug 650181 - เครื่องหมายวรรคตอน
  • garbage collector กับ "ตัวกำจัดขยะ" นี่ตกลงมันเป็นของสิ่งเดียวกันหรือเปล่า?
  • โปรโตไทป์ - ใช้ภาษาไทยได้
  • SSA คืออะไร?

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

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

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

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

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

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

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

จะว่าไป คำว่า "โดยการปรับปรุง" เนี่ย คือคำว่า 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 ก็ครือๆกันอยู่ดี