<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Web Performance on miti99</title><link>https://miti99.com/tags/web-performance/</link><description>Recent content in Web Performance on miti99</description><generator>Hugo -- gohugo.io</generator><language>vi</language><lastBuildDate>Wed, 08 Jul 2026 09:22:18 +0700</lastBuildDate><atom:link href="https://miti99.com/tags/web-performance/index.xml" rel="self" type="application/rss+xml"/><item><title>Newsletter #88</title><link>https://miti99.com/post/2026/03/13/</link><pubDate>Fri, 13 Mar 2026 00:00:00 +0700</pubDate><guid>https://miti99.com/post/2026/03/13/</guid><description>&lt;p&gt;&lt;em&gt;Mời bạn thưởng thức Newsletter #88.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="a-broken-heart"&gt;&lt;a class="link" href="https://allenpike.com/2026/a-broken-heart/" target="_blank" rel="noopener"
&gt;A Broken Heart&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Allen Pike chia sẻ một câu chuyện debug thú vị khi dashboard của ứng dụng web đột nhiên chậm đi 10 lần - từ 1 giây lên 10 giây. Sau khi loại trừ React (vốn bị nghi ngờ đầu tiên), anh phát hiện ra Safari đang dành 94% CPU cho&amp;hellip; Layout?&lt;/p&gt;
&lt;p&gt;Bằng phương pháp binary search với sự hỗ trợ của Claude, anh tìm ra thủ phạm: một emoji trái tim ❤️ trong nút &amp;ldquo;Send Feedback&amp;rdquo;. Hóa ra font &lt;strong&gt;Noto Color Emoji&lt;/strong&gt; của Google - được sử dụng để render emoji nhất quán trên các nền tảng - gây ra bug nghiêm trọng trong Safari, khiến mỗi lần layout mất 1600ms thay vì 2ms bình thường.&lt;/p&gt;
&lt;p&gt;Điều thú vị là bug này chỉ ảnh hưởng một số emoji cụ thể (❤️, 🤯) trong khi các emoji khác (🧺, 🫠) vẫn render nhanh bình thường. Giải pháp tạm thời: liệt kê &amp;ldquo;Apple Color Emoji&amp;rdquo; trước Noto Color Emoji trong font-family.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Điểm chính:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Font Noto Color Emoji sử dụng COLRv1 spec, fallback sang SVG trên Safari&lt;/li&gt;
&lt;li&gt;Bug nằm trong CoreSVG của Apple, đã được báo cáo cho WebKit team&lt;/li&gt;
&lt;li&gt;Coding agent giúp tạo minimal repro case nhanh hơn nhiều so với thủ công&lt;/li&gt;
&lt;li&gt;Câu chuyện thú vị về cách AI vừa là nguyên nhân (gợi ý dùng font này) vừa là giải pháp (giúp debug)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="wrapping-code-comments"&gt;&lt;a class="link" href="https://matklad.github.io/2026/02/21/wrapping-code-comments.html" target="_blank" rel="noopener"
&gt;Wrapping Code Comments&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Một bài viết ngắn nhưng thú vị từ matklad về việc wrap code và comments. Tác giả nhận ra rằng code và comments nên được wrap ở độ rộng khác nhau: code ở khoảng 100 cột (để vừa 2 editor cạnh nhau), nhưng nội dung comments nên wrap ở 60-70 cột để dễ đọc hơn.&lt;/p&gt;
&lt;p&gt;Điều quan trọng là comments nên wrap &lt;strong&gt;tương đối&lt;/strong&gt; so với vị trí bắt đầu của comment, không phải tuyệt đối. Ví dụ: comment ở top-level có thể rộng, nhưng comment lồng sâu trong code nên hẹp hơn nhưng vẫn giữ độ rộng nội dung giống nhau.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Điểm chính:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Giới hạn code ở 100 cột, nội dung comments ở 60-70 cột&lt;/li&gt;
&lt;li&gt;Comments nên wrap tương đối theo vị trí, không tuyệt đối&lt;/li&gt;
&lt;li&gt;VS Code và Emacs đều không hỗ trợ tốt relative wrapping&lt;/li&gt;
&lt;li&gt;Soft-wrapping không thể wrap đúng nếu không hiểu ý nghĩa text (ví dụ markdown lists)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="bonus"&gt;Bonus
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Images:&lt;/strong&gt;
&lt;img src="https://substackcdn.com/image/fetch/$s_!h2M_!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d6d88ea-4355-4f29-96fa-9770907beebb_2360x2960.png"
loading="lazy"
alt="RabbitMQ vs Kafka vs Pulsar"
&gt;
&lt;img src="https://substackcdn.com/image/fetch/$s_!8P-v!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6039d506-e02f-4313-ab97-2c04f8c94d90_2360x2960.png"
loading="lazy"
alt="REST vs GraphQL"
&gt;
&lt;img src="https://substackcdn.com/image/fetch/$s_!yela!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ac3310f-e380-48c2-93ff-051f7606b533_2250x2624.png"
loading="lazy"
alt="Eventual Consistency in Modern Databases"
&gt;
&lt;img src="https://substackcdn.com/image/fetch/$s_!vB9v!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc02c74f-e91f-438a-8ad8-d5ba6831e7f0_2250x2624.png"
loading="lazy"
alt="Strong Consistency In Databases"
&gt;
&lt;img src="https://substackcdn.com/image/fetch/$s_!h8d0!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5f67fe5-0efa-4fc6-98da-d176b60b1a92_2508x3000.jpeg"
loading="lazy"
alt="PostgreSQL versus MySQL"
&gt;
&lt;img src="https://substackcdn.com/image/fetch/$s_!_roW!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdb9cae-3bda-4a62-9077-3f9d1e13fede_2360x2960.jpeg"
loading="lazy"
alt="Network Protocols Explained"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Videos:&lt;/strong&gt;
&lt;a class="link" href="https://www.youtube.com/watch?v=z_NbVtbgBJw" target="_blank" rel="noopener"
&gt;Video: What Is Redis Really About? - ByteByteGo&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Bài viết đã được review và cập nhật bởi Claude Code với Opus 4.7 (1M context).&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>