กระบวนการบีบอัดของ JSA แบ่งออกเป็นสองขั้นตอน
ขั้นตอนแรกคือการบีบอัดไวยากรณ์คล้ายกับ Dojo ShrinkSafe แต่ปลอดภัยกว่าและมีประสิทธิภาพมากขึ้น
ขั้นตอนที่สองคือการบีบอัดข้อความปัจจุบัน
อัลกอริทึมการบีบอัดคอมเพรสเซอร์ JavaScript
(http://dean.edwards.name/packer/)
สิ่งเหล่านี้สามารถตั้งค่าในหน้าต่างการตั้งค่า
โดยค่าเริ่มต้นการบีบอัดไวยากรณ์จะถูกใช้ครั้งแรก การบีบอัดข้อความถูกนำมาใช้บนพื้นฐานดั้งเดิมเมื่อไฟล์มีขนาดใหญ่กว่า 1,000byte และการบีบอัดข้อความยังสามารถบีบอัดได้ถึง 90% ของขนาดดั้งเดิม
นี่คือตัวอย่างการบีบอัดสคริปต์เพื่อแสดงการบีบอัดไวยากรณ์ JSA และฟังก์ชั่นการเพิ่มประสิทธิภาพ
การคัดลอกรหัสมีดังนี้:
พยายาม {
// xxxx ();
-
จับ (e) {
yyyy ();
ฟังก์ชั่น f1 () {
-
-
ในที่สุด {
zzzz ();
-
ฟังก์ชั่น f2 (var1) {
var var2 = 2;
var var3 = 3;
var withObject = {var2: -2}
ด้วย (withObject) {
การแจ้งเตือน (var2);
-
-
ผลลัพธ์บีบอัด (จัดรูปแบบเพื่อการเข้าถึงง่าย):
การคัดลอกรหัสมีดังนี้:
zzzz ();
ฟังก์ชั่น f2 (a) {
var var2 = 2;
var b = 3;
var c = {var2: -2};
ด้วย (c) {
การแจ้งเตือน (var2);
-
-
เปรียบเทียบกับเครื่องมือบีบอัดอื่น ๆ สำหรับอัตราส่วนการบีบอัด:
1. คอมเพรสเซอร์ JavaScript (http://dean.edwards.name/packer/)
ด้วยรหัสเครื่องมือการบีบอัดของเขาเองเป็นตัวอย่าง (v2.02) บรรจุภัณฑ์ที่บีบอัดด้วยขนาด 7,428 ไบต์ (ลบความคิดเห็น)
และเครื่องมือการบีบอัดของเราสามารถบีบอัดได้ถึง 7,256 ไบต์
7256 /7428 = 0.9768443726440496
2.Dojo shrinksafe (สิ่งที่หยาบทั้งไม่มีประสิทธิภาพและอันตรายขอแนะนำให้ผู้ใช้ดั้งเดิมเปลี่ยนโดยเร็วที่สุด)
ด้วยซอร์สโค้ดเฟรมเวิร์กของเขาเองเป็นตัวอย่าง (v0.4.1):
มันบีบอัดขนาดเป็น 149,518 ไบต์ด้วยตัวเองและเราสามารถลดขนาดลงเป็น 81,261 ไบต์หลังจากการบีบอัด
81261 /149518 = 0.5434864029748927
คำแนะนำด้านความปลอดภัย:
1. Javascript Compressor
จากการบีบอัดข้อความฉันไม่ได้ดูตรรกะในนั้นอย่างระมัดระวัง แต่ความเป็นไปได้ของปัญหาการบีบอัดนี้ต่ำมาก เครื่องมือการบีบอัดของเรายังใช้อัลกอริทึมการบีบอัดใน JSI 1.1 A8 และ
ไม่พบข้อยกเว้นในการทดสอบของห้องสมุดบุคคลที่สามแบบรวม และยังมีกรอบการทำงานที่รู้จักกันดีดังนั้นฉันเชื่อว่าจะไม่มีปัญหา
ภาคผนวก (2007-03-12): วันนี้ฉันพบว่าสิ่งนี้มีข้อบกพร่องเมื่อวิเคราะห์ไวยากรณ์สตริงหลายสาย JavaScript อย่างไรก็ตามปัญหานี้จะไม่มีอยู่อีกต่อไปหลังจากถูกบีบอัดโดยไวยากรณ์ JSA
2. โดโจหดตัวเป็นอันตราย! - - - -
แทนที่ชื่อตัวแปรท้องถิ่นยาวด้วยชื่อที่สั้นกว่าซึ่งเป็นเครื่องมือการบีบอัดที่ไม่ปลอดภัยอย่างมากเช่น:
การคัดลอกรหัสมีดังนี้:
การทำงาน(){
var withObject = {variable1: 1}
var variable 1 = 2;
ด้วย (withObject) {
การแจ้งเตือน (ตัวแปร 1);
-
-
บีบอัดถึง:
การคัดลอกรหัสมีดังนี้:
การทำงาน(){
var _1 = {variable1: 1};
var _2 = 2;
ด้วย (_1) {
การแจ้งเตือน (_2);
-
-
เห็นได้ชัดว่าสิ่งนี้ผิดขยะนี้ไม่ได้ให้ความสนใจกับไวยากรณ์พิเศษและพลวัตของ JavaScript
ไม่มีการประมวลผลสำหรับฟังก์ชั่นการประเมินการดำเนินการจับและด้วยข้อความ
ในทางตรงกันข้าม JSA เป็นเครื่องมือการบีบอัดที่ปลอดภัยและมีประสิทธิภาพมากที่สุดที่ฉันรู้จักในปัจจุบัน
JSA ไม่เพียง แต่ให้ฟังก์ชั่นการบีบอัดโค้ด แต่ยังสามารถใช้สำหรับการจัดรูปแบบและการวิเคราะห์สคริปต์
การวิเคราะห์สคริปต์สามารถใช้เพื่อดูข้อมูลสคริปต์และค้นหาปัญหาที่อาจเกิดขึ้นในสคริปต์
ตัวอย่างเช่นตรวจสอบฟังก์ชั่นและตัวแปรที่ประกาศในสคริปต์
ตัวแปรภายนอกเหล่านั้นถูกนำมาใช้ ฯลฯ . -