Chủ Nhật, 28 tháng 2, 2016

Tối ưu tốc độ website, bài toán không hề đơn giản !


Website_Speed
Một website tốt đối với người dùng đòi hỏi phải đáp ứng được các tiêu chí nội dung tốt, giao diện thân thiện, dễ dùng và đặt biệt tốc độ phải nhanh. Nhưng bài toán về performance, tối ưu tốc độ website là một bài toán không hề đơn giản.
Khi website của bạn dữ liệu không nhiều thì bạn có thể không hình dung được vấn đề performance này, nhưng hãy thử tưởng tượng đối với một website TMDD chứa hàng triệu sản phẩm trong CSDL thì lúc đó lại là chuyện khác .Hay đơn giản hơn, đối với các website nhỏ nhưng code không đúng chuẩn, sử dụng tài nguyên không hợp lý cũng có thể dẫn đến website ì ạch và nảy sinh vấn đề performance.
Để giải quyết vấn đề này, chúng ta có nhiều cách và mình nên áp dùng tất cả các cách để tối ưu hơn nếu có thể.  Ví dụ trên các nền tảng mình sẽ giới thiệu cho các bạn các cách mà mình biết.

Tối ưu tốc độ website WordPress

Đối với WordPress, CSDL sẽ ngày càng phình to ra và các website dễ bị dính vấn đề performance. Nhưng bên cạnh đó cũng có các cách để giải quyết vấn đề này.
Tối ưu tốc độ website wordpress
Tối ưu tốc độ website wordpress

1. Giải quyết vấn đề về code

Code tối ưu
– Hạn chế sử dụng query trên trang web nếu cảm thấy không cần thiết. Nên code và sử dụng tài nguyên sao cho ít vài connect tới CSDL nhất có thể. Tối ưu các thành phần trang web như CSS, Javascript, hình ảnh…
– Đối với CSS, Javascript thì nên nén và minified lại, các file CSS nên chèn vào thẻ của trang và hạn chế import css từ bên ngoài vào. Các file Javascript nên áp dũng kỹ thuật asyn load bất đồng bộ và nền đặt trước thẻ đóng của thẻ
. – Hình ảnh nên xử lý, nén hình để giảm dung lượng trước khi upload lên website. Có thể sử dụng các kỹ thuật lazy loading hình ảnh để giảm việc tải hình ảnh khi tải trang.
– Không nên đem quá nhiều hình ảnh vào thiết kế giao diện, thay vì sử dụng ảnh để đặt nên cho các phần tử HTML trong CSS thì hãy sử dụng mã màu. Thay vì sử dụng các hình ảnh để tạo bóng đổ, bo cạnh thì hãy sử dụng các thuộc tính CSS3 đã có sẵn. Việc đó sẽ giúp trang web của bạn nhẹ đi hơn rất nhiều.

Sử dụng cache để tối ưu tốc độ website nếu có thể.

Các kỹ thuật cache sẽ giúp website của chúng ta không phải load lại dữ liệu mỗi khi có request từ người dùng. Điều đó giúp giảm đáng kể thời gian phản hồi của website. Cache có nhiều kỹ thuật khác nhau. Trên WordPress chúng ta có database cache, object cache, page cache và các loại cache khác mà PHP hỗ trợ. Và thật dễ dàng để áp dụng cho website của bạn bằng các plugin sẵn có và cực kỳ hiệu quả như WP Super Cache, W3 Total Cache.

Sử dụng CDN (Content Delivery Network)

Nếu dữ liệu tĩnh trên website của bạn nhiều như hình ảnh, videos, các file js, css … thì bạn nên sử dụng CDN để tăng tốc độ truy cập đến các file tĩnh đó nhằm giảm thời gian tải trang. Các bạn có thể Google CDN là gì để hiểu rõ hơn về cách hoạt động. Mình sẽ có bài viết riêng về chủ đề này cho các bạn.

Nâng cấp server

Nếu đã áp dụng các cách trên mà không tối ưu tốc độ website, bạn hãy nâng cấp server để tăng hiệu suất xử lý cho website site giảm thời gian truy cập. Nếu như bạn đang sử dụng hosting, sau một thời gian lượt truy cập tăng lên, cấu hình host không thể đảm bảo xử lý các request từ người dùng. Lúc đó hãy thử nâng cấp lên VPS bạn sẽ thấy khác và có thể xử lý được vấn đề của mình.
Tùy vào nhu cầu và tình hình thực tế của website mà chọn cách thức phù hợp. Nếu như website có lưu lượng truy cập lớn có thể bạn sẽ phải nâng cấp tài nguyên như RAM, CPU, HDD…hoặc nâng cấp lên VPS, Server mới có thể giải quyết được bài toán performance này.
Mình đã từng gặp vấn đề này trên WordPress phải đi từ Host->VPS->Server để có thể handle được lượng truy cập gần 1000 visit cùng lúc.

