Categories PHP-MySQL Vietnamese names

Chuyển file PHP thành file tĩnh HTML để cải thiện tốc độ với câu lệnh fopen và fwirte

Khi chúng ta tạo các ứng dụng PHP động để xử lý thì có một vấn đề là dù mã tốt đi chăng nữa, với số lượng truy cập lớn hoặc máy chủ yếu vì không đủ tiền thuê có khả năng vấn đề hiệu suất, tốc độ sẽ phát sinh. Một trường hợp điển hình nữa đó là ứng dụng PHP có hàm xử lý phức tạp, dẫn đến thời gian xử lý lâu dù chúng ta đã chịu khó đầu tư thêm ít nhiều.

Khi đó giải pháp khác giải quyết tương đối tốt đó là bạn xuất kết quả PHP trả về thành file dạng HTML, tất nhiên cái này sẽ hiệu quả nhất khi chúng ta biết trước được kết quả trả về hay nói cách khác là lường trước được đầu vào cần tính toán, do đó chúng ta sẽ tạo sẵn được kết quả, và chỉ cần chờ người dùng nhập truy vấn phù hợp là chuyển hướng về trang html kết quả đã có sẵn.

Ví dụ, khi tôi tạo ứng dụng gợi ý tên hay cho con bằng PHP, tôi đã lường trước được phần đa các dữ liệu mà người dùng có thể nhập, căn cứ trên danh sách các tên namtên nữ phổ biến, cũng như các họ thường gặp Việt Nam. Do vậy tôi sẽ tạo sẵn được các kết quả phù hợp mà nếu xử lý hoàn toàn bằng PHP e sẽ nặng nề.

Ở cấp độ cao bạn có thể biến một ứng dụng PHP thành một ứng dụng chỉ cần đến các tài nguyên tĩnh như HTML, CSS và JS, nhưng khi đó chúng ta phải cải thiện kỹ năng JS lên rất nhiều để sử dụng các lệnh JS thay cho PHP. Còn nếu chưa đạt đến cấp độ này (tôi cũng đang thế thôi), thì thường chúng ta sẽ vẫn phải sử dụng chút ít PHP cho một số tác vụ.

OK, giờ chúng ta quay ra vấn đề chính. Ví dụ để tạo file HTML có tên freehost-page.html tôi làm như sau:

$myfile = fopen("freehost-page.html", "w") or die("Unable to open file!");
fwrite($myfile, $txt);
fclose($myfile);

Giải thích:

  • fopen dùng để tạo file freehost-page.html nếu file đó chưa tồn tại, nếu tồn tại rồi thì dùng nó để mở file;
  • fwrite dùng để ghi nội dung file, trong đó, $txt là nội dung cần ghi vào file;
  • fclose nghĩa là ghi xong rồi thì đóng file đó lại;

Phần tên file thường sẽ là yếu tố động phụ thuộc vào dữ liệu đầu vào. Còn $txt dĩ nhiên là dạng dữ liệu html, và trong này sẽ là kết quả mà chúng ta cần show ra. Đối với những cái phức tạp, bạn có thể cần tạo một số hàm thay vì tạo nội dung đầy đủ cho nó thông qua các câu lệnh PHP dài dòng, vì có thể sẽ dễ bị lỗi hơn nếu viết một lèo như vậy.

Chú ý là nên để ý các yếu tố động ở phần header khi tạo trang html, ví dụ như tên trang, phần mô tả cho thẻ meta,…Nếu không chú ý đến phần này bạn có thể tạo ra rất nhiều trang có phần mô tả giống hệt nhau, và điều này chắc chắn sẽ ảnh hưởng không tốt đến SEO.

Bạn cũng cần để ý đến cả dấu ” và ‘ nữa. Trong file html nếu đã dùng dấu ” cho các thuộc tính thì giờ bạn cần dùng dấu ‘ trong PHP để chỉ một chuỗi text mà bạn cần nối hoặc ghi vào file.

File HTML được tạo ra sẽ ở cùng cấp với file PHP được dùng để tạo file html đó, do vậy nếu có rất nhiều file html cần tạo, bạn nên tạo một thư mục riêng cho nó thay vì để cùng cấp với index, vì điều đó sẽ làm ứng dụng của bạn trông rất rối, cồng kềnh.


Ưu và nhược điểm của phương pháp tạo file tĩnh

Ưu điểm thấy rõ là tốc độ được cải thiện, vì kết quả được tạo sẵn rồi, hàm PHP động chỉ xử lý truy vấn đầu vào với các tác vụ nhìn chung là đơn giản như (1) tách từ, (2) sửa chính tả cơ bản, (3) chuyển hướng về trang html…

Tuy nhiên cái gì cũng có cái giá của nó, với cách tạo file tĩnh bạn sẽ đối diện với các trở ngại sau:

  • Số lượng các file html tăng lên rất nhanh phụ thuộc vào số lượng truy vấn đầu vào. Ví dụ với trang bầu.com, số lượng đầu vào đệm-tên đã lên đến gần 50 ngàn trang chỉ với 100 đệm – tên phổ biến nhất;
  • Vì số lượng cần tạo trước ở đầu vào tăng nhanh dẫn đến việc tốn thời gian tạo trước file html hơn. Ví dụ, lúc đầu tôi chỉ cần xử lý 15 ngàn đệm-tên và tốn 30 phút để làm điều này, giờ thời lượng tăng lên gấp ba lần để xử lý toàn bộ 50 ngàn đệm – tên. Thời gian cụ thể còn tùy mức độ phức tạp của ứng dụng và độ “khỏe” của máy tính tại nhà. Do vậy để nhanh chóng, bạn cần viết mã đơn giản nhất có thể và có máy tính chất lượng đủ dùng. Với chương trình của mình, với thay đổi nhỏ trong mã về cách lấy dữ liệu, tốc độ đã cải thiện lên cả 10 lần, mà kết quả thì không thay đổi;
  • Tốn dung lượng lưu trữ. Ban đầu tôi chỉ có hơn 150MB dữ liệu, giờ đã gần 500MB. Con số của bạn nó cũng tùy theo lượng dữ liệu liệu, và lượng dữ liệu / file. Con số sẽ tăng theo cấp số nhân tương ứng khi bạn phải xử lý đầu vào nhiều hơn;
  • Thời gian up dữ liệu lên nhiều hơn. Nếu bạn dùng một trong các giải pháp tiết kiệm nhất, đó là up các file html lên CDN như kiểu BunnyCDN thì việc dữ liệu tăng thêm sẽ làm bạn tốn thời gian hơn. Ví dụ tôi cần khoảng 3 tiếng để up toàn bộ 50 ngàn file trên lên CDN thông qua FileZilla. Với trường hợp có điều kiện đầu tư, file html được lưu trên hosting, thì vấn đề này sẽ không nghiêm trọng, vì khi đó thao tác xuất html có thể được thực hiện và lưu ngay trên hosting;
Back to Top