2010-11-18 9 views
9

Vấn đề của tôi là tạo một mảng PHP lồng nhau lớn, phân tích thông tin từ nhiều nguồn bên ngoài.Caching một mảng PHP

Trên lần trả lại đầu tiên, tôi muốn lưu vào bộ nhớ cache dữ liệu này.

Im khá mới để lưu vào bộ nhớ cache vì vậy không thực sự biết những gì tôi nên tìm kiếm, bất kỳ phương pháp tốt hay xấu hoặc thậm chí nếu đây là thực tế phổ biến! Đã googled nhưng không thực sự tìm thấy bất cứ điều gì phong nha cho một noob cache.

Im đã sử dụng thông minh để lưu trữ nội dung trang của tôi (không bao gồm các bit động), thực hiện tinh chỉnh apache, giảm thiểu vv để tăng hiệu suất nhưng tải trang vẫn còn xa. Đôi khi tối đa 8 giây!

Sử dụng PHP5 với Smarty. Sử dụng cURL để phân tích cú pháp XML mà sau đó được lưu trữ trong mảng.

+0

kiểm tra việc thực hiện tải xml sử dụng CURL, luôn kêu gọi các nguồn lực/nội dung gây hiệu suất bên ngoài, không những bản thân PHP – ajreal

+0

Cảm ơn ajreal cho bình luận của bạn. Sau khi đọc nhận xét của bạn, tôi đã tìm kiếm và sẽ xem xét sử dụng php multi_exec để chạy những thứ song song. Đây có phải là cách duy nhất để cải thiện việc phân tích cú pháp GET và POSTS? Bất kỳ mẹo và thủ thuật nào khác để tăng hiệu suất (ngoài việc nhận được một máy chủ mạnh hơn LOL) – fl3x7

Trả lời

15

Bạn có thể thử để cache vào một tệp:

file_put_contents("cache_file", serialize($myArray)); 

Sau đó, để tải bộ nhớ cache:

$myArray = unserialize(file_get_contents("cache_file")); 

Điều này sẽ có tác dụng nếu những điều trong mảng của bạn là serializable: không có kết nối DB hoặc tập tin xử lý, hoặc những thứ như thế. Chuỗi và số chỉ là tốt.

Nếu bạn cần một cái gì đó huyền ảo, bạn có thể sử dụng bộ nhớ cache dựa trên bộ nhớ như memcached.

+0

Cảm ơn rất nhiều! Tùy chọn serialize có vẻ rất hữu ích. Ive đã thử nó và có vẻ như nó hoạt động. Tuy nhiên tôi nhận được cảnh báo: Cảnh báo: unserialize() [function.unserialize]: Nút không còn tồn tại trong C: \ xampp \ htdocs \ foo.php trên dòng 75 Đây có phải là do vấn đề về chuỗi không. Ive kiểm tra tất cả nội dung của tôi trong mảng và đó là tất cả các chuỗi hoặc số nguyên. Kết quả dường như cũng đúng. Bất kỳ trợ giúp nào được đánh giá cao – fl3x7

+0

Không cho phép tôi chỉnh sửa nhận xét của mình ở trên nhưng chỉ muốn nói mặc dù tôi không tìm thấy lỗi để sửa lỗi Tôi nhận được tôi nghĩ rằng nó sẽ làm với điều này: http://stackoverflow.com/questions/119234/ php-unserialize-keep-throwing-same-error-over-100 lần Vẫn tiếp tục cố gắng. nếu ai đó có thể làm sáng tỏ một giải pháp sẽ tuyệt vời. Một lần nữa cảm ơn tất cả vì sự giúp đỡ của bạn :) – fl3x7

+0

Woo. Tôi chỉ rõ ràng cast các biến như chuỗi và ints và làm việc của nó! – fl3x7

0

bạn đã nghĩ đến việc đặt static $ yourData = array(); trong phương pháp của bạn, nơi bạn tải xuống dữ liệu, sau đó kiểm tra xem liệu có bất kỳ dữ liệu nào trong mảng tĩnh này và sử dụng dữ liệu đó hay không, cũng có được dữ liệu không? hy vọng điều này sẽ giúp theo một cách nào đó: D