2012-01-24 47 views
12

Tôi đã phát triển một ứng dụng dành riêng cho các trình duyệt hiện đại và đã sử dụng rất nhiều tài sản bóng tối.hộp đổ bóng CSS3 cực kỳ chậm trong Chrome

Cho đến gần đây, điều này đã hoàn toàn tốt trên tất cả các trình duyệt hỗ trợ. Tuy nhiên, khoảng một tháng trước khi thử nghiệm trong Chrome, tôi nhận thấy rằng việc cuộn 'chậm' rất chậm, đến mức gần như không sử dụng được.

Trong tháng vừa qua, tôi đã cố gắng trích xuất các tập lệnh/gây rối với cấu trúc html của mình, mọi thứ bạn có thể nghĩ đến cho đến cuối cùng hôm nay tôi đã tìm ra nguyên nhân.

Với hộp bóng/webkit-box-shadow bị vô hiệu hóa trên tất cả các yếu tố mà tôi đã thiết lập, sự cố sẽ biến mất.

Điều gì khiến tôi kỳ quặc là nó hoạt động tốt trong Chrome cho đến khoảng một tháng trước. Ngẫu nhiên việc di chuyển trên phiên bản cửa sổ của safari là tốt, mặc dù chậm hơn một chút so với IE/Opera và Firefox.

Đây có phải là sự cố đã biết không? Có ai có một workaround cho điều này?

Và quan trọng nhất, liệu có phương pháp sao chép cùng một hiệu ứng khác mà không sử dụng thuộc tính CSS3?

+0

tôi không thể nói chuyện với các vấn đề cụ thể, nhưng các hiệu ứng CSS3 được biết đến và ghi nhận để làm chậm render nên trang web. Về việc nhân rộng hiệu ứng, bạn có thể cho chúng tôi mẫu về cách bạn đang sử dụng bóng để chúng tôi có thể giúp bạn tìm câu trả lời không? –

+0

Thật vậy, nó chỉ có vẻ kỳ quặc đến mức gần như không có bất kỳ bóng đổ hộp mới nào được thêm vào. Bất kể. Tôi đang sử dụng nó chỉ đơn giản là để thêm bóng tối nhỏ xung quanh các yếu tố để cung cấp cho một hiệu ứng 3D. Tôi không sử dụng hiệu ứng để mô phỏng một cái gì đó nó không được thiết kế cho. Hầu hết việc sử dụng nằm giữa bán kính 4px-10px xung quanh mép. Khó khăn duy nhất là 'yếu tố container này có kích thước động vì nội dung có thể được thêm/xóa. Kỳ lạ là nó chỉ là cuộn mà có vấn đề, tất cả các repaints/reflows xuất hiện tốt – gordyr

+0

Yah, thậm chí thú vị hơn là chủ đề này từ một năm trước RE: safari: http://stackoverflow.com/questions/4789853/css3-box -shadow-nguyên-scroll-lag-slow-performance-on-safari-5-0-2 Một điều tôi nhớ là cả bán kính của bóng đổ, và số lượng bóng tối, làm chậm nó xuống. Xin lỗi tôi không có một sửa chữa, mặc dù. –

Trả lời

13

Có được một báo cáo lỗi mở và đóng cửa ở Webkit năm ngoái:

CSS3 box-shadow causes scroll-lag (slow performance) on Safari 5.0.2?

Dường như Chrome có một lỗi mở trên một phiên bản cũ:

http://code.google.com/p/chromium/issues/detail?id=95164

Airbnb đã thảo luận về vấn đề gần đây và thực sự đã thay đổi thiết kế cuối cùng của họ vì nó:

http://nerds.airbnb.com/box-shadows-are-expensive-to-paint

Có một nhóm người gần đây đã thu hút sự quan tâm đến hiệu suất CSS thử nghiệm theo chương trình.Dưới đây là một bookmarklet bạn có thể sử dụng để bắt đầu thử nghiệm của riêng bạn:

http://andy.edinborough.org/CSS-Stress-Testing-and-Performance-Profiling

Trong khi đó, bạn nói đúng đó hack cửa hình ảnh là một lựa chọn. Kiểm tra nó ra ở đây:

Scroll Lag with CSS3 box-shadow property?

+0

Liên kết tuyệt vời, cảm ơn rất lớn Matt ... Tôi đoán nó không chỉ cho tôi sau đó! Tôi sẽ có một vở kịch với thuộc tính hình ảnh biên giới trong một giờ tới và xem tôi có thể tìm ra thứ gì đó có thể sử dụng được không. Cảm ơn! – gordyr

+0

nó quay ra bằng cách sử dụng thuộc tính hình ảnh biên giới khá đơn giản và đã giải quyết vấn đề một cách hoàn hảo. Liên kết cuối cùng mà bạn đã đăng đã thực hiện thủ thuật. Rõ ràng là tôi đã sửa đổi hình ảnh/css để phù hợp với trang web của tôi, thêm góc tròn và độ dốc và đã có thể thay thế các gradient CSS cũng trong một giải pháp khá thanh lịch. Điều này đã có sản phẩm phụ của việc giảm kích thước CSS của tôi một cách đáng kể vì tôi không cần phải có quá nhiều dòng hỗ trợ mỗi trình duyệt về gradient/box-shadows/border-radius. Chúc mừng! – gordyr

+0

Tôi đã sử dụng 'box-shadow' trong các nút của ứng dụng điện thoại của tôi và nó bị trễ trước khi': active' bị trì hoãn, chắc chắn đó là một lỗi mới. –

1

Nó có thể không phải là hộp bóng đặc biệt, có thể cái gì khác trong ứng dụng của bạn chỉ tiêu thụ quá nhiều tài nguyên và hộp bóng chỉ xảy ra là anh đào trên đầu trang.

Tuy nhiên, tôi có thể xác nhận rằng hộp bóng trên các phần tử quá dài hoặc lớn gây ra các vấn đề về hiệu suất. Tôi làm việc cho một nhà xây dựng hình thức drag'n'drop nhất định và cố gắng thiết lập hộp bóng trên một 900px x 1000px div và di chuyển bắt đầu tụt hậu ngay lập tức. Của chúng tôi là một ứng dụng web rất nặng ajax, vì vậy những người khác có thể đủ khả năng để có được kết quả tốt hơn, nhưng vẫn còn, tôi nghĩ rằng đây là một ví dụ hợp lệ.

Vì vậy, tôi đã chuyển sang trường học cũ và tạo hình ảnh thay thế. Tôi nghĩ rằng cách thích hợp nhất để làm cho bóng ảnh hộp hoạt động mà không tải quá nhiều ảnh là phải có phần tử có chiều rộng cố định.

Điều tôi đã làm là ba lát hình ảnh. Một lát từ trên xuống dưới góc trên cùng, một từ dưới lên trên góc dưới cùng và một lát mỏng từ giữa mà tôi đã sử dụng trên div làm hình nền với lặp lại-y để tôi có thể tự động thay đổi thành chiều cao của div phù hợp với trang người dùng.

Bạn có thể cắt nhiều hơn để vừa với bất kỳ ô nào nhưng nó trở nên quá nhiều (ít nhất 5 hình ảnh phụ và thêm 8 div chính xác) cho một hộp đổ bóng.

+0

Giống như của bạn, ứng dụng của tôi là một trang duy nhất, tài nguyên nặng ajax thúc đẩy ứng dụng liên quan đến rất nhiều kéo/thả và hiệu ứng hình ảnh. Thật không may trên tất cả các yếu tố tôi không có sự sang trọng của chiều rộng cố định, mặc dù điều này chắc chắn sẽ sửa chữa một vài công bằng của họ. Giải pháp của bạn nghe có vẻ tốt nhưng tôi sẽ để câu hỏi mở thêm một giờ nữa với hy vọng một người khác sẽ đưa ra một giải pháp thay thế khác. Cảm ơn nhiều! – gordyr

+0

hãy làm, tôi rất thích xem có ai đó có thể nghĩ ra điều gì đó tốt hơn không. Tôi không thích điều này, nhưng đôi khi bạn làm những gì bạn phải làm :) – Ege

Các vấn đề liên quan