Skip to main content

Phỏng vấn với một nhà phát triển web tại Pornhub

pornhub-hiring-web-developer

Dù lập trường của bạn về nội dung khiêu d.â.m là gì đi nữa thì tôi tin là chúng ta không thể phủ nhận tác động to lớn của ngành công nghiệp này đã thúc đẩy nền tảng web tiến về phía trước. Từ việc đẩy các giới hạn video của trình duyệt đến việc chèn Quảng Cáo qua WebSocket để trình chặn Quảng Cáo không thể nhận diện. Là một nhà phát triển thì bạn phải thật khéo léo để thích nghi với những biến đổi của môi trường web.

Gần đây tôi đã may mắn được phỏng vấn một nhà phát triển web tại trang web dành cho người lớn phổ biến nhất: P.***.h.u.b. Hãy cùng tìm hiểu thêm về công nghệ, cách cải thiện Web API và chúng hoạt động trên các trang web người lớn như thế nào nhé!

Lưu ý: Ngành công nghiệp người lớn rất cạnh tranh nên có một vài câu hỏi mà họ không thể trả lời.

Các trang web người lớn hẳn là sẽ hiển thị rất nhiều nội dung đồ họa. Trong quá trình phát triển, bạn có phải sử dụng nhiều hình ảnh và video giữ chỗ không? Từ lúc phát triển nội dung và trải nghiệm người dùng cho đến sản phẩm cuối cùng mất bao lâu?

Chúng tôi không thực sự dùng placeholder khi đang phát triển các trang web! Điều quan trọng nhất cuối cùng vẫn là code và các tính năng, giao diện là thứ chúng tôi đã rất quen thuộc vào lúc này. Ban đầu chắc chắn là có một chút khó khăn, nhưng chúng tôi làm quen với nó khá nhanh chóng.

Khi nói đến stream webcam và các script Quảng Cáo của bên thứ ba, làm thế nào để bạn giả lập các tài nguyên đó trong quá trình phát triển trang web và tính năng?

Để phát triển, trình phát được chia nhỏ thành hai thành phần. Trình phát cơ bản sẽ thực hiện các chức năng cốt lõi và kích hoạt các sự kiện. Để tích hợp trên các trang web, chúng tôi muốn các script và quảng cáo của bên thứ ba chạy để có thể tìm thấy các vấn đề trong quá trình phát triển càng sớm càng tốt. Đối với các trường hợp đặc biệt, chúng tôi sẽ làm việc với các nhà quảng cáo để cho phép chúng tôi kích hoạt thủ công các sự kiện mà thường chúng sẽ chạy ngẫu nhiên.

Một trang trung bình có thể có ít nhất một video, quảng cáo động, một vài ảnh xem trước của thành viên trình diễn trước webcam và hình thu nhỏ của các video khác. Làm thế nào để bạn đo hiệu suất trang và giữ trang càng hiệu quả càng tốt? Có thủ thuật nào bạn có thể chia sẻ không?

Chúng tôi sử dụng một vài hệ thống đo lường.

  • Trình phát báo cáo số liệu lại cho chúng tôi về hiệu suất phát lại video và cách sử dụng chung.
  • Một hệ thống RUM của bên thứ ba cho hiệu suất chung của trang web.
  • Chúng tôi sử dụng WebpageTest chủ yếu để xem những gì có thể xảy ra tại một thời điểm nhất định. Nó cũng cho phép chúng tôi xem biểu đồ “waterfall” từ các địa điểm và nhà cung cấp khác nhau.

Giả sử tính năng quan trọng và phức tạp nhất ở front-end là trình phát video. Từ việc kết hợp quảng cáo trước video, đánh dấu các khoảnh khắc nổi bật của video, thay đổi tốc độ video và các tính năng khác, làm thế nào để bạn duy trì hiệu suất, chức năng và tính ổn định của nó?

Chúng tôi có một đội ngũ riêng biệt làm việc nghiêm túc với trình phát video, ưu tiên hàng đầu của họ là liên tục theo dõi hiệu suất và hiệu quả của trình phát. Để làm được điều này, chúng tôi sử dụng khá nhiều thứ có sẵn: các công cụ đánh giá hiệu suất của trình duyệt, WebpageTest, các số liệu,… Độ ổn định và chất lượng được đảm bảo bởi vòng QA chặt chẽ cho mọi cập nhật mà chúng tôi thực hiện.

Có bao nhiêu người trong nhóm video riêng biệt? Và bao nhiêu nhà phát triển front-end trong nhóm?