Tối ưu tốc độ website trên ASP.NET

Trên asp.net thì mỗi lập trình viên phải làm chủ được vấn đề khi xử lý để tránh xảy ra vấn đề Performence. Phải tối ưu code và DB, chỉ dùng và select những gì cần thiết. Cũng như mọi website khác, trên ASP.NET cũng phải tối ưu tất cả tài nguyên website như Code, CSS, JS, hình ảnh, cache.

Tối ưu website sử dụng Cache trên ASP.NET

Trên ASP.NET có thể sử dụng Database Caching, Memory Caching, Object Caching, Output Caching để giảm tải cho trang web. Đối với các kỹ thuật cache này đòi hỏi lập trình viên phải xử lý và handle các logic một cách tốt nhất để phát huy sức mạnh của cache mà không gây lỗi chương trình do cache gây ra.
Đối với các nhân mình đã từng trải qua các project asp.net thì mình luôn áp dụng kỹ thuật cache 2 lớp cho website. Đó là Database caching và output caching.
Dưới đây là lớp cache layer mình hay sử dụng để áp dụng cho Database cache và Object cache
        /// Type of cached item
        /// Name of cached item
        /// Cached item as type
        public static T Get<T>(string key) where T : class
        {
            
            try
            {
                return (T)WebCache.Get(key);
            }
            catch
            {
                return null;
            }
        }
 
        ///
        /// Insert value into the cache using
        /// appropriate name/value pairs
        ///
        /// Type of cached item
        /// Item to be cached
        /// Name of item
        public static void Add<T>(T objectToCache, string key) where T : class
        {
            WebCache.Set(key, objectToCache, 30, false);
        }
        public static void Add<T>(T objectToCache, string key, int minute) where T : class
        {
            WebCache.Set(key, objectToCache, minute, false);
        }
        ///
        /// Insert value into the cache using
        /// appropriate name/value pairs
        ///
        /// Item to be cached
        /// Name of item
        public static void Add(object objectToCache, string key)
        {
            WebCache.Set(key, objectToCache, 30, false);
        }
        public static void Add(object objectToCache, string key, int minute)
        {
            WebCache.Set(key, objectToCache, minute, false);
        }
 
        ///
        /// Remove item from cache
        ///
        /// Name of cached item
        public static void Clear(string key)
        {
            WebCache.Remove(key);
        }
 
        ///
        /// Check for item in cache
        ///
        /// Name of cached item
        ///
        public static bool Exists(string key)
        {
            return WebCache.Get(key) != null;
        }
 
        
    }
}
Sử dụng cache trên cực kỳ đơn giản.

Tối ưu các câu lệnh query

Tối ưu các câu lệnh query để tăng tốc độ thực thi, hạn chế các cú pháp JOIN , GROUP BY không cần thiết. Nên select những Field cần dùng, hạn chế sử dụng SELECT * FROM (Có thể hơi mất công một tí lúc code nhưng sẽ giải quyết được các vấn đề performance về sau.)
Nén và repair database định kỳ. Sau một thời gian thì CSDL chúng ta cũng bị phân mảnh nên định kỳ repair và nén dữ liệu để fixed và tối ưu lại DB.

Áp dụng các kỹ thuật xử lý bất đồng bộ, thread

Xử lý bất động bộ, dùng thread… sẽ giúp ứng dụng web của chúng ta giảm công việc xử lý nhiều request đồng thời cùng một giúp tăng tốc độ website.

Tổng kết

Để tối ưu tốc độ website sử dụng bất cứ nền tảng nào cũng không phải đơn giản. Vì một khi website đã gặp vấn đề về performance thì việc xử lý sẽ rất khó khăn, vậy nên chúng ta nên tối ưu tất cả các công đoạn dù là nhỏ nhất có thể từ việc viết code simple & clean, tránh code dư thừa đến việc sử dụng tài nguyên hợp lý, tối ưu các thư viện chèn vào website, hay tối ưu việc tương tác với database. Tất cả các việc đó đều quan trọng để có một website tối ưu được tốc độ, performance.
Trên đây là những gì mình biết để có thể tối ưu tốc độ website cho chính bản thân mình. Còn về phần bạn, bạn có những phương pháp, kỹ thuật tối ưu nào hay thì hãy cùng chia sẻ để tích lũy thêm kiến thức.

0 nhận xét: