Helpex - Trao đổi & giúp đỡ Đăng nhập

Nhu cầu về tốc độ trong các ứng dụng web

Nhu cầu về tốc độ trong các ứng dụng web

Nhu cầu về tốc độ trong các ứng dụng webThông thường, các ứng dụng web chậm hơn chúng ta mong muốn. Các công ty như Google và Facebook có các giải pháp nội bộ để tăng tốc ứng dụng của họ. Cần có một công cụ của bên thứ ba mà các nhà phát triển của chúng tôi có thể sử dụng để đạt được điều gì đó tương tự, mà không cần phải dành hàng giờ để tối ưu hóa mã và cơ sở dữ liệu.

Vài tháng gần đây, tôi đã bận rộn đóng góp vào một dự án nhằm tăng tốc thời gian phản hồi và cũng giúp việc phát triển các phần back end của các ứng dụng web trở nên dễ dàng hơn nhiều. Dự án được đặt tên là Ext Speeder và được phát triển cùng với Sencha, công ty đứng sau Ext JS. Nó cho phép các nhà phát triển Ext JS tăng tốc lưới dữ liệu của họ hơn 10 lần.

Kết thúc quay lại được tạo tự động 

Tất cả các nhà phát triển back end đều biết rằng có rất nhiều công việc để kết nối một ứng dụng front end với back end. Một số nhiệm vụ là lập mô hình cơ sở dữ liệu, kết nối an toàn, phân tích cú pháp lệnh HTTP, giải mã hóa tham số, quản lý kết nối cơ sở dữ liệu, chuyển đổi thành SQL, tối ưu hóa truy vấn, phân tích cú pháp cơ sở dữ liệu phản hồi, định dạng thành JSON, viết cấu hình XML, triển khai trong Java EE, và cuối cùng xác minh tất cả các mã. Tùy thuộc vào dự án, quá trình này có thể mất vài ngày hoặc thậm chí vài tuần

Chúng tôi đã tạo một công cụ kết nối với cơ sở dữ liệu hiện có và trích xuất mô hình lược đồ để mã back-end có thể được tạo tự động. Thật vậy, không cần thiết phải viết một dòng mã back-end trong hầu hết các tình huống. Nếu chúng tôi có các yêu cầu đặc biệt (như thêm các mô hình của riêng chúng tôi vào dữ liệu hiện có), thì có thể dễ dàng thêm hoặc sửa đổi mã được tạo bởi công cụ Ext Speeder.

Hãy xem  video dài 1,5 phút này  của một anh chàng đang giữ kỷ lục thế giới hiện tại trong việc phát triển và triển khai ứng dụng Sencha Ext JS bằng công cụ (anh ấy làm điều đó trong vòng chưa đầy 1,5 phút). Nó có thể được thực hiện nhanh hơn không?

Nó nhận được nhanh hơn bao nhiêu?

Khi một ứng dụng Ext Speeder được khởi động, nó có thể lấy dữ liệu mà chúng tôi đã chọn vào kho lưu trữ trong bộ nhớ JVM để dữ liệu có thể được truy cập và xử lý nhanh hơn nhiều. Dữ liệu cũng được tổ chức theo hướng cột. Nhờ đó, việc sắp xếp và lọc trên một cột có thể được thực hiện trong nano giây chứ không phải trong vài giây. Vì Ext Speeder có thể sử dụng công cụ lưu trữ off-heap nên chúng tôi có thể lấy một lượng dữ liệu gần như không giới hạn. Một ứng dụng Ext Speeder có thể dễ dàng xử lý một trăm triệu phần tử. Ext Speeder cũng có thể làm mới dữ liệu trong bộ nhớ định kỳ ở chế độ nền, do đó chúng tôi sẽ thấy dữ liệu mới nhất trong cơ sở dữ liệu.

Đưa ra các số liệu chuẩn công bằng luôn khó. Để cung cấp cho bạn một ý tưởng, chúng tôi đã lấy một cơ sở dữ liệu công cộng hiện có chứa một số lượng lớn các bác sĩ y tế ở Hoa Kỳ với hơn 40 triệu phần tử và lưu trữ chúng trong một máy chủ MySQL tiêu chuẩn (phiên bản 5.6.29) với các chỉ mục được thêm vào các cột liên quan. Sau đó, chúng tôi so sánh các mẫu truy cập web điển hình có chứa sắp xếp, lọc và phân trang bằng Ext Speeder so với sử dụng cơ sở dữ liệu MySQL trực tiếp. Trung bình, Ext Speeder nhanh hơn 100 lần.

Nhu cầu về tốc độ trong các ứng dụng web

Hình 1, Độ trễ, Ext Speeder so với tiêu chuẩn MySQL (càng ít càng tốt) cho một trong các bài kiểm tra phụ

Chúng tôi đã sử dụng thiết lập sau cho các thử nghiệm:

PropertyValue Máy tính Lenovo CPU Intel i7-4720HQ CPU @ 2.60GHz RAM 16 GB Hệ điều hành Windows 10 Cơ sở dữ liệu MySQL Phiên bản 5.6.29 std. cài đặt Công cụ kiểm tra Apache JMeter

Trong thực tế, lợi ích trong cuộc sống thực với những cải tiến tốc độ như vậy là gì? Hãy tưởng tượng một người dùng web đã quen với việc chờ đợi một vài giây giữa mỗi lần tương tác. Giờ đây, người đó đột nhiên có thể nhận được phản hồi ngay lập tức và trang web sẽ phản hồi nhanh hơn nhiều. Hãy xem video dài 1 phút này để thấy sự khác biệt.

API REST

Yêu cầu

Công cụ đang sử dụng API REST tiêu chuẩn để truy vấn. Nếu chúng ta có một bảng cơ sở dữ liệu có tên là 'bác sĩ', thì chúng ta có thể truy vấn nó như sau:

http://localhost:4567/MyProject/doctor?
    callback=cb&
    start=10&
    limit=100&
    sort=[{"property":"last_name","direction":"ASC"}]&
    filter=[{"property":"graduation_year","operator":"lt","value":"1970"}]


Điều này sẽ truy xuất các bác sĩ tốt nghiệp trước năm 1970 được sắp xếp theo họ bắt đầu từ bác sĩ thứ 10: như vậy và giới hạn kết quả cho tối đa 100 bác sĩ. Trên máy tính xách tay của tôi, cuộc gọi REST khứ hồi đã hoàn thành trong vòng chưa đầy 0,04 giây (Con người sẽ không nhận thấy sự chậm trễ đó).

Thuộc tính "sort" có thể chứa một số cột để việc sắp xếp có thể được thực hiện ở nhiều cấp độ.

Thuộc tính "bộ lọc" có thể bao gồm một số bộ lọc để có thể áp dụng một số điều kiện. Chúng ta có thể sử dụng các toán tử Bằng ("eq"), Không bằng ("ne"), Nhỏ hơn ("lt"), Nhỏ hơn hoặc Bằng ("le"), Lớn hơn ("gt"), Lớn hơn hoặc Bằng (" ge ") và Chứa (" như ").

Phản ứng

Phản hồi cho yêu cầu ở trên là một chuỗi JSON chứa tất cả các bác sĩ phù hợp theo thứ tự nhất định. Điều này cũng giúp bạn dễ dàng giao tiếp với các ngôn ngữ khác như JavaScript, PHP hoặc C #. Đây là một ví dụ về cách một phản hồi có thể trông như thế nào (với giới hạn = 2 để giảm kích thước):

cb({
  "total": 50457,
  "data": [
    {
      "id": 1687657,
      "last_name": "AARON",
      "first_name": "JOHN",
      "suffix": "",
      "gender": "M",
      "credential": "",
      "medical_school_name": "OTHER",
      "graduation_year": 1966,
      "primary_speciality": "GASTROENTEROLOGY",
      "second_speciality": "",
      "organization": "ATLANTIC COAST GASTROENTEROLOGY ASSOCIATES",
      "organization_dba_name": "",
      "street_address_1": "1944 STATE ROUTE 33",
      "street_address_2": "",
      "supress_street_address_2": "Y",
      "city": "NEPTUNE",
      "state": "NJ",
      "zip_code": "077534863",
      "real_zips_ext_id": "RZ-US-07753",
      "claims_based_aff_CCN_1": "310038",
      "claims_based_aff_LBN_1": "ROBERT WOOD JOHNSON UNIVERSITY HOSPITAL, INC"
    },
    {
      "id": 258680,
         "last_name": "ABADEE",
         "first_name": "RASHEED",
         "suffix": "",
         "gender": "F",
         "credential": "MD",
         "medical_school_name": "OTHER",
         "graduation_year": 1968,
         "primary_speciality": "PHYSICAL MEDICINE AND REHABILITATION",
         "second_speciality": "",
         "organization": "",
         "organization_dba_name": "",
         "street_address_1": "1300 W 7TH ST",
         "street_address_2": "SAN PEDRO HOSP",
         "supress_street_address_2": "N",
         "city": "SAN PEDRO",
         "state": "CA",
         "zip_code": "90732",
         "real_zips_ext_id": "RZ-US-90732",
         "claims_based_aff_CCN_1": "050078",
         "claims_based_aff_LBN_1": "PROVIDENCE HEALTH SYSTEM - SOUTHERN CALIFORINA"
    }
  ]
});


Thuộc tính 'total' trong phản hồi cho biết có bao nhiêu hàng thực sự khớp với bộ lọc (tổng cộng) để lưới dữ liệu có thể đặt vị trí và kích thước thanh cuộn thích hợp.

Trông nó như thế nào?

Đây là cách một ứng dụng lưới dữ liệu Ext JS có thể trông như thế nào với một mặt sau của Ext Speeder:

Nhu cầu về tốc độ trong các ứng dụng web

Triển khai

Triển khai dễ dàng. Triển khai ứng dụng Ext Speeder dưới dạng ứng dụng độc lập (chỉ chạy phương thức Java chính của nó) hoặc triển khai nó dưới dạng ứng dụng Java EE (tải tệp WAR độc lập lên máy chủ). Bất kỳ máy chủ Java EE nào cũng vậy. Ví dụ: Tomcat, Glassfish hoặc Oracle WebLogic. Bằng cách này, ứng dụng có thể tự động hưởng lợi từ các tính năng như chính sách bảo mật của công ty, xác thực, mã hóa, cân bằng tải, v.v.

Dùng thử miễn phí!

Truy cập http://www.extspeeder.com/  để yêu cầu dùng thử miễn phí. Hướng dẫn sử dụng có thể được tìm thấy trên cùng một trang web. Tôi rất vui khi nhận được phản hồi về trải nghiệm hoặc đề xuất để cải thiện, vì vậy hãy chia sẻ suy nghĩ của bạn trong phần nhận xét.

9 hữu ích 0 bình luận 3.6k xem chia sẻ

Có thể bạn quan tâm

loading