ทางเลือกที่พิมพ์แบบคงที่เพื่อ JavaScript บนหน้าเว็บจะเป็นประโยชน์?


9

การตั้งค่าสำหรับการพิมพ์แบบไดนามิกและแบบคงที่ส่วนใหญ่เป็นเรื่องของรสนิยมและผู้คนที่แตกต่างกันพบว่าพวกเขาเหมาะสมมากหรือน้อยในสถานการณ์ที่แตกต่างกัน

คำถามของฉันคือจะเป็นไปได้หรือไม่ที่จะมีทางเลือกให้พิมพ์ JavaScript เพื่อการเพิ่มหน้าเว็บฝั่งไคลเอ็นต์ ฯลฯ ?


3
ทำไมไม่ทำอย่างนั้นล่ะ `` `''
Josh K

2
คุณกำลังพูดถึงภาษาที่พิมพ์แบบคงที่ซึ่งเบราว์เซอร์ทุกตัวจะต้องนำไปใช้หรือมีความเป็นไปได้อยู่แล้ว?
281377

2
คุณสามารถใช้ Java applets ฉันคิดว่า
David Thornley

@ammoQ ที่คุณพูดถึง Hypothetical
Armand

@ Josh ฉันไม่รู้ @ David LOL ขอบคุณสำหรับสิ่งนั้น!
อาร์มันด์

คำตอบ:


22

ไม่มีเหตุผลทางเทคนิคอย่างแน่นอน ไม่มีอะไรพิเศษเกี่ยวกับรหัสฝั่งไคลเอ็นต์ที่บังคับให้ใช้ภาษาที่พิมพ์แบบไดนามิก


1
Dart มีตัวเลือกการพิมพ์คงที่ แต่คอมไพล์ไปที่ Javascript สามัญ www.dartlang.com
Nishant George Agrwal

16

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

ตัวอย่างเช่นสคริปต์ของคุณดูเหมือนว่า:

<script type="text/staticjavascript">
   String foobar(int foo, String bar) {
      String result="";
      for (int i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

และตัวประมวลผลล่วงหน้าจะตรวจสอบว่าทุกตัวแปรฟังก์ชันวัตถุ ฯลฯ ถูกใช้อย่างถูกต้องตามประเภทของมันและเปลี่ยนสคริปต์เป็น

<script type="text/javascript">
   function foobar(foo, bar) {
      var result="";
      for (var i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

ซึ่งเบราว์เซอร์ทุกตัวสามารถจัดการได้


5
+1 สำหรับแนวทางปฏิบัติ
Gary Rowe

คำถามนี้ไม่ได้เกี่ยวกับลัทธินิยมนิยม แต่เกี่ยวกับทฤษฎี จะอัปเดต
อาร์มันด์

2
ฉันขอแนะนำให้ใช้การอนุมานประเภท
Oliver Weiler

วิธีใช้ตัวช่วย: ข้อเสนอแนะที่ดีมาก แต่ฉันไม่ได้เปลี่ยนตัวอย่างของฉันตอนนี้เนื่องจากการอนุมานประเภทจะทำให้รุ่นคงที่คล้ายกับรุ่นแบบไดนามิกเนื่องจากตัวอย่างนั้นง่ายมาก
user281377

4
ฉันไม่คิดว่าจาวาสคริปต์ที่พิมพ์แบบสแตติกจะใกล้เคียงกับจาวามากไปกว่า syntactically Javascript และ Java มีความแตกต่างมากมายนอกเหนือจากการพิมพ์แบบคงที่และแบบไดนามิก - OO ตามคลาสกับต้นแบบสำหรับหนึ่ง เนื่องจากโค้ดตัวอย่างของคุณดูเหมือนจะเป็นแบบคลาสฉันจึงยืนยันว่า "staticjavascript" นั้นเป็นชื่อเรียกผิดของภาษานั้นและควรเรียกว่า "Java ฝั่งไคลเอ็นต์" +1 สำหรับการรวบรวมไปยังจาวาสคริปต์ (btw Google Web Toolkit ทำการรวบรวมจาวาเป็นจาวาสคริปต์)
sepp2k

8

คำถามของฉันคือจะเป็นไปได้หรือไม่ที่จะมีทางเลือกให้พิมพ์ JavaScript เพื่อการเพิ่มหน้าเว็บฝั่งไคลเอ็นต์ ฯลฯ ?

แน่ใจ Google Web Toolkitไพล์แบบคงที่พิมพ์ Java เพื่อ JavaScript ... เพียงแค่คิดว่ามันทุกความงามและความยืดหยุ่นของชวากับประสิทธิภาพการทำงานของเครื่องสร้างจาวาสคริปต์!

อย่างจริงจังแม้ว่าคุณสามารถทำเช่นนี้สำหรับภาษาทุกประเภทและหลายคนได้ลอง (มีหรือได้รับการรวบรวมสำหรับ C และ C # เช่นกัน) ไม่ว่าผลลัพธ์จะเป็นไปตามจริงหรือไม่นั้นขึ้นอยู่กับสิ่งที่คุณพยายามจะทำให้สำเร็จ: Google เป็นแพลตฟอร์มที่สอดคล้องกันสำหรับการพัฒนาแอปฝั่งไคลเอ็นต์ขนาดใหญ่มากและมีเอนจิ้น JavaScript ของตนเองในการบูต คุณอาจพบว่าการใช้สัตว์ร้ายเช่นนี้กับเอฟเฟ็กต์แบบโฮเวอร์และการโทร AJAX แปลก ๆ นำเสนอความเจ็บปวดมากกว่าการเรียนรู้ที่จะอยู่กับโค้ดที่ไม่มีการพิมพ์เล็กน้อย ...


3
ฉันไม่สามารถบอกได้ทั้งหมดว่าคุณพูดเล่นเรื่อง "ผลประโยชน์" ของ GWT หรือไม่ ถ้าคุณเป็นไชโย การทำงานกับ GWT เป็นหนึ่งในประสบการณ์ที่น่ากลัวที่สุดในชีวิตของฉัน
นิโคล

@Renesis: ราวกับว่าการทำงานกับ Javascript และความเข้ากันได้ของเบราว์เซอร์ยังไม่ได้ทำให้โกรธ แต่มันมีคุณสมบัติที่ลื่นเช่นการดาวน์โหลดหลายภาพในภาพเดียวแล้วตัดมันขึ้นบนไคลเอนต์
Macneil

1
@Macneil พวกเขาอาจแก้ไขได้ในตอนนี้ แต่เมื่อฉันทำงานกับ Sprites มันเกือบจะเป็นไปไม่ได้ผลประโยชน์ทั้งหมดเพราะมันเขียนคุณสมบัติพื้นหลัง CSS อื่น ๆ ที่คุณอาจไม่ต้องการโดยอัตโนมัติดังนั้นคุณต้องถ่วง CSS ของคุณทุกครั้งเพื่อแทนที่มัน .
นิโคล

6

ประโยชน์ส่วนใหญ่ของภาษาที่พิมพ์แบบสแตติกจะถูกรับรู้ในเวลารวบรวม หากภาษากำลังจะถูกตีความในลูกค้าแล้วข้อได้เปรียบเหล่านั้นจะหายไป หากคุณรวบรวมพวกเขาบนเซิร์ฟเวอร์แล้วคุณจะต้องคิดวิธีการโหลดและเรียกใช้บนไคลเอนต์ (คิดว่าตัวควบคุม ActiveX) คุณสามารถใช้วิธีไฮบริด (รวบรวมเป็นรูปแบบโทเค็นขั้นกลาง) แต่โดยทั่วไปแล้วคุณกลับไปที่แอปเพล็ต Java


2
+1 เพื่ออธิบายสาเหตุที่เป็นไปได้ว่าทำไมถึงไม่ใช่ไม่ใช่แค่ตอบถ้าเป็นไปได้

4

มันมีอยู่แล้ว

ActionScript 3 (ภาษาสคริปต์ที่อยู่หลัง Flash และ Flex) เป็นภาษาถิ่นของ ECMAScript ที่ใช้ประเภทที่แข็งแกร่งและคุณสามารถใช้มันในแบบฝั่งไคลเอ็นต์แบบเดียวกับที่มากกว่าหรือน้อยกว่าเช่น JavaScript (ความแตกต่างที่ AS3 ต้องการปลั๊กอินแฟลชและ รวบรวมแล้ว) โดยส่วนตัวแล้วฉันพยายามที่จะหลีกเลี่ยงมันในทุกวันนี้ แต่ถ้าคุณอยู่ในค่าย "คงที่" ให้มันหมุนวน

นั่นเป็นคำตอบสำหรับคำถามหลักและตอนนี้เรามีแล้วคำถามที่สองของคุณจะกลายเป็น "ใช้งานได้จริงหรือไม่" คำตอบคือ "ใช่" โดยมี "ถ้า" และ "แต่"

  • ... หากคุณต้องการซ่อนรหัสของคุณไม่ว่าด้วยเหตุผลใด
  • ... ถ้าคุณต้องการการโต้ตอบระดับสูงมาก (ระดับ jQuery ที่ผ่านมา)
  • ... แต่ถึงแม้จะไม่มี HTML5 ความสามารถในการใช้งานข้ามเบราว์เซอร์ก็ดีขึ้นมากในระยะหลัง
  • ... แต่ HTML5 กำลังจะมาเร็ว ๆ นี้
  • ... แต่หนึ่งในการดึงการพิมพ์ / การรวบรวมแบบคงที่ (ตรงข้ามกับการตีความ) คือความเร็วที่เพิ่มขึ้นซึ่งอนุญาตให้ผ่านการปรับให้เหมาะสม (และ Flash ไม่ได้มีความเร็วที่ดีมากจริงๆถึงแม้จะเป็นระบบพิมพ์)

AS3 ใช้ ES4 ที่ถูกทอดทิ้ง
gsnedders

3

ในทางทฤษฎีคุณสามารถติดสคริปต์ใด ๆ บนหน้าเว็บที่คุณต้องการ <script>แท็กมีtypeแอตทริบิวต์หลังจากทั้งหมด

อุปสรรคเดียวคือการได้รับส่วนแบ่งการตลาดที่เพียงพอในแง่ของการใช้งานในเบราว์เซอร์ที่แตกต่างกันเพื่อให้คุ้มค่าในการใช้


ดังนั้นใช่มันไม่น่าเป็นไปได้ที่จุดนี้


ดังนั้นไม่มีปัญหากับการพิมพ์คงที่แล้ว? ฉันไม่ได้กังวลเกี่ยวกับการใช้งานจริงของการจับนี้
อาร์มันด์

1
@Alison: คุณสามารถวางเนื้อหาที่เป็นข้อความใด ๆ ที่คุณต้องการในแท็กสคริปต์ (มีข้อยกเว้นหนึ่งข้อ - มันไม่สามารถมีลำดับตัวอักษร</script>) คุณสามารถติดรหัส Brainf * ck เข้าไปได้ถ้าคุณต้องการ สิ่งที่คุณต้องทำคือติดตั้งล่ามสำหรับภาษาที่คุณเลือกในเบราว์เซอร์ที่คุณต้องการใช้
อานนท์

@Anon ขอบคุณน่าสนใจมาก ถ้ามันง่ายขนาดนั้นมันอาจจะถูกทำที่ไหนสักแห่ง ฉันจำได้<script type="vbscript">ครั้งแล้วครั้งเล่า...
Armand

Alison: vbscript คือ IE เท่านั้นและบางคนใช้เมื่อส่วนแบ่งการตลาดของ IE คือ> 90% วันนี้ด้วยส่วนแบ่งตลาดของ IE ประมาณ 50% อาจจะน้อยกว่าในบางส่วนของโลกมันเป็นเรื่องไม่สำคัญ และตราบใดที่ไม่มีเบราว์เซอร์ได้รับส่วนแบ่งการตลาดอีกมากอย่าคาดหวังว่าจะเกิดอะไรขึ้นกับภาษาสคริปต์ฝั่งไคลเอ็นต์ใหม่
281377

@Alison: Internet Explorer ยังคงสนับสนุน VBScript เป็นภาษาสคริปต์ ... ฉันควรจะรู้ว่าเรามีเว็บไซต์อินทราเน็ตที่นี่ที่ใช้ (และด้วยเหตุนี้จำเป็นต้องใช้ Internet Explorer - Urgh!)
คณบดีฮาร์ดิ้ง

2

มันจะเป็นจริงหรือไม่? เลขที่

เป็นไปได้ไหม? ใช่

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


สนใจที่จะอธิบาย?
back2dos

เพิ่มย่อหน้าติดตามผล
Marcie

ฉันแค่เพิ่มว่าเหตุผลเดียวที่ทำให้มันไม่สามารถใช้งานได้จริงคือสถานการณ์ปัจจุบัน ถ้าเรากลับมาที่จุดก่อนที่จะปล่อย Javascript สิ่งต่าง ๆ จะแตกต่างกัน
yakiv


1

คุณสามารถใช้ภาษาเช่น haXe เพื่อเขียนรหัสของคุณในลักษณะที่พิมพ์แบบคงที่และส่งออกเป็น javascript จาวาสคริปต์กำลังทำงานอย่างรวดเร็วมากดังนั้นมันก็เพียงพอแล้วสำหรับภาษาเอาต์พุต พยายามบังคับใช้ภาษาที่พิมพ์แบบคงที่เนื่องจากมาตรฐานเว็บใกล้จะเป็นไปไม่ได้ ความพยายามในการแนะนำการพิมพ์แบบคงที่ลงใน JavaScriptล้มเหลวเนื่องจากเหตุผลในวงกว้างเพื่อหารือ


1

ในทางเทคนิคจะเป็นไปได้ไหม? ถ้าจะนำไปใช้ใน Java ฉันจะพูดว่า "ยากมาก แต่เป็นไปได้" โดยไม่สูญเสียประสิทธิภาพที่สำคัญ

ตอนนี้ฉันกำลังเขียนด้วยลายมือแบบคงที่ DSL ใน Java และวิธีเดียวที่ฉันได้พบเพื่อหลีกเลี่ยงการตรวจสอบประเภทรันไทม์คือการใช้ generics และระงับคำเตือน "ไม่ จำกัด " ... นั่นคือจนกว่าจะถึงเวลาที่จะใช้งาน อาร์เรย์หลายมิติ (ต้องระบุพารามิเตอร์คลาส ณ เวลาคอมไพล์และ จำกัด โดยเนื้อแท้ในขณะที่อาร์เรย์หลายมิติแสดงถึงประเภทจำนวนอนันต์ ... ) ยังคงพยายามหาอันนี้โชคไม่ดี - ฉันแน่ใจว่าฉัน จะพบปัญหาที่คล้ายกันกับคลาสที่ผู้ใช้กำหนด

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

ฉันรู้ว่ามันเป็นคำถามเก่า ๆ แค่คิดว่าประสบการณ์ของฉันอาจมีค่าสำหรับใครบางคน


0

เป็นไปได้ในทางเทคนิคในการเขียนสคริปต์ฝั่งไคลเอ็นต์ในภาษาสคริปต์ใด ๆ ที่ตัวแทนผู้ใช้ (เบราว์เซอร์) สนับสนุน ในทางปฏิบัติภาษาที่รองรับอย่างกว้างขวางเท่านั้นคือ JavaScript / ECMAScript การโน้มน้าวใจผู้ผลิตเบราว์เซอร์ให้ดำเนินการและสนับสนุนภาษาใหม่ในขั้นตอนนี้ไม่น่าจะประสบความสำเร็จ ดังนั้นหากคุณต้องการใช้ภาษาฝั่งไคลเอ็นต์ที่พิมพ์ใหม่แบบคงที่คุณจะต้องแปลภาษาใหม่เป็น JavaScript หรือใช้ล่ามภาษานั้นใน JavaScript

มีหลายโครงการที่ทำอะไรแบบนี้อยู่แล้ว ตัวอย่างเช่นGoogle Web Toolkitดังที่กล่าวไว้ในหนึ่งในคำตอบอื่น ๆ


0

ให้คุณไม่มีความหวังในการรับเบราว์เซอร์ทั้งหมดที่ใช้ในโลกแห่งความจริงเพื่อสนับสนุนภาษาใหม่ ภาษาจะต้องรวบรวมลงใน jscript

เนื่องจากตัวอย่างทั้งหมดของเว็บเป็น jscript ภาษาส่วนใหญ่ควรมีลักษณะเป็น jscript

ฉันคิดว่ามีขอบเขตที่มี“ ชุดย่อย” ของ jscript ที่ตรวจสอบโดยตัวตรวจสอบแบบคงที่ แต่ยังเป็น jscript ที่ถูกต้อง เช่น:

  • ตัวแปรทั้งหมดจะต้องมีความคิดเห็นที่บอกว่ามีประเภทก่อนการใช้งานครั้งแรก
  • การใช้งานตัวแปรทั้งหมดต้องใช้งานได้ตามข้างต้น
  • ฟังก์ชั่น / คลาสอาจไม่สามารถใช้ได้หากยังไม่ได้ประกาศในความคิดเห็น #
  • ความคิดเห็นที่ด้านบนของไฟล์ js ต้องแสดงรายการไฟล์ js อื่น ๆ ทั้งหมดที่ขึ้นอยู่กับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.