Khách hàng có thể xem mã javascript không?

Một nhiệm vụ rất phổ biến khác trong các trang web và ứng dụng hiện đại là truy xuất các mục dữ liệu riêng lẻ từ máy chủ để cập nhật các phần của trang web mà không phải tải toàn bộ trang mới. Chi tiết có vẻ nhỏ này lại có tác động rất lớn đến hiệu suất và hành vi của các trang web, vì vậy, trong bài viết này, chúng tôi sẽ giải thích khái niệm này và xem xét các công nghệ giúp điều đó trở nên khả thi. cụ thể là API tìm nạp

điều kiện tiên quyết. Kiến thức cơ bản về JavaScript (xem các bước đầu tiên, khối xây dựng, đối tượng JavaScript), kiến ​​thức cơ bản về Client-side APIsObjective. Để tìm hiểu cách lấy dữ liệu từ máy chủ và sử dụng nó để cập nhật nội dung của trang web

Một trang web bao gồm một trang HTML và (thường) nhiều tệp khác, chẳng hạn như biểu định kiểu, tập lệnh và hình ảnh. Mô hình tải trang cơ bản trên Web là trình duyệt của bạn thực hiện một hoặc nhiều yêu cầu HTTP tới máy chủ để cung cấp các tệp cần thiết để hiển thị trang và máy chủ sẽ phản hồi với các tệp được yêu cầu. Nếu bạn truy cập một trang khác, trình duyệt sẽ yêu cầu các tệp mới và máy chủ sẽ phản hồi với chúng

Mô hình này hoạt động hoàn toàn tốt cho nhiều trang web. Nhưng hãy xem xét một trang web rất dựa trên dữ liệu. Ví dụ: một trang web thư viện như Thư viện Công cộng Vancouver. Trong số những thứ khác, bạn có thể coi một trang web như thế này là giao diện người dùng với cơ sở dữ liệu. Nó có thể cho phép bạn tìm kiếm một thể loại sách cụ thể hoặc có thể hiển thị cho bạn các đề xuất cho những cuốn sách bạn có thể thích, dựa trên những cuốn sách bạn đã mượn trước đó. Khi bạn làm điều này, nó cần cập nhật trang với bộ sách mới để hiển thị. Nhưng lưu ý rằng hầu hết nội dung trang — bao gồm các mục như đầu trang, thanh bên và chân trang — vẫn giữ nguyên

Rắc rối với mô hình truyền thống ở đây là chúng tôi phải tìm nạp và tải toàn bộ trang, ngay cả khi chúng tôi chỉ cần cập nhật một phần của nó. Điều này không hiệu quả và có thể dẫn đến trải nghiệm người dùng kém

Vì vậy, thay vì mô hình truyền thống, nhiều trang web sử dụng API JavaScript để yêu cầu dữ liệu từ máy chủ và cập nhật nội dung trang mà không cần tải trang. Vì vậy, khi người dùng tìm kiếm một sản phẩm mới, trình duyệt chỉ yêu cầu dữ liệu cần thiết để cập nhật trang - chẳng hạn như bộ sách mới để hiển thị

API chính ở đây là Fetch API. Điều này cho phép JavaScript chạy trong một trang để thực hiện yêu cầu HTTP tới máy chủ để truy xuất các tài nguyên cụ thể. Khi máy chủ cung cấp chúng, JavaScript có thể sử dụng dữ liệu để cập nhật trang, thường bằng cách sử dụng API thao tác DOM. Dữ liệu được yêu cầu thường là JSON, đây là định dạng tốt để truyền dữ liệu có cấu trúc, nhưng cũng có thể là HTML hoặc chỉ văn bản

Đây là mẫu phổ biến cho các trang web dựa trên dữ liệu như Amazon, YouTube, eBay, v.v. Với mô hình này

  • Cập nhật trang nhanh hơn rất nhiều và bạn không phải đợi trang làm mới, nghĩa là trang web sẽ nhanh hơn và phản hồi nhanh hơn
  • Ít dữ liệu được tải xuống trên mỗi bản cập nhật, nghĩa là ít lãng phí băng thông hơn. Đây có thể không phải là vấn đề lớn trên máy tính để bàn có kết nối băng thông rộng nhưng lại là vấn đề lớn trên thiết bị di động và ở các quốc gia không có dịch vụ internet nhanh phổ biến

Ghi chú. Trong những ngày đầu, kỹ thuật chung này được gọi là JavaScript và XML không đồng bộ (Ajax), bởi vì nó có xu hướng yêu cầu dữ liệu XML. Ngày nay, điều này thường không xảy ra (bạn có nhiều khả năng yêu cầu JSON hơn), nhưng kết quả vẫn như vậy và thuật ngữ "Ajax" vẫn thường được sử dụng để mô tả kỹ thuật này

Để tăng tốc hơn nữa, một số trang web cũng lưu trữ nội dung và dữ liệu trên máy tính của người dùng khi chúng được yêu cầu lần đầu, nghĩa là trong các lần truy cập tiếp theo, họ sử dụng các phiên bản cục bộ thay vì tải xuống các bản sao mới mỗi khi trang được tải lần đầu. Nội dung chỉ được tải lại từ máy chủ khi nó đã được cập nhật

Hãy xem qua một vài ví dụ về Fetch API

Đối với ví dụ này, chúng tôi sẽ yêu cầu dữ liệu từ một số tệp văn bản khác nhau và sử dụng chúng để điền vào một khu vực nội dung

Loạt tệp này sẽ đóng vai trò là cơ sở dữ liệu giả mạo của chúng tôi; . Tuy nhiên, ở đây, chúng tôi muốn giữ cho nó đơn giản và tập trung vào phần phía máy khách của tài liệu này.

Để bắt đầu ví dụ này, hãy tạo một bản sao cục bộ của bắt đầu tìm nạp. html và bốn tệp văn bản — câu 1. txt, câu 2. txt, câu 3. txt và câu 4. txt — trong một thư mục mới trên máy tính của bạn. Trong ví dụ này, chúng tôi sẽ lấy một câu thơ khác của bài thơ (mà bạn có thể nhận ra rõ ràng) khi nó được chọn trong trình đơn thả xuống

Ngay bên trong phần tử

Cuối cùng, chúng tôi xâu chuỗi một trình xử lý

verse = verse.replace(' ', '').toLowerCase();
const url = `${verse}.txt`;
9 ở cuối, để bắt bất kỳ lỗi nào được đưa ra trong một trong các hàm không đồng bộ mà chúng tôi đã gọi hoặc trình xử lý của chúng

Một vấn đề với ví dụ hiện tại là nó sẽ không hiển thị bất kỳ bài thơ nào khi tải lần đầu. Để khắc phục điều này, hãy thêm hai dòng sau vào cuối mã của bạn (ngay phía trên thẻ đóng

// Call `fetch()`, passing in the URL.
fetch(url)
  // fetch() returns a promise. When we have received a response from the server,
  // the promise's `then()` handler is called with the response.
  .then((response) => {
    // Our handler throws an error if the request did not succeed.
    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }
    // Otherwise (if the response succeeded), our handler fetches the response
    // as text by calling response.text(), and immediately returns the promise
    // returned by `response.text()`.
    return response.text();
  })
  // When response.text() has succeeded, the `then()` handler is called with
  // the text, and we copy it into the `poemDisplay` box.
  .then((text) => poemDisplay.textContent = text)
  // Catch any errors that might happen, and display a message
  // in the `poemDisplay` box.
  .catch((error) => poemDisplay.textContent = `Could not fetch verse: ${error}`);
0) để tải câu 1 theo mặc định và đảm bảo phần tử