Tiện ích Sitemap Warmer giúp preload tăng tốc website

Nhớ lại bài viết đầu tiên trên website của mình, Làm thế nào để làm ấm website dù theo mình là rất quan trọng trong việc tối ưu tốc độ website, ảnh hưởng trực tiếp đến trải nghiệm của người dùng. Tuy vậy bài viết được khá ít view và tương tác có lẽ vì nội dung khá khó hiểu và quan trọng hơn hết là khả năng áp dụng thực tế gần như bằng 0.


Warm-up là gì?

Đồng nghĩa với preload cache, warm-up cache là hành động chủ động để website, API, các dịch vụ phản hồi nhanh hơn khi người dùng sử dụng. Khác với preload hints sử dụng cho trình duyệt, preload cache website giúp nội dung, tài nguyên chỉ được cache tại máy chủ mà không tải trước về máy người dùng.

cf cache status HIT

Nói một cách đơn giản, việc warm-up cache giúp chuyển trạng thái cache (ví dụ: cf-cache-status, x-srcache-fetch-status) từ MISS thành HIT, tạo ra các object cache/full page cache chưa xuất hiện, giúp website phản hồi nhanh hơn, giảm Time To First Byte (TTFB, là một trong những yếu tố quan trọng trong việc quyết định tốc độ website).


Nhận ra thiếu sót

Có lẽ vấn đề lớn nhất là Tuấn đã hướng dẫn một hướng rất ngách, rất khó hiểu, đồng thời số lượng người sử dụng Varnish chiếm một phần cực kì nhỏ trong khi vấn đề warm-up lại quan trọng nhưng bị bỏ qua. Vì vậy, trong khoảng thời gian rảnh rỗi trong tuần rồi, Tuấn đã viết lại một công cụ tiện ích có thể mang lại lợi ích cho nhiều người hơn và đặc biệt là dễ sử dụng hơn.

Trước kia, Tuấn từng sử dụng một bash script để warm-up, ưu điểm là script hoạt động rất đơn giản, có thể chạy ngay trên những server chạy Linux. Tuy vậy, sau một thời gian sử dụng, Tuấn nhận ra rằng việc sử dụng bash script là khá cứng nhắc, khả năng mở rộng kém và có lẽ không phù hợp với mục đích này. Vì vậy Tuấn quyết định sử dụng NodeJS vì cũng đã có một chút kinh nghiệm, đồng thời có thể chạy trên tất cả những OS mình thích: Linux/Windows/MacOS đều đã được kiểm thử 😀

Mong đợi của Tuấn là một công cụ để bạn có thể sử dụng cả trên server, cả trên máy tính cá nhân và sẽ cực kì đơn giản để sử dụng. Vì vậy mình mong các bạn đọc đang vận hành website có thể dành thời gian để xem qua, cho nhận xét, dùng thử và đánh giá xem sao. Nào, mời các bạn.

Vậy tại sao không dùng những giải pháp khác?

Có một số lí do cho vấn đề này. Tuy nhiên vấn đề chính mà Tuấn muốn là sự chủ động trong việc preload cache theo ý mình muốn.

Hiện tại có rất nhiều cách để preload một website. Chúng ta có thể dùng tính năng có sẵn trong các plugin cache, có thể dùng các website tạo sitemap, check lỗi 404 và dùng đó để “tiện tay” làm người truy cập đầu tiên.

Vấn đề thứ nhất là gần như tất cả các cách mà mình biết đều chỉ preload cho phiên bản “gzip”, trong khi hiện tại brotli đã và đang bắt đầu trở nên phổ biến bên cạnh gzip. Vấn đề này cũng tương tự như tình trạng ảnh hiện tại, WebP đã trở nên phổ biến bên cạnh các format khác. Trong khi hiện tại các preloader cũng chưa hỗ trợ preload hình ảnh có sẵn trong bài viết.

Screen Shot 2021 02 24 at 10.48.38
XML Sitemap Generator chỉ hỗ trợ gzip.
Screen Shot 2021 02 24 at 10.53.03
Optimus Cache Prime là một công cụ chuyên preload cache cũng vậy.
Screen Shot 2021 02 24 at 10.55.54
Trong khi tiện ích của mình đã hỗ trợ đầy đủ các format mới.

Vấn đề thứ hai là các giải pháp khác phụ thuộc vào môi trường mà chúng ta dùng. Ví dụ làm thế nào để preload cache cho một website không phải WordPress, không hỗ trợ các plugin cache của WordPress. Hơn thế nữa, tiện ích của Tuấn hỗ trợ từ Linux, Windows, MacOS và thậm chí là thiết bị Android nếu cần. Trong khi các công cụ khác chẳng hạn như Optimus chỉ có thể cài đặt trên Linux và Windows.

Vấn đề thứ ba là chúng ta có thể chỉ preload những bài viết vừa được cập nhật, có thể tùy chỉnh thời gian giữa mỗi request preload để không làm quá tải hosting/server và nhiều tính năng khác nữa sẽ được cập nhật trong tương lai.

Đặc biệt, những ai là khách hàng từng sử dụng dịch vụ của Tuấn sẽ được setup và cấu hình hoàn toàn miễn phí. Tuấn sẽ chạy công cụ này từ máy Tuấn, bạn không cần cài đặt hay cấu hình gì cả. Tuấn cũng sẽ chủ động liên hệ lại khách hàng để setup dần, mọi người đợi nhé.


Công cụ Sitemap Warmer và cách sử dụng

Để cài đặt công cụ này, trước tiên bạn cần cài đặt NodeJS, công cụ hỗ trợ tất cả các phiên bản từ NodeJS 10/12/14. Sau đó mở Terminal mà bạn yêu thích (với Mac/Linux) hoặc Command Prompt/PowerShell (đối với Windows) và gõ dòng lệnh bên dưới để cài đặt:

npm i datuan-sitemap-warmer -g

Ok bạn chỉ cần sử dụng câu lệnh trên một lần duy nhất. Tiếp theo để tiến hành warm-up một website, đơn giản chỉ cần dùng dòng lệnh này (nhớ thay datuan.dev thành tên miền của bạn):

warmup datuan.dev

Công cụ sẽ tự động tìm URL sitemap của bạn, tìm tất cả những bài viết vừa được cập nhật trong 5 phút vừa qua và tiến hành warm-up. Việc chỉ tìm kiếm những bài viết vừa cập nhật là rất đáng giá so với bash script mà mình nói ở đoạn trên, không sử dụng quá nhiều tài nguyên và quá trình warm-up diễn ra rất nhanh.

datuan sitemap warmer

Nếu bạn có một cập nhật lớn ở toàn bộ website và cần preload lại toàn bộ website, hãy sử dụng option -a hoặc --all để yêu cầu công cụ warm-up tất cả URL có trong sitemap.

warmup datuan.dev --all

Sitemap Warmer sẽ đợi 500ms giữa mỗi URL cần làm ấm để không làm quá tải website của bạn. Nếu bạn đang sử dụng hosting có cấu hình thấp, mình khuyên các bạn nên tăng thời gian đợi lên cao hơn một chút bằng tham số --delay như bên dưới. Ví dụ mình cần đợi 2 giây chẳng hạn:

warmup datuan.dev --delay 2000

Trong trường hợp bạn cần warm-up những bài viết được cập nhật trong khoảng thời gian xa hơn thay vì 5 phút, hãy sử dụng tham số --range để cấu hình. Ví dụ mình cần warm-up các bài viết vừa được cập nhật trong 7 ngày vừa qua:

warmup datuan.dev --range 604800

Và tất nhiên các tham số này có thể kết hợp với nhau tùy theo nhu cầu và cấu hình hosting/server của bạn:

warmup datuan.dev --delay 1000 --range 60 ...

Cách cấu hình tốt nhất

Khi đã quen với việc sử dụng, chúng ta sẽ bắt đầu cài đặt để công cụ có thể chạy một cách tự động hoặc theo nhu cầu của mọi người. Dưới đây mình sẽ gợi ý những cách cài đặt tốt nhất theo kinh nghiệm của mình.

Nếu bạn sử dụng hosting

Đa số các nhà cung cấp không cho phép bạn cài đặt NodeJS lên hosting. Vì vậy mình khuyên các bạn sử dụng công cụ Sitemap Warmer một cách thủ công. Có nghĩa là sau khi bạn hoàn thành cập nhật bài viết, hãy mở CMD hoặc terminal để chạy các lệnh bên trên. Vừa tối ưu cho các hosting yếu, vừa hiệu quả.

Nếu bạn sử dụng server/VPS

Sẽ đơn giản hơn rất nhiều. Mình khuyên các bạn nên cấu hình cronjob để công cụ có thể chạy một cách tự động. Hãy chạy câu lệnh crontab -e và thêm những dòng sau đây theo gợi ý của mình:

* * * * *   warmup datuan.dev
0 */2 * * * warmup datuan.dev --all

* * * * *   warmup duonganhtuan.com
0 */4 * * * warmup duonganhtuan.com --all

Trong cấu hình cronjob trên, server sẽ tự động warm-up tất cả bài viết vừa được cập nhật trong 5 phút mỗi phút một lần. Ngoài ra, cứ mỗi 2 tiếng server sẽ tự động warm-up tất cả các URL trong sitemap. Cách này giúp đảm bảo nếu một URL nào đó được clear cache từ phía server nhưng bị xót trong sitemap vẫn sẽ được warm-up mỗi 2 tiếng. Tùy vào mức độ cập nhật tin tức trên website, bạn có thể tăng thời gian lên thành mỗi 6 tiếng, mỗi 12 tiếng hoặc mỗi ngày 1 lần đều được.

Và tất nhiên, công cụ Sitemap Warmer hoàn toàn miễn phí, hỗ trợ chạy nhiều tên miền một lúc, không giới hạn URL, không giới hạn bất cứ thứ gì.


Câu hỏi thường gặp

Dưới đây là một số câu hỏi các bạn có thể đặt ra trong quá trình tìm hiểu hoặc sử dụng.

Công cụ này khác gì với tính năng Preload Cache của một số plugin như WP Rocket Cache, WP Fastest Cache,…?

Đây là công cụ hoàn toàn miễn phí, hoạt động độc lập không phụ thuộc WordPress cron, có thể warm-up sitemap những trang không phải WordPress, hoạt động nhẹ nhàng và hiệu quả, có thể preload các loại content-type khác nhau như Brotli, AVIF, WebP.

Tôi có nên sử dụng công cụ này hay không?

Tuấn cực kì khuyến khích nếu trang của bạn là trang tin tức, blog, giới thiệu sản phẩm. Một số trang bán hàng sử dụng Woocommerce ngăn trình duyệt cache nội dung của trang nên hiệu quả sẽ không rõ rệt. Tuy nhiên công cụ vẫn có thể giúp bạn warm-up object cache nếu được cấu hình.

Tôi muốn báo lỗi/yêu cầu tính năng

Tuyệt vời! Bạn có thể bình luận ngay tại bài viết này để báo lỗi hoặc yêu cầu tính năng mới trên ý tưởng của bạn.

Công cụ này có an toàn không? Có yêu cầu tài khoản không?

Hoàn toàn an toàn. Mã nguồn của công cụ được publish trên Github của mình. Công cụ khi hoạt động cũng không gửi bất kì thông tin/log gì về bên mình.

Công cụ này có hỗ trợ Cloudflare không?

Có, nhưng đối với trường hợp cấu hình Cloudflare không bypass cache. Nếu header cf-cache-status của website là DYNAMIC thì giống trường hợp của Woocommerce, công cụ sẽ không cho hiệu quả rõ rệt.


Tính năng trong tương lai

Hiện tại vẫn còn một số điểm hạn chế mà Tuấn sẽ khắc phục sớm, trong đó nhược điểm lớn nhất là chưa thể preload được CSS và JS trên trang. Hiện tại từ phiên bản v1.1.1 các bạn đã có thể preload tất cả các asset là CSS / JS trên tất cả các trang mà tiện ích này quét qua.

image

Trong tương lai có thể Tuấn sẽ chuyển sang sử dụng Chrome headless để có thể mô phỏng chính xác hơn hành vi của người dùng thật, từ đó preload được nhiều thứ hơn. Bù lại Sitemap Warmer sẽ phức tạp hơn và có thể chạy nặng hơn rất nhiều.

Còn để tập trung cho các tính năng chính hiện nay, Tuấn sẽ bổ sung thêm các tham số giúp loại bỏ những yêu cầu warm-up thừa trong trường hợp bạn không sử dụng AVIF hoặc brotli chẳng hạn.


Công cụ này có giúp Tuấn tăng lương không?

(Cre: anh Quần Cam). Công cụ Sitemap Warmer hoàn toàn miễn phí, mã nguồn mở, không thu thập bất cứ thông tin gì, vậy việc này có lợi gì cho Tuấn?

Đối với Tuấn thì công cụ này là một trợ thủ không thể thiếu trong việc tăng tốc website. Nhờ có công cụ này mà thời gian phản hồi website của Tuấn khó có thể vượt trên 100ms (với những trang có cache), chính bạn và sau bài viết này thì khách hàng, bạn đọc của bạn là những người được hưởng lợi từ công cụ này.

Ngoài ra khi viết công cụ này, Tuấn lại được học hỏi thêm một tool CI/CD mới là Github Actions, giúp Tuấn có thể tự động test Sitemap Warmer trên tất cả phiên bản NodeJS, từ 10 đến 12, thậm chí test trên cả Windows và Linux. Đây cũng là lần đầu tiên Tuấn publish một công cụ lên thư viện npm, giúp Tuấn tự tin hơn trong các dự án sau này. Chỉ đơn giản là vậy thôi, mọi người đều vui vẻ, ai cũng được lợi.

Bài viết được gắn thẻ: , ,

Trả lời Hủy

  1. Nó đang warmup thì đột nhiên ngưng là sao ạ?

    2022-11-17T03:12:30.712Z [DEBUG] warmer: ⚡️ Warming https://'+a+'/cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.0. 6/jquery.mousewheel.min.js { accept_encoding: ‘gzip, deflate, br’ }
    (node:12010) UnhandledPromiseRejectionWarning: FetchError: request to https://'+a+'/cdnjs.cloudflare.com/ajax/libs/jquery -mousewheel/3.0.6/jquery.mousewheel.min.js failed, reason: getaddrinfo ENOTFOUND ‘+a+’
    at ClientRequest. (file:///usr/lib/node_modules/datuan-sitemap-warmer/node_modules/node-fetch/src/index.js :108:11)
    at ClientRequest.emit (events.js:400:28)
    at TLSSocket.socketErrorListener (_http_client.js:475:9)
    at TLSSocket.emit (events.js:400:28)
    at emitErrorNT (internal/streams/destroy.js:106:8)
    at emitErrorCloseNT (internal/streams/destroy.js:74:3)
    at processTicksAndRejections (internal/process/task_queues.js:82:21)
    (Use `node –trace-warnings …` to show where the warning was created)
    (node:12010) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing insi de of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminat e the node process on unhandled promise rejection, use the CLI flag `–unhandled-rejections=strict` (see https://nodejs.o rg/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
    (node:12010) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

  2. Hello bro
    warmup main domain thì bình thường, nhưng khi warmup sub domain thì bị lỗi như dưới
    [ERROR] main: Error: Service Temporarily Unavailable
    at file:///usr/lib/node_modules/datuan-sitemap-warmer/index.js:83:15
    at processTicksAndRejections (internal/process/task_queues.js:95:5)

    Ko biết tại sao. Please help

    Thanks

  3. warmup ko bị lỗi, lỗi là các version nodejs và npm ở repository của OS ko được cập nhật.
    Mình làm như sau một phát là ok ngay.
    1. curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash –
    The script will add the NodeSource signing key to your system
    2. sudo apt install nodejs
    3. npm i datuan-sitemap-warmer -g

  4. Hello sir 🙂
    Mình cài Warmup vào Devian 11 64bit Node v10.24.0, npm v5.8.0 thì khi chạy warmup bị lỗi như bên dưới.
    Sir có còn take care cái warmup này ko? mình thấy nó rất hay.
    Cám ơn

    /usr/local/lib/node_modules/datuan-sitemap-warmer/index.js:2
    import SitemapXMLParser from ‘datuan-sitemap-parser’
    ^^^^^^^^^^^^^^^^

    SyntaxError: Unexpected identifier
    at Module._compile (internal/modules/cjs/loader.js:723:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)

  5. Giá mà Tuấn phát triển Sitemap Warmer thành dịch vụ remote warmup thì tốt quá, đối với các site có nội dung lớn sẽ cần 1 tool bên ngoài để warmup hiệu quả hơn.

  6. Hello Tuấn
    Trong bài Tuấn chỉ nói về preload cho các bài viết mới cập nhật, còn các bài viết mới được tạo vào trang chủ thì sao?
    Có cách nào preload cache cho trang chủ khi có bài viết mới được tạo ko?

    Cám ơn

  7. Hello Tuấn

    Hôm nay mình cài warmup vào LinuxMint 20 thì khi chạy lệnh warmup bị lỗi như sau:

    /usr/local/lib/node_modules/datuan-sitemap-warmer/index.js:2
    import SitemapXMLParser from ‘datuan-sitemap-parser’
    ^^^^^^^^^^^^^^^^
    SyntaxError: Unexpected identifier
    at Module._compile (internal/modules/cjs/loader.js:723:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)

    Mình cài nodejs 10.19.0 và npm 6.14.4

    1. Cài Node 16 ko được, cài Node 10 ko được, cài Node 14 thì được, hết bị lỗi

  8. Em cài thử thì khi warmup chạy khá hao CPU, toàn 100% 1 core, mấy core khác cũng nhảy lên 15-30% trong khi warmup.
    Warmup có ưu điểm gì hơn Optimus Cache Prime ko a? Optimus Cache Prime thì ko phải cài nodejs

    1. Không biết bạn đang nhắc đến CPU của máy nào, máy bạn chạy hay server nơi đang chứa website. Nếu là server thì là chuyện tất nhiên rồi, phải tốn CPU để ra được response để còn cache.

      Optimus Cache Prime chỉ phù hợp nhất khi bạn sử dụng WP Super Cache hoặc W3 Total Cache mà vẫn còn cache theo dạng static HTML file thôi, còn lại thì mình vẫn thấy các tính năng hiện tại của mình vẫn hơn, bao gồm brotli, có thể warmup resource file CSS/JS và hình ảnh, delay,…

      Ngoài ra thì OCP đã cũ rồi, không còn được phát triển tính năng mới nữa, vẫn đang sử dụng HTTP/1.1 khá cũ. Còn tool của mình thì vẫn sẽ được thêm tính năng mới khi cần.

    2. Mình có thử trên một server của mình thì chỉ sử dụng tầm 2-5% CPU thôi, đó là khi mình dùng option nhanh nhất (-d0) không delay giữa các request. Nếu đối với sitemap lớn, nhiều hơn 1500 URL thì có thể sẽ tốn nhiều RAM, đâu đó tầm 64 đến 128MB mà mình có thảo luận ở đây: https://github.com/tdtgit/sitemap-warmer/issues/54

  9. Hello Tuấn
    Hôm nay cài warmup trên Debian 10 server ko được. Lỗi như sau

    npm WARN npm npm does not support Node.js v10.24.0
    npm WARN npm You should probably upgrade to a newer version of node as we
    npm WARN npm can’t make any promises that npm will work with this version.
    npm WARN npm You can find the latest version at https://nodejs.org/
    npm ERR! code 128
    npm ERR! An unknown git error occurred
    npm ERR! command git –no-replace-objects ls-remote ssh://git@github.com/tdtgit/sitemap-xml-parser.git
    npm ERR! Warning: Permanently added the RSA host key for IP address ‘140.82.114.4’ to the list of known hosts.
    npm ERR! git@github.com: Permission denied (publickey).
    npm ERR! fatal: Could not read from remote repository.
    npm ERR!
    npm ERR! Please make sure you have the correct access rights
    npm ERR! and the repository exists.

    npm -v là 8.0.0
    nodejs -v là 10.24.0

    Please help!

    1. Sorry vì trả lời bạn chậm. Mình có thử tạo một server Debian 10 và cũng thấy lỗi tương tự. Tuy nhiên là vấn đề là do Debian không cài package git mặc định thôi. Bạn cài đặt bằng câu lệnh apt install git là được nhé.

  10. banj ơi
    1. nếu dùng yoast seo, sitmap dạng sitemap_index.xml nó sẽ hok hiểu
    2. hình như app này chỉ hổ trợ web chạy ssl ? không hổ trợ web thường
    3. mình dùng centos

    1. 1. Mình có thử với Yoast rồi, có thể dùng bình thường. Nếu bạn không setup để redirect từ /sitemap.xml sang /sitemap_index.xml thì có thể gõ full URL là warmup https://domain.com/sitemap_index.xml là được.
      2. Mặc định app sẽ tự điền https://, bạn có thể dùng với web http bằng command warmup http://domain.com là được.
      3. CentOS đều dùng bình thường, bạn cài git bằng câu lệnh yum install git rồi cài đặt lại giúp mình xem sao.

    1. Mình không biết bạn đang dùng CentOS hoặc Ubuntu nhưng thử cài git rồi chạy lại câu lệnh trên nha. apt install git hoặc yum install git.

  11. Mới check server cài warmup mấy tháng trước thì thấy bị lỗi không phải version mới nhất và ko warmup được. Vậy nên thêm vào cronjob lệnh cập nhật warmup sau mỗi 30 ngày.

    * * */30 * * npm i datuan-sitemap-warmer -g
    Ok ko bro?

    1. Nếu đúng thì cronjob bạn phải chạy câu lệnh warmup, ví dụ * * * * * warmup domaincuaban.com mới đúng.

      1. Ý là ngoài lệnh warmup cho website rồi thì cái cronjob kia dùng để check định kỳ hàng tháng và cập nhật phiên bản mới của warmup ấy.
        p/s: hóng bài mới
        Cheers,

        1. À mình hiểu ý bạn rồi, như vậy cũng được, không sao cả. Nhưng mình khuyên bạn sửa lại là 0 1 */30 * * thì sẽ hợp lý hơn, vì lệnh kia sẽ chạy mỗi phút mỗi giờ vào ngày 30.

  12. Hôm nay cài mới server và website dùng nginx cache, redis, Autoptimize plugin v.v.. mà website vẫn thấy ko mượt như mong muốn, nhớ lại warmup cài vào phát và warmup toàn bộ website

    Trời ơi, nó nhanh như đặt server ở Việt Nam luôn, trong quá trình warmup mình thấy app đã chủ động crawl cả các static files của website giúp cache trong Redis object cache rất tốt, hình như cái này mới so với phiên bản trước.

    Tuyệt vời bro! 😉

  13. Hi anh Tuấn,
    Cảm ơn anh vì công cụ rất tuyệt vời, em đang dùng WP với plugin Cache Enabler kèm theo warmup của anh. Em thấy Cache Enabler hỗ trợ gzip cache chỉ tạo ra 1 file .gz, và công cụ của anh thì chạy 3 lần cho 1 url (tạo ra 2 file trên server .html và .gz). Vậy có cách nào để tool chỉ chạy 1 lần trên 1 url sinh ra 1 file .gz hay không anh nhỉ?

    1. Rất vui mừng vì giúp được bạn. Mình đã publish version 1.2.1 hỗ trợ flag mới, --no-brotli. Bạn gắn vào cuối câu lệnh thử xem sao nha.

  14. Cái warmup này có lệnh để update khi Tuấn ra phiên bản mới ko nhỉ?

    1. Update anh có thể dùng lệnh y hệt như lúc cài đặt là được. Còn hiện tại là không kiểm tra tự động nha anh, nhưng có thể em sẽ thêm trong tương lai.

      1. Tuấn ơi làm Tutorial hướng dẫn reverse proxy cho Nginx đi. Cái này hay mà chưa có tut cụ thể trên mạng từ a-z.

        Thanks

        1. Dạ anh. Cái này hôm rồi em cũng mới làm cho client, để tuần sau note lại 😀

  15. Nội dung bài viết mình có thấy Tuấn nói đến việc sử dụng dịch vụ của Tuấn.
    Tuấn đang có dịch vụ gì vậy? Cho mình xin link để tham khảo được không, có nhu cầu mình sẽ sử dụng ạ

    1. Hi anh, chúc anh năm mới vui vẻ.

      Em không có danh sách job cố định, thường sẽ liên quan về server và fix một số lỗi hoặc nâng performance của website chạy WordPress. Thường em chủ động tìm job trong group WPVN trên Facebook. Nếu được thì mong anh ủng hộ nha.

  16. Hello
    Hôm nay warmup một website mới setup mà cứ báo lỗi hoài, thử gần chục lần ko được nên nghi nghi có khi nào do firewall của mình ko?
    Vào firewall kiểm tra thì đúng luôn, nó còn báo là bị DDoS :D, cho IP vào whitelist là warmup bình thường. Hôm trước ko warmup được chắc cũng do tên này.

    Gửi sếp cái hình https://prnt.sc/wlztnh

    Ah mà sao có site mình warmup thì màn hình nó hiển thị các url đang được warmup luôn, một số site thì ko hiển thị như vậy mà chỉ báo 3 dòng.

    Nó hiện ” No URLs need to warm up. You might want to using parameter –range or –all. Using command `warmup -h` for more information.” Nghĩa là sao vậy Tuấn? trường hợp site như thế nào nó báo là ko có URLs cần warm up?

    Thanks

    1. 1. Do firewall của bạn khá nhạy nên việc truy cập liên tục quá nhiều trong vòng vài phút hoặc vài giây sẽ bị block. Cách khắc phục duy nhất có lẽ là whitelist như bạn đã làm thôi.

      2. Do Sitemap Warmer này là mình viết lại và tối ưu hơn trước rất nhiều. Mặc định thì warmer chỉ preload những bài viết được cập nhật trong vòng 5 phút qua, như vậy sẽ tiết kiệm rất nhiều băng thông, CPU so với cách preload cũ là toàn bộ website. Nếu bạn cần preload tất cả các link thì thêm tham số -a vào nhé.

  17. Đúng rồi, thử lại vài lần thì được. Trong trường hợp có hàng chục, hàng trăm ngàn bài viết thì ko hiểu nó sẽ làm việc như thế nào? Có tốn CPU và RAM lắm ko? Các preload sẽ nằm ở RAM hả Tuấn?

    Vậy là cần nhiều RAM?

    Cuối tuần vui vẻ!

    1. Cái này tùy thuộc vào loại cache mà bạn dùng. Nếu plugin cache ra file HTML thì sẽ tốn dung lượng disk, nếu bạn dùng Redis/Memcache thì sẽ tốn RAM. Preload chắc chắn sẽ tốn CPU để xử lý trước rồi, mình limit mặc định 500ms giữa mỗi lần preload, bạn có thể giảm nếu server của bạn mạnh hoặc tăng thời gian nếu server của bạn yếu.

  18. Tình hình là cái phần mềm của Tuấn hơi bị kén sitemap, site dưới đây có sitemap ngon lành như thử các kiểu đều báo lỗi

    root@ns1:~# warmup https://www.webmasteroffers.com
    2021-01-10T08:20:25.322Z [INFO] main: ???? Getting sitemap from https://www.webmasteroffers.com/sitemap.xml
    2021-01-10T08:20:26.640Z [ERROR] main: ❌ Failed! Please make sure the sitemap URL is correct.
    root@ns1:~# warmup https://webmasteroffers.com
    2021-01-10T08:20:42.382Z [INFO] main: ???? Getting sitemap from https://webmasteroffers.com/sitemap.xml
    2021-01-10T08:20:43.517Z [ERROR] main: ❌ Failed! Please make sure the sitemap URL is correct.
    root@ns1:~# ^C
    root@ns1:~# warmup https://webmasteroffers.com/sitemap.xml
    2021-01-10T08:24:03.762Z [INFO] main: ???? Getting sitemap from https://webmasteroffers.com/sitemap.xml
    2021-01-10T08:24:05.163Z [ERROR] main: ❌ Failed! Please make sure the sitemap URL is correct.

    Dù có Cloudflare ON nhưng cảm nhận tốc độ vẫn rất là tốt, có lẽ object cache đã được preload

  19. Khi check warmup version ở server/domain https://***.com/ thì bị lỗi như bên dưới nhé.

    ~# warmup –version
    2021-01-10T03:53:26.384Z [INFO] main: ???? Getting sitemap from http://***/sitemap.xml
    /usr/local/lib/node_modules/datuan-sitemap-warmer/node_modules/sitemap-xml-parser/lib/sitemap.js:106
    resolve(body.toString());
    ^

    TypeError: Cannot read property ‘toString’ of undefined
    at Request._callback (/usr/local/lib/node_modules/datuan-sitemap-warmer/node_modules/sitemap-xml-parser/lib/sitemap.js:106:34)
    at self.callback (/usr/local/lib/node_modules/datuan-sitemap-warmer/node_modules/request/request.js:185:22)
    at Request.emit (events.js:198:13)
    at Request.onRequestError (/usr/local/lib/node_modules/datuan-sitemap-warmer/node_modules/request/request.js:877:8)
    at ClientRequest.emit (events.js:198:13)
    at Socket.socketErrorListener (_http_client.js:401:9)
    at Socket.emit (events.js:198:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)
    ====================
    Còn chạy warmup https://***.com/sitemap_index.xml cũng sẽ bị lỗi

    Lệnh là: warmup https://***.com thì mới ok nhé

    Mình test thấy ok, đang cài lên live woocommer site, có lỗi gì sẽ báo lại sếp nhé 🙂

    Preload được objects cũng ngon rồi.

    1. Thanks Hải nhiều, mình đã nhận được thông tin rồi, để debug tiếp vậy. Bạn cứ yên tâm là việc preload này không gây ảnh hưởng gì đến trang bạn cả, có chăng là có hiệu quả hay không thôi 😀

  20. Cái preload này hoạt động với Woocommerce như thế nào nhỉ Tuấn? Hiện mình dùng WordOps với fastcgi cache thì ko gặp vấn đề gì với các trang cart, checkout v.v…

    Ko biết preload này có cache/ làm lỗi các trang đó ko?

    Thanks

    1. Nếu là WooCommerce thì theo mình sẽ không có tác dụng nhiều trong cache full page mà chỉ có thể preload object cache hoặc preload cache của hình ảnh (nếu dùng CDN) thôi. Nếu được Hải gửi mình domain bị lỗi khi dùng warmer khi nãy qua email hi@duonganhtuan.com hoặc comment tại đây, mình sẽ che domain lại giúp nhé.

    1. Thank bạn nhiều. Vấn đề này mình có thấy rồi và có vẻ như là thư viện get sitemap của bên thứ 3 mà mình đang dùng gặp vấn đề với việc redirect và chỉ redirect một lần, từ HTTP sang HTTPs là ngưng, nếu tự động thêm 1 bước nữa từ sitemap.xml về sitemap_index.xml sẽ tốt hơn. Nếu bạn chỉ nhập domain, không nhập HTTP hay HTTPs thì mặc định sẽ là HTTPs. Để mình kiểm tra xem có cải tiến được chỗ này không. Cách tốt nhất là dùng đường dẫn đầy đủ, ví dụ https://datuan.dev/sitemap_index.xml là đẹp.

  21. Hôm nay mình cài thử thì cũng báo lỗi ko tìm thấy sitemap như bạn trên đã nói,

    2021-01-10T03:52:49.706Z [INFO] main: ???? Getting sitemap from http://mysite.com/sitemap.xml
    2021-01-10T03:52:51.276Z [ERROR] main: ❌ Failed! Please make sure the sitemap URL is correct.

    Mình vào từ trình duyệt thì mysite.com sẽ được redirect sang https://mysite.com/sitemap_index.xml

    Tuấn đã test với site có cài SSL chưa?

    thử lệnh warmup -version thì báo lỗi như dưới đây

    warmup –version
    2021-01-10T03:53:26.384Z [INFO] main: ???? Getting sitemap from http://xn--version-t16c/sitemap.xml
    /usr/local/lib/node_modules/datuan-sitemap-warmer/node_modules/sitemap-xml-parser/lib/sitemap.js:106
    resolve(body.toString());
    ^

    TypeError: Cannot read property ‘toString’ of undefined
    at Request._callback (/usr/local/lib/node_modules/datuan-sitemap-warmer/node_modules/sitemap-xml-parser/lib/sitemap.js:106:34)
    at self.callback (/usr/local/lib/node_modules/datuan-sitemap-warmer/node_modules/request/request.js:185:22)
    at Request.emit (events.js:198:13)
    at Request.onRequestError (/usr/local/lib/node_modules/datuan-sitemap-warmer/node_modules/request/request.js:877:8)
    at ClientRequest.emit (events.js:198:13)
    at Socket.socketErrorListener (_http_client.js:401:9)
    at Socket.emit (events.js:198:13)
    at emitErrorNT (internal/streams/destroy.js:91:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)

    Mình cài trên Ubuntu 20.04, đang chạy WordOps, php 7.4

    Hy vọng bạn sẽ hoàn thiện tools để nó thực sự hữu ích và hoạt động ổn định.

    Thanks

  22. Mình đã thử chạy lệnh warmup rubyvu.com hoặc cả https hay đuôi sitemap_index.xml nhưng kết quả vẫn trả về là: [ERROR] main: ❌ Failed! Please make sure the sitemap URL is correct.

    1. Mình test trên cả Windows và Mac đều có thể quét được sitemap website trên. Bạn thử chạy lệnh để update phiên bản mới nhất (1.0.9) xem sao:

      • Kiểm tra version bằng lệnh: warmup –version
      • Update lên phiên bản mới nhất: npm install -g datuan-sitemap-warmer