Chủ Nhật, 23 tháng 11, 2014

Thủ thuật tăng tốc, cải thiện và tối ưu hóa code PHP

Thủ thuật tăng tốc, cải thiện và tối ưu hóa code PHP

Vấn đề website hiện nay là lượng người truy cập vào trang web, một người thiết kế web,phải tối ưu nhất trang web mà họ đã và đang làm, phải làm sao để trang web có tốc độ truy cập nhanh, trang web không quá nặng,v.v..... Vì vậy, bài viết này sẽ giúp các bạn tăng tốc, cải thiện và tối ưu hóa code PHP.

Với những website vừa và nhỏ thì việc cải thiện này không đáng kể lắm. Tuy nhiên, với những website lớn và có lượng truy cập nhiều thì nó sẽ cải thiện rất nhiều hiệu năng của ứng dụng. Bên cạnh đó bạn còn cải thiện được kỹ năng lập trình của chính mình
Nếu một phương pháp có thể được khai báo static thay vì protected hoặc private chúng ta tùy theo yêu cầu nhưng nên để static để cải thiện tốc độ truy xuất đến hàm. Trường hợp hàm đó bạn cấm truy xuất từ bên ngoài thì bắt buộc phải để private.

Dùng echo nhiều lần sẽ nhanh hơn nối chuỗi, vì trong thuật toán nối chuỗi sẽ mất thời gian xử lý của hệ thống, vì trong nối chuỗi có xử lý thêm các biến trong chuỗi, các ký tự đặc biệt...
Đặt maxvalue cho cho các vòng lặp không xác định để tránh trường hợp lặp vô hạn.
Nên hủy các biến sau khi sử dụng.
Tránh sử dụng nhiều các phương thức __get, __set, __autoload
require_once () là tốn kém hơn require , include_once cũng tốn kém hơn include
Sử dụng đường dẫn đầy đủ trong đường dẫn đến file yêu cầu sẽ tốn ít thời gian gian xử lý của hệ thống để tìm đúng đường dẫn yêu cầu.
Nếu bạn cần phải tìm ra thời gian khi các script bắt đầu thực hiện, $ _SERVER ['REQUEST_TIME'] được ưa thích để sử dụng.
Xem nếu bạn có thể sử dụng strncasecmp, strpbrk và stripos thay vì regex thì đó là 1 điều tốt, str_replace nhanh hơn preg_replace, nhưng strtr nhanh hơn str_replace . Nếu chức năng, chẳng hạn như chức năng thay thế chuỗi, chấp nhận cả hai mảng và các nhân vật duy nhất như các đối số, và nếu danh sách đối số của bạn không phải là quá dài, xem xét việc viết một báo cáo thay thế dự phòng, đi qua một trong những nhân vật tại một thời điểm, thay vì một dòng mã chấp nhận mảng là đối số tìm kiếm và thay thế.
Nó tốt hơn để sử dụng báo cáo chuyển đổi hơn nhiều nếu, nếu người nào khác, báo cáo.
Lỗi ức chế với @ là rất chậm. Không nên dấu lỗi bằng cách để @ như vậy.
Bật mod_deflate apache
Đóng kết nối cơ sở dữ liệu của bạn khi bạn đang không thực hiện xử lý.
$ Row ['id'] là 7 lần nhanh hơn $ row [id]
Sử dụng try catch để bắt lỗi và thông báo lỗi là tốt hơn để hệ thống báo lỗi.
Không sử dụng các chức năng bên trong vòng lặp, chẳng hạn như cho ($ x = 0; $ x <count ($ mảng); $ x), bởi vì các phép tính trong vòng lặp sẽ được lặp lại mỗi lần chạy.
Sử dụng biến cục bộ trong 1 phương thức lớp sẽ nhanh hơn. Gần giống như gọi một biến địa phương trong một hàm.
Sử dụng một biến toàn cầu(global) là 2 lần chậm hơn so với một var địa phương.
Tăng một tài sản đối tượng (ví dụ: $ this-> prop + +) là 3 lần chậm hơn so với một biến địa phương.
Tăng một biến địa phương không xác định là 9-10 lần chậm hơn so với trước khi khởi tạo.
Chỉ cần khai báo một biến toàn cầu mà không sử dụng nó trong một hàm cũng chậm việc xử lý (bằng chi phí tương tự như khai báo sử dụng một biến var địa phương). PHP có thể sẽ kiểm tra để xem liệu toàn cầu tồn tại.
Phương pháp gọi xuất hiện để được độc lập với số lượng các phương pháp được định nghĩa trong lớp vì tôi bổ sung thêm 10 phương pháp thử nghiệm lớp học (trước và sau khi các phương pháp thử nghiệm) không có thay đổi trong hoạt động.
Phương pháp trong các lớp học có nguồn gốc chạy nhanh hơn so với những người được định nghĩa trong lớp cơ sở.
Một cuộc gọi chức năng với một tham số và chức năng một cơ thể trống rỗng mất khoảng thời như làm 7-8 $ localvar + + hoạt động. Một cuộc gọi phương pháp tương tự của khóa học khoảng 15 $ localvar + + hoạt động.
Xung quanh chuỗi của bạn bằng cách thay vì "sẽ làm cho mọi việc giải thích một chút nhanh hơn vì php trông cho biến bên trong "..." nhưng không phải bên trong '...'. Tất nhiên bạn chỉ có thể làm điều này khi bạn không cần phải có biến trong chuỗi.
Khi lặp lại chuỗi nó nhanh hơn để tách chúng bằng dấu phẩy thay vì các dấu chấm. Lưu ý: Điều này chỉ làm việc với echo, mà là một chức năng có thể mất một số dây như các đối số.
Một kịch bản PHP sẽ được phục vụ ít nhất 2-10 lần chậm hơn so với một trang HTML tĩnh bởi Apache. Hãy thử sử dụng các trang HTML tĩnh hơn và các kịch bản ít hơn.
PHP kịch bản được biên dịch lại mỗi lần trừ khi kịch bản được lưu trữ. Cài đặt một sản phẩm bộ nhớ đệm PHP thường gia tăng hiệu suất 25-100% bằng cách loại bỏ thời gian biên dịch.
Bộ nhớ cache như nhiều càng tốt. Sử dụng memcached - memcached là một bộ nhớ hệ thống hiệu năng cao đối tượng bộ nhớ đệm nhằm mục đích để tăng tốc độ ứng dụng web động bằng cách giảm tải cơ sở dữ liệu. OP cache mã là hữu ích để kịch bản của bạn không có được biên soạn trên mọi yêu cầu
Khi làm việc với chuỗi và bạn cần phải kiểm tra xem chuỗi, hoặc là của một độ dài nhất định bạn sẽ dễ hiểu sẽ muốn sử dụng strlen () chức năng. Chức năng này là khá nhanh chóng kể từ khi hoạt động của nó không thực hiện bất kỳ tính toán nhưng chỉ trả lại chiều dài đã được biết đến của một chuỗi có sẵn trong cơ cấu zval (nội C struct được sử dụng để lưu trữ các biến trong PHP). Tuy nhiên vì strlen () là một chức năng nó vẫn còn hơi chậm vì các cuộc gọi chức năng yêu cầu các hoạt động như chữ thường & hashtable tra cứu tiếp theo là thực hiện chức năng nói. Trong một số trường hợp, bạn có thể cải thiện tốc độ của mã của bạn bằng cách sử dụng một thủ thuật isset ().

Ex.

PHP Code:
if (strlen ($ foo) <5) {echo "Foo là quá ngắn";}
vs.

PHP Code:
if (isset ($ foo {5})) {echo "Foo là quá ngắn";}
Gọi isset () sẽ xảy ra là nhanh hơn sau đó strlen () bởi vì không giống như strlen (), isset () là một ngôn ngữ xây dựng và không phải là một ý nghĩa chức năng mà nó thực hiện không không yêu cầu tra cứu chức năng và chữ thường. Điều này có nghĩa là bạn hầu như không có chi phí trên đầu trang của mã thực tế để xác định chiều dài của chuỗi.

Khi incrementing hoặc decrementing giá trị của biến $ i + + sẽ xảy ra là một chút chậm hơn sau đó + + $ i. Đây là cái gì PHP cụ thể và không áp dụng các ngôn ngữ khác, do đó, không đi sửa đổi C của bạn hoặc mã Java suy nghĩ nó đột nhiên sẽ trở nên nhanh hơn, nó sẽ không. + + $ I sẽ xảy ra nhanh hơn trong PHP bởi vì thay vì 4 opcodes sử dụng với $ i + + bạn chỉ cần 3. Bài viết incrementation thực sự gây ra trong việc tạo ra các một var tạm thời sau đó được tăng lên. Trong khi trước incrementation làm tăng giá trị ban đầu trực tiếp. Đây là một trong những tối ưu hóa mà opcode tối ưu hóa như tối ưu hóa PHP của Zend. Nó là một vẫn là một ý tưởng tốt để giữ trong tâm trí vì không phải tất cả các tối ưu hóa opcode thực hiện tối ưu hóa này và có rất nhiều các nhà cung cấp dịch vụ Internet và máy chủ đang chạy mà không có một ưu hoa opcode.
Không phải tất cả mọi thứ đã được OOP, thường nó là quá nhiều chi phí, mỗi phương pháp và kêu gọi đối tượng tiêu thụ rất nhiều bộ nhớ.
Không thực hiện tất cả các cấu trúc dữ liệu như một lớp học, mảng là hữu ích, quá
Không phân chia các phương pháp quá nhiều, tôi nghĩ, mà code bạn sẽ thực sự tái sử dụng
Bạn luôn luôn có thể chia nhỏ mã của một phương pháp sau này, khi cần thiết hãy sử dụng các chức năng được xác định trước vô số
Nếu bạn có chức năng tiêu tốn rất nhiều thời gian trong mã của bạn, hãy xem xét viết chúng như phần mở rộng C
Tả sơ lược mã của bạn. Profiler cho bạn thấy, các phần của mã của bạn tiêu thụ bao nhiêu lần. Trình gỡ lỗi Xdebug đã có chứa một hồ sơ. Hồ sơ cho thấy bạn tắc nghẽn trong tổng quan

mod_gzip có sẵn như là một module Apache nén dữ liệu của bạn trên bay và có thể làm giảm dữ liệu truyền lên đến 80%

Tin khác:

0 nhận xét:

Đăng nhận xét