Tôi có thể nói rằng với quy mô sản phẩm, kích thước của nhóm là trung bình.

Trong thời gian làm việc trên các trang web người lớn, bạn đã thấy sự thay đổi front-end diễn ra như nào? Web API mới nào đã giúp cuộc sống của bạn dễ dàng hơn?

Tôi chắc chắn đã thấy rất nhiều cải tiến trên mọi khía cạnh của thế giới front-end:

  • Từ CSS đơn thuần đến hiện tại sử dụng LESS và Mixin, đến một hệ thống Grid linh hoạt với Media-query và các thẻ hình ảnh để phù hợp với các độ phân giải và kích thước màn hình khác nhau.
  • jQuery và jQueryUI đang dần biến mất, vì vậy chúng ta sẽ quay trở lại lập trình hướng đối tượng hiệu quả hơn trong Vanilla JS. Các framework cũng rất thú vị trong một số trường hợp.
  • Chúng tôi thích API IntersectionObserver mới, rất hữu ích cho việc tải hình ảnh hiệu quả hơn.
  • Chúng tôi cũng bắt đầu chơi với API Picture-in-Picture để có video nổi trên một số trang, chủ yếu là để nhận phản hồi của người dùng về ý tưởng sử dụng tính năng này.

Sắp tới có API Web nào bạn yêu thích đã thay đổi, cải thiện hoặc thậm chí được tạo ra không?

Một số API mà chúng tôi muốn thay đổi hoặc cải thiện: Beacon, WebRTC, Service Worker và Fetch.

  • Beacon: iOS có một số vấn đề khiến nó không hoạt động với sự kiện pageHide.
  • Fetch: Không có tiến trình tải xuống và không cung cấp cách nào để chặn các truy vấn.
  • WebRTC: Các lớp broadcast bị giới hạn nếu độ phân giải không đủ lớn.
  • Service Worker: Thực hiện các lệnh gọi đến navigator.serviceWorker.register không bị chặn bởi bất kỳ trình xử lý sự kiện nào của Fetch.

WebVR đã được cải thiện trong vài năm qua – nó hữu ích như thế nào trong tình trạng hiện tại và các trang web người lớn nỗ lực tới mức nào cho việc hỗ trợ nội dung VR?

Chúng tôi đang nghiên cứu WebVR và cách thích ứng tốt nhất với nó. Và là nền tảng phân phối lớn nhất, chúng tôi cần hỗ trợ các nhà sáng tạo và người dùng dù họ muốn trải nghiệm nội dung của chúng tôi như nào. Nhưng chúng tôi vẫn đang khám phá nội dung và nền tảng nào nên triển khai bằng công nghệ mới này.

Chúng tôi là nền tảng lớn đầu tiên hỗ trợ VR, thị giác máy tính và trình diễn ảo và sẽ tiếp tục thúc đẩy các công nghệ mới.

Với rất nhiều loại phương tiện và nội dung khác nhau trên mỗi trang, đâu là những cân nhắc lớn nhất khi nói đến máy tính để bàn so với thiết bị di động, nếu có?

Chủ yếu là chức năng bị hạn chế bởi hệ điều hành và các loại trình duyệt. iOS và Android là ví dụ hoàn hảo khi nói đến một bộ tính năng và quyền truy cập hoàn toàn khác biệt.

Ví dụ, một số thiết bị di động iOS không cho phép chúng tôi có trình phát video tùy chỉnh trong khi đang ở chế độ Toàn màn hình, chúng buộc trang web sử dụng trình phát QuickTime gốc. Điều đó phải được xem xét khi chúng tôi phát triển ý tưởng mới. Mặt khác, Android cho phép chúng tôi kiểm soát hoàn toàn và chúng tôi có thể đẩy các tính năng của mình sang chế độ Toàn màn hình.

Hỗ trợ trình duyệt tối thiểu cho các trang web người lớn là gì? Internet Explorer đã bị loại bỏ hay chưa?

Chúng tôi đã hỗ trợ IE trong một thời gian rất dài nhưng gần đây đã ngừng hỗ trợ cho mọi phiên bản cũ hơn IE 11. Với điều đó, chúng tôi cũng đã ngừng làm việc với Flash cho trình phát video. Chúng tôi đang tập trung chủ yếu vào Chrome, Firefox và Safari.

Nhìn rộng hơn, bạn có thể chia sẻ một chút về stack dành cho trang web người lớn điển hình không? Máy chủ và/hoặc front-end? Những thư viện nào bạn đang sử dụng?

Hầu hết các trang web của chúng tôi đang sử dụng những thứ sau làm cơ sở:

  • Nginx
  • PHP
  • MySQL
  • Memcached và/hoặc Redis

Các công nghệ khác như Varnish, ElasticSearch, NodeJS, Go, Vertica được sử dụng khi thích hợp.

Đối với front-end, chúng tôi chạy phần lớn là vanilla JavaScript (JS thuần), chúng tôi đang loại bỏ dần jQuery và bắt đầu chơi với các framework, chủ yếu là VueJS.

Từ góc nhìn bên ngoài, các trang web người lớn thường có vẻ rất giống nhau: rất nhiều hình thu nhỏ video, nội dung video tổng hợp, trình diễn webcam, quảng cáo. Là một người trong ngành, theo bạn các tính năng khác biệt làm cho trang web người lớn trở nên độc đáo là gì?

Chúng tôi làm việc chăm chỉ để cung cấp cho mỗi thương hiệu một số tính năng độc đáo ở các cấp độ khác nhau; thư viện nội dung, UX và các bộ tính năng cùng với rất nhiều thuật toán khác nhau.

Trước khi nộp đơn phỏng vấn cho vị trí hiện tại của bạn, bạn đã suy nghĩ gì về chuyện làm việc trên các trang web người lớn? Bạn có do dự gì không? Nếu có, nỗi sợ hãi của bạn như thế nào để chùn bước?

Chuyện này chưa bao giờ thực sự làm phiền tôi, sau cùng thì thử thách này rất hấp dẫn. Nghĩ về việc sẽ có hàng triệu người tương tác với các tính năng mà tôi đã tạo nên thực sự là một nguồn động lực. Và điều đó đã được chứng minh nhanh chóng, khi lần đầu tiên một tính năng gì đó mà tôi tham gia thực hiện được phát hành, tôi đã rất tự hào và nói với tất cả bạn bè của mình hãy xem nó! Thực tế, khiêu d.â.m sẽ không bao giờ lụi tàn cũng là điều khiến tôi yên tâm về tính ổn định của công việc này!

Chia sẻ rằng bạn làm việc trên các trang web người lớn có thể không giống như là làm việc tại một công ty web thông thường. Có một sự kỳ thị nào khi bạn nói với bạn bè, gia đình và người quen rằng bạn làm việc trên các trang web người lớn không? Có bất kỳ do dự nào trong việc nói với mọi người về công việc của bạn không?

Tôi rất tự hào khi làm việc trên các sản phẩm này, những người gần gũi với tôi đều biết và bị cuốn hút bởi nó. Nó luôn là một nguồn tuyệt vời của cuộc trò chuyện và nó thực sự thú vị.

Bạn đã làm việc tại các cơ quan bên ngoài ngành công nghiệp người lớn chưa? Có sự khác biệt nào về bầu không khí khi làm việc trên các trang web người lớn không?

Không khí ở đây rất thoải mái và thân thiện. Tôi không nhận thấy bất kỳ sự khác biệt lớn nào liên quan đến văn hóa làm việc tại các cơ quan khác, ngoại trừ việc thực tế là nó lớn hơn nhiều so với bất cứ nơi nào tôi đã làm việc trước đây.

Là một nhà phát triển front-end, bạn hợp tác chặt chẽ nhất với nhóm nào? Các phương pháp giao tiếp hằng ngày phổ biển nhất là gì?

Chúng tôi làm việc cùng với các nhà phát triển backend, QA tester và Product Manager – hầu hết thời gian chúng tôi đơn giản chỉ là đi đến bàn làm việc của nhau và nói chuyện. Nếu không thì phổ biến là qua chat (MS Teams), sau đó đến email.

Cuối cùng, còn điều gì bạn muốn chia sẻ với tư cách là nhà phát triển front-end đang làm việc trên các trang web người lớn không?

Sẽ thực sự thú vị khi bạn là một phần trong việc tạo ra cách người dùng trải nghiệm một sản phẩm được sử dụng rộng rãi như vậy. Chúng tôi thường đi đầu trong các xu hướng và những thay đổi lớn trong cộng nghệ ngay khi chúng vừa ra mắt, điều này khiến công việc luôn vui vẻ và đầy thách thức.

Kết thúc cuộc phỏng vấn.

(Bài gốc từ davidwalsh.name. Dịch bởi Juno_okyo)

Share
j2team-community