Tặng longjohns ...
Hôm qua tiêu đề của tôi với Ấn phẩm Packt, Lập trình phản ứng với JavaScript . Nó không thực sự là một tiêu đề Node.js-centric; các chương đầu được dự định để bao quát lý thuyết, và các chương nặng về mã này bao gồm thực hành. Bởi vì tôi không thực sự nghĩ rằng nó sẽ là thích hợp để thất bại trong việc cung cấp cho độc giả một máy chủ web, Node.js dường như cho đến nay lựa chọn rõ ràng. Vụ án đã được đóng lại trước khi nó được mở.
Tôi có thể đã đưa ra một cái nhìn rất màu hồng về trải nghiệm của tôi với Node.js. Thay vào đó tôi thành thật về điểm tốt và điểm xấu tôi gặp phải.
Hãy để tôi bao gồm một vài trích dẫn có liên quan ở đây:
Cảnh báo: Node.js và hệ sinh thái của nó rất nóng - đủ để đốt cháy bạn!
Khi tôi còn là trợ lý toán của giáo viên, một trong những gợi ý không rõ ràng mà tôi được nói là đừng nói với học sinh rằng có gì đó dễ dàng. Lý do có phần rõ ràng khi nhìn lại: nếu bạn nói với mọi người điều gì đó dễ dàng, một người không thấy giải pháp có thể sẽ cảm thấy ngu ngốc (thậm chí nhiều hơn), bởi vì họ không chỉ không biết cách giải quyết vấn đề, mà là vấn đề họ quá ngu ngốc để hiểu là một điều dễ dàng!
Có những vấn đề không làm phiền mọi người đến từ Python / Django, ngay lập tức tải lại nguồn nếu bạn thay đổi bất cứ điều gì. Với Node.js, hành vi mặc định là nếu bạn thực hiện một thay đổi, phiên bản cũ sẽ tiếp tục hoạt động cho đến hết thời gian hoặc cho đến khi bạn dừng và khởi động lại máy chủ theo cách thủ công. Hành vi không phù hợp này không chỉ gây khó chịu cho Pythonistas; nó cũng gây khó chịu cho người dùng Node.js bản địa, những người cung cấp nhiều cách giải quyết khác nhau. Câu hỏi StackOverflow Tự động tải lại các tệp trong Node.js, tại thời điểm viết bài này, có hơn 200 câu hỏi và 19 câu trả lời; một chỉnh sửa hướng người dùng đến một kịch bản bảo mẫu, người giám sát nút, với trang chủ tại http://tinyurl.com/reactjs-node-supervisor. Vấn đề này khiến người dùng mới có cơ hội tuyệt vời để cảm thấy ngu ngốc vì họ nghĩ rằng họ đã khắc phục vấn đề, nhưng hành vi lỗi cũ là hoàn toàn không thay đổi. Và thật dễ dàng để quên trả lại máy chủ; Tôi đã làm như vậy nhiều lần. Và thông điệp tôi muốn đưa ra là, No No, bạn không ngu ngốc vì hành vi này của Node.js cắn vào lưng bạn; chỉ là các nhà thiết kế của Node.js thấy không có lý do gì để cung cấp hành vi phù hợp ở đây. Hãy cố gắng đối phó với nó, có thể nhờ một chút trợ giúp từ người giám sát nút hoặc giải pháp khác, nhưng xin đừng bỏ đi cảm giác rằng bạn thật ngu ngốc. Bạn không phải là người có vấn đề; vấn đề nằm ở hành vi mặc định của Node.js.
Phần này, sau một số cuộc tranh luận, được để lại, chính xác là vì tôi không muốn tạo ấn tượng về điều đó Thật dễ dàng. Tôi đã cắt tay liên tục trong khi mọi thứ hoạt động và tôi không muốn giải quyết khó khăn và khiến bạn tin rằng việc Node.js và hệ sinh thái của nó hoạt động tốt là một vấn đề đơn giản và nếu điều đó không đơn giản với bạn , bạn không biết bạn đang làm gì. Nếu bạn không gặp phải những khó khăn đáng ghét khi sử dụng Node.js, điều đó thật tuyệt vời. Nếu bạn làm thế, tôi sẽ hy vọng rằng bạn không bỏ đi cảm giác, thì tôi thật ngu ngốc, chắc chắn có điều gì đó không ổn với tôi. Bạn sẽ không ngu ngốc nếu bạn gặp phải những bất ngờ khó chịu khi giao dịch với Node.js. Không phải bạn! Đó là Node.js và hệ sinh thái của nó!
Phụ lục, điều mà tôi không thực sự muốn sau khi tăng cao trong các chương cuối và kết luận, nói về những gì tôi có thể tìm thấy trong hệ sinh thái, và cung cấp một cách giải quyết cho chủ nghĩa văn chương đạo đức:
Một cơ sở dữ liệu khác có vẻ phù hợp hoàn hảo và có thể được hoàn lại là triển khai phía máy chủ của kho lưu trữ khóa-giá trị HTML5. Cách tiếp cận này có lợi thế chính của một API mà hầu hết các nhà phát triển front-end giỏi đều hiểu rõ. Đối với vấn đề đó, đó cũng là một API mà hầu hết các nhà phát triển front-end không giỏi đều hiểu rõ. Nhưng với gói lưu trữ nút cục bộ, trong khi truy cập cú pháp từ điển không được cung cấp (bạn muốn sử dụng localStorage.setItem (khóa, giá trị) hoặc localStorage.getItem (khóa), không phải localStorage [key]), ngữ nghĩa localStorage đầy đủ được triển khai , bao gồm cả dung lượng hạn ngạch 5 MB mặc định TẠI SAO? Các nhà phát triển JavaScript phía máy chủ có cần được bảo vệ khỏi chính họ không?
Đối với khả năng cơ sở dữ liệu phía máy khách, hạn ngạch 5 MB cho mỗi trang web thực sự là một lượng phòng thở rộng rãi và hữu ích để cho phép các nhà phát triển làm việc với nó. Bạn có thể đặt hạn mức thấp hơn nhiều và vẫn cung cấp cho các nhà phát triển một cải tiến không thể đo lường được bằng cách khập khiễng cùng với quản lý cookie. Giới hạn 5 MB không cho vay rất nhanh để xử lý phía máy khách Big Data, nhưng có một khoản trợ cấp thực sự khá hào phóng mà các nhà phát triển tài nguyên có thể sử dụng để làm rất nhiều việc. Tuy nhiên, mặt khác, 5 MB không phải là một phần đặc biệt lớn của hầu hết các đĩa được mua bất kỳ lúc nào gần đây, có nghĩa là nếu bạn và một trang web không đồng ý về việc sử dụng dung lượng đĩa hợp lý là gì, hoặc một số trang web chỉ đơn giản là không ổn định, thì nó không thực sự tốn kém bạn nhiều và bạn không gặp nguy hiểm với ổ cứng bị ngập, trừ khi ổ cứng của bạn đã quá đầy.
Tuy nhiên, có thể nhẹ nhàng chỉ ra rằng khi bạn là một mã viết cho máy chủ của mình, bạn không cần bất kỳ sự bảo vệ bổ sung nào để làm cho cơ sở dữ liệu của bạn có kích thước lớn hơn 5 MB có thể chấp nhận được. Hầu hết các nhà phát triển sẽ không cần và cũng không muốn các công cụ hoạt động như một người giữ trẻ và bảo vệ họ khỏi việc lưu trữ hơn 5 MB dữ liệu phía máy chủ. Và hạn ngạch 5 MB là một hành động cân bằng vàng ở phía máy khách thì hơi ngớ ngẩn trên máy chủ Node.js. (Và, đối với cơ sở dữ liệu cho nhiều người dùng như được nêu trong Phụ lục này, có thể chỉ ra rằng, hơi đau, đó không phải là 5 MB cho mỗi tài khoản người dùng trừ khi bạn tạo một cơ sở dữ liệu riêng trên đĩa cho mỗi tài khoản người dùng; đó là 5 MB được chia sẻ giữa tất cả các tài khoản người dùng với nhau. Điều đó có thể nhận được gây đau đớnnếu bạn bị virus!) Tài liệu nói rằng hạn ngạch có thể tùy chỉnh, nhưng một email một tuần trước cho nhà phát triển hỏi cách thay đổi hạn ngạch không được trả lời, cũng như câu hỏi StackOverflow hỏi tương tự. Câu trả lời duy nhất tôi có thể tìm thấy là trong nguồn Github CoffeeScript, nơi nó được liệt kê dưới dạng đối số nguyên thứ hai tùy chọn cho hàm tạo. Như vậy là đủ dễ dàng và bạn có thể chỉ định hạn ngạch bằng với kích thước đĩa hoặc phân vùng. Nhưng bên cạnh việc chuyển một tính năng không có ý nghĩa, tác giả của công cụ đã hoàn toàn không tuân theo quy ước diễn giải rất chuẩn là 0 không giới hạn đối với một biến hoặc hàm trong đó một số nguyên là chỉ định giới hạn tối đa cho một số sử dụng tài nguyên. Điều tốt nhất để làm với sự không phù hợp này có lẽ là xác định rằng hạn ngạch là Vô cực:
if (typeof localStorage === 'undefined' || localStorage === null)
{
var LocalStorage = require('node-localstorage').LocalStorage;
localStorage = new LocalStorage(__dirname + '/localStorage',
Infinity);
}
Trao đổi hai bình luận theo thứ tự:
Mọi người không cần phải tự mình sử dụng JavaScript một cách toàn diện và một phần của JavaScript được tạo ra bằng ngôn ngữ đáng kính là một câu nói thực tế của Douglas Crockford, Ngôn ngữ JavaScript có một số phần thực sự tốt và một số phần thực sự xấu. Dưới đây là những phần tốt. Chỉ cần quên rằng có bất cứ điều gì khác là có. Có lẽ hệ sinh thái Node.js nóng bỏng sẽ phát triển chính Douglas Douglas Crockford, người sẽ nói, hệ sinh thái Node.js là một miền Tây hoang dã mã hóa, nhưng có một số đá quý thực sự được tìm thấy. Đây là một lộ trình. Dưới đây là những lĩnh vực cần tránh với hầu hết mọi chi phí. Dưới đây là các khu vực có một số khoản thanh toán phong phú nhất được tìm thấy trong bất kỳ ngôn ngữ hoặc môi trường nào.
Có lẽ ai đó khác có thể coi những từ đó là một thách thức, và đi theo sự dẫn dắt của Crockford và viết lên những phần hay và một phần hay hơn cho các Node.js và hệ sinh thái của nó. Tôi sẽ mua một bản sao!
Và với mức độ nhiệt tình và thời gian làm việc tuyệt đối cho tất cả các dự án, nó có thể được bảo hành trong một hoặc hai hoặc ba năm để giảm bớt bất kỳ nhận xét nào về một hệ sinh thái chưa trưởng thành được thực hiện tại thời điểm viết bài này. Nó thực sự có thể có ý nghĩa trong năm năm để nói, hệ sinh thái Node.js 2015 có một số mỏ. Hệ sinh thái Node.js 2020 có nhiều thiên đường.