2013-02-14 47 views
6

Có nén Javascript và thư viện giải nén PHP/Ruby cho chuỗi không? Tôi cần nó vì tôi cần gửi một chuỗi văn bản rất dài bằng cách sử dụng Ajax trên một liên kết tải lên chậm đến một máy chủ web sử dụng PHP/Ruby làm ngôn ngữ phía máy chủ.Nén chuỗi Javascript và giải nén PHP/Ruby

var x = $('#sources').html(); 
// a very-very long text 
var xo = x, o = {}; 
if(x.length>512*1024) { 
    x = compress(x); 
    o.c = 1; 
} 
o.x = x; 
$.post('target.php',o,function(res){alert(res==xo)}); 

Về phía máy chủ (ví dụ, PHP):

<?php 
    if(isset($_POST['c']) && $_POST['c']=='1') { 
    $x = decompress($_POST['x']); 
    } else { 
    $x = $_POST['x']; 
    } 
    echo $x; 

Trả lời

4

Có rất nhiều JS triển khai các thuật toán nén phổ biến nhất, Zip.

Ví dụ zip.js

Zip là tất nhiên cũng supported in PHP.

+0

ah, vì vậy tôi phải ghi nó vào một tệp trước, sau đó giải nén nó? – Kokizzu

0

Giả sử bạn gửi các tập tin của bạn trên http, tôi sẽ đề nghị bạn nên để cho máy chủ web của bạn xử lý việc này bằng cách gửi tệp có mã hóa nội dung gzip.

Nếu ví dụ bạn sử dụng Apache, bạn có thể bật mod_deflate

Nếu vì một số lý do bạn không thể thay đổi cấu hình máy chủ web của bạn, php cũng có một built-in xử lý gzip bạn có thể sử dụng để thay thế. Xem: ob_gzhandler

Edit:

Đối với khách hàng đến máy chủ, nó không giống như thế này được hỗ trợ trực tiếp bởi bất kỳ triển khai XMLHttpRequest. Bạn có lẽ có thể tìm thấy một thuật toán nén gzip tùy chỉnh cho Javascript và sau đó đặt tiêu đề yêu cầu để cho biết rằng nó được nén. Do đó, nó sẽ trở thành giải mã một cách minh bạch bởi máy chủ web và bạn không phải làm bất cứ điều gì đặc biệt trong php.

Xem trang này: JavaScript implementation of Gzip.

+1

Bạn có thể nén câu trả lời từ máy chủ cho máy khách nhưng bạn có thể nén yêu cầu không? –

+0

Điểm tốt .. Không giống như bất kỳ triển khai XmlHttpRequest nào hỗ trợ điều này. – troelskn

+0

Tôi nghĩ rằng một vấn đề là khách hàng không biết những gì chương trình nén được xử lý bởi máy chủ. Điều này có thể cần một yêu cầu đầu tiên chỉ để yêu cầu điều này và do đó có thể được đau đớn để xử lý trong javascript. –