Một người bạn của tôi nói rằng việc sử dụng <div style=""></div>
thay vì đặt tệp css nén như link href
ở phần đầu sẽ tăng hiệu suất. Có đúng như vậy không?
Một người bạn của tôi nói rằng việc sử dụng <div style=""></div>
thay vì đặt tệp css nén như link href
ở phần đầu sẽ tăng hiệu suất. Có đúng như vậy không?
Câu trả lời:
Mức tăng hiệu suất mà người bạn của bạn đã đề cập có lẽ quá nhỏ so với mức tăng hiệu suất (thông qua các yếu tố khác) bằng cách sử dụng tệp CSS.
Sử dụng thuộc tính style, trình duyệt chỉ vẽ quy tắc cho phần tử cụ thể đó, trong trường hợp này là <div>
phần tử. Điều này làm giảm thời gian tra cứu cho công cụ CSS để tìm phần tử nào phù hợp với bộ chọn CSS (ví dụ: a.hover
hoặc #someContainer li
).
Tuy nhiên, đặt kiểu ở cấp phần tử có nghĩa là bạn không thể lưu các quy tắc kiểu CSS một cách riêng biệt. Thông thường, việc đưa các kiểu vào các tệp CSS sẽ cho phép thực hiện bộ nhớ đệm, do đó giảm lượng tải từ máy chủ mỗi khi bạn tải một trang.
Việc đặt các quy tắc kiểu ở cấp phần tử cũng sẽ khiến bạn mất dấu các phần tử được tạo kiểu theo cách nào. Nó cũng có thể phản tác dụng tăng hiệu suất của việc sơn một phần tử cụ thể nơi bạn có thể sơn lại nhiều phần tử với nhau. Việc sử dụng các tệp CSS phân tách CSS khỏi HTML và do đó cho phép bạn đảm bảo rằng các kiểu của bạn là đúng và sau này dễ dàng sửa đổi hơn.
Do đó, nếu bạn nhìn vào bảng so sánh, bạn sẽ thấy rằng việc sử dụng tệp CSS có nhiều lợi ích hơn so với việc tạo kiểu ở cấp phần tử.
Đừng quên khi bạn có tệp biểu định kiểu CSS bên ngoài, trình duyệt của bạn có thể lưu tệp vào bộ đệm để tăng hiệu quả ứng dụng của bạn!
Trang sẽ tải nhanh hơn nếu bạn sử dụng kiểu nội tuyến so với trang định kiểu. Trong một số trường hợp phải nhanh hơn.
Khi bạn sử dụng biểu định kiểu bằng href, nó yêu cầu một yêu cầu khác đến máy chủ, sau đó phân tích cú pháp tệp sau phản hồi. Với các kiểu nội tuyến, không có điều đó, chỉ cần phân tích cú pháp trực tiếp.
Nếu khách hàng có internet chậm thì yêu cầu duy nhất đó có thể rất chậm khiến trang không có kiểu dáng cho đến khi bảng định kiểu được gửi. Một lần nữa, nếu nó là nội tuyến sẽ không có sự chậm trễ nào cả.
Lý do duy nhất chúng tôi sử dụng bảng định kiểu là được tổ chức. Đôi khi chúng không cần thiết, vì vậy các kiểu nội tuyến hoặc các trang định kiểu trong tài liệu là đủ.
Đây không phải là một câu hỏi dễ trả lời, bởi vì hiệu suất trong trường hợp này phụ thuộc vào nhiều yếu tố (độ phức tạp của bộ chọn CSS, kích thước tài liệu, v.v.). Tuy nhiên, nếu xét một trường hợp riêng biệt, chúng ta có thể thấy rằng lớp CSS nói chung nhanh hơn kiểu nội tuyến:
Kiểu nội tuyến so với lớp CSS
Cũng có thể nhưng lý do cho biểu định kiểu được liên kết hoặc bên ngoài là vì vậy nó có thể được lưu vào bộ nhớ cache trong trình duyệt, đặc biệt khi bạn sử dụng cùng một div trong nhiều trang cho trang web. Điều này có nghĩa là trình duyệt chỉ phải tải biểu định kiểu một lần thay vì phải tải lại mã mỗi khi trình duyệt tải lại trang. Nó cũng làm cho mã sạch hơn giúp mọi thay đổi hoặc gỡ lỗi dễ dàng hơn.
SỰ THẬT LÀ 'CÓ'
Có một sự khác biệt lớn. Đặc biệt là khi bạn đang tự động hóa giao diện người dùng. Hãy thử đoạn mã sau. Tôi sử dụng IE10 và notepad để phát triển. Tôi vừa học vừa làm các bài kiểm tra, đây là bài kiểm tra phiên bản rút gọn. (có thể có lỗi khi tôi giảm mã để hiển thị câu trả lời của bạn)
Nhấp vào hình ảnh bạn tham khảo và đọc thông báo cảnh báo. GỢI Ý: Lưu tệp này, lưu lại dưới dạng chỉnh sửa trước khi chỉnh sửa (thử nghiệm).
Những lời chúc tốt đẹp nhất, Don
<!DOCTYPE html>
<head>
<style>
div.grid
{
width:180px;
height:42px;
border:none;
}
img
{
width:50px;
height:50px;
margin:2px;
float:left;
border: 1px solid red;
}
</style>
<script>
function handleSelect(xId)
{
//
// TESTPOINT
alert("TESTPOINT\r>Grid: " + xId);
//
// GET BORDER COLOR
// NOTE: An empty or blank value when you can see a border means the tag itself does not
// have 'border properties' (style="border: 2px{width} solid{style} green{color}").
// although there can be a border detailed via css local or external or via code (script).
// If the 'border properties' are returned then they were setup at the tag as
// above or the 'border properties' were updated by script code not css code.
// If the 'border properties' are NOT returned then they were setup via css.
// Thus, since everything seems to be heading toward edit on the fly (live) then css is NOT the way to go (learning).
// HINT: Margin property is also not readable if set via css. Most likely all the properties values are the same way.
// Thus, setting the property values of a tag should be set at the tag control.
// (works) cBorder=document.getElementById(xId).style.borderWidth;
// (works) cBorder=document.getElementById(xId).style.borderStyle;
// (works) cBorder=document.getElementById(xId).style.borderColor;
// (works) cBorder=document.getElementById(xId).style.border;
//cBorder=document.getElementById(xId).style.border;
cBorder=document.getElementById(xId).style.margin;
alert("TESTPOINT\r>Grid: " + xId + "\r>Border: " + cBorder);
//
// SELECT IMAGE
document.getElementById(xId).style.margin="1px";
document.getElementById(xId).style.border="2px solid gold";
document.getElementById(xId).innerHTML=xId;
alert("TESTPOINT\r>Grid: " + xId + "\r>Border: " + cBorder + "\r>[set border color gold]");
//
// GET BORDER COLOR
//var cBorder=document.getElementById(xId).style.border-Color; //Error
//var cBorder=document.getElementById(xId).style.border-color; //Error
//var cBorder=document.getElementById(xId).style.borderColor; //Error
//var cBorder=document.getElementById(xId).style.bordercolor; //Undefined
cBorder=document.getElementById(xId).style.border; //Empty
alert("TESTPOINT\r>Grid: " + xId + "\r>Border: " + cBorder + "\r>[set border color gold]" + "\r>Border: " + cBorder);
}
</script>
</head>
<body>
<div class="grid">
<img style="border: 2px solid green" id="R0C0" src="someimage.bmp" onclick="handleSelect(id)">
<img style="border: 2px solid blue" id="R0C1" src="someimage.bmp" onclick="handleSelect(id)">
<img style="border: 2px solid purple" id="R0C2" src="someimage.bmp" onclick="handleSelect(id)">
</div>
<div class="grid">
<img id="R1C0" src="someimage.bmp" onclick="handleSelect(id)">
<img id="R1C1" src="someimage.bmp" onclick="handleSelect(id)">
<img id="R1C2" src="someimage.bmp" onclick="handleSelect(id)">
</div>
<div class="grid">
<img id="R2C0" src="someimage.bmp" onclick="handleSelect(id)">
<img id="R2C1" src="someimage.bmp" onclick="handleSelect(id)">
<img id="R2C2" src="someimage.bmp" onclick="handleSelect(id)">
</div>
</body>
</html>
Không có câu trả lời cố định theo ý kiến của tôi.
An inline CSS
sẽ tải nhanh hơn nếu kích thước nội dung CSS tải xuống nhanh hơn máy chủ của bạn sẽ phản hồi một external CSS file
yêu cầu (xem xét thời gian DNS, độ trễ máy chủ, v.v.).
Đối với CSS kích thước bình thường, tôi sẽ nội dòng chúng trong trang, đối với thứ gì đó trên 15-20KB, tôi có thể sẽ đặt nó vào một tệp bên ngoài và đảm bảo rằng nó có thể được lưu vào bộ nhớ cache.
Tôi chắc chắn rằng có nhiều cân nhắc khác mà tôi đang thiếu, nhưng không có câu trả lời cố định cho nội tuyến và bên ngoài.
Sử dụng bảng định kiểu bên ngoài chắc chắn là một lựa chọn tốt hơn vì nó sẽ giúp bạn ghi nhớ kiểu bạn đã áp dụng trên (các) div. Nó làm giảm thời gian tải trang vì mã HTML càng ít thì nó sẽ tải nhanh hơn.
Nhưng trong một số trường hợp, bạn có thể phải thay đổi một số thuộc tính của một div cụ thể thì kiểu nội tuyến là lựa chọn tốt nhất. Và thực sự mà nói, một hoặc hai kiểu nội tuyến sẽ không làm thay đổi thời gian tải trang.
Có một tùy chọn khác của bảng định kiểu nội bộ nhưng nó chỉ được sử dụng khi bạn có một trang web duy nhất như khi bạn đang tạo mẫu. Điều này là do bạn phải viết CSS trong mỗi trang HTML
Tôi thích sử dụng CSS nội tuyến hơn CSS bên ngoài, nơi có nhiều tệp CSS nhỏ cho mọi phần tử hoặc hình ảnh khác. Không ích gì khi tải xuống một số tệp CSS chỉ với 5-10 dòng mã trong mỗi tệp. Nếu phần tử của bạn chứa các thuộc tính như di chuột, hoạt động, đã chọn, v.v. thì bạn phải sử dụng tệp CSS bên ngoài vì nó sẽ tránh làm phức tạp quá trình phát triển của bạn.