Sails.js vs Meteor - Ưu điểm của cả hai là gì? [đóng cửa]


81

Tôi đã đọc rất nhiều về Nodejs và các khung công tác của nó và gần đây đã hoàn thành giao diện người dùng javascript đầy đủ đầu tiên (sử dụng Angularjs).

Tôi đã quyết định rằng dự án thú cưng tiếp theo của mình sẽ là một cuộc phiêu lưu của Nodejs bằng cách sử dụng một trong hai khuôn khổ sau:

Tôi đã đọc về cả hai, nhưng vẫn không thể hiểu được sự khác biệt của chúng và tại sao tôi nên chọn sử dụng cái này hơn cái kia. Vì vậy, hãy đội chiếc mũ nhân viên bán hàng giỏi nhất của bạn, chọn một khuôn khổ và bán nó cho tôi.

Một số tính năng tôi yêu cầu cho dự án thú cưng của mình là:

  • Tỷ số trực tuyến
  • Chủ đề giống như reddit, thời gian thực
  • Ấn bản trang giống Wikipedia
  • Người dùng / Vai trò

1
Kiểm tra liên kết này: vschart.com/compare/meteor-web-framework/vs/sails-js . Nó có thể giúp bạn !!
tuchi35

Câu trả lời:


137

Tôi không thể nói về Meteor, nhưng tôi có thể giúp cung cấp một chút thông tin cơ bản về Sails vì tôi đã tạo ra nó.

tldr; Sails không phải là thuốc chữa bách bệnh cho tất cả các vấn đề của web - nhưng tôi tin rằng Node.js là như vậy. Mục tiêu của Sails là cung cấp một khuôn khổ thực tế để phát triển các ứng dụng hoàn chỉnh, có thể mở rộng, khởi động và thân thiện với doanh nghiệp được xây dựng trên node.js. Tôi bắt đầu Balderdash với câu hỏi "Chúng ta có thể sử dụng Node.js cho mọi thứ không?". Những cánh buồm là câu trả lời.


Từ tài liệu mới của chúng tôi :

Tất nhiên, Sails là một web framework. Nhưng hãy lùi lại một bước. Điều đó nghĩa là gì? Đôi khi, khi chúng tôi đề cập đến "web", chúng tôi muốn nói đến "web giao diện người dùng". Chúng tôi nghĩ về các khái niệm như tiêu chuẩn web, HTML 5 hoặc CSS 3; và các khung công tác như Backbone, hoặc Angular, hoặc jQuery. Sails không phải là "loại" của một khuôn khổ web. Sails hoạt động tốt với Angular và Backbone, nhưng bạn sẽ không bao giờ sử dụng Sails thay vì các thư viện đó.

Mặt khác, đôi khi chúng ta nói về "web framework", chúng ta muốn nói đến "web back-end." Điều này gợi lên các khái niệm như REST, hoặc HTTP, hoặc WebSockets; và được xây dựng trên các công nghệ như Java, Ruby, hoặc Node.js. Khung "back-end web" giúp bạn thực hiện những việc như xây dựng API, tương tác với cơ sở dữ liệu, phân phát tệp HTML và xử lý hàng trăm nghìn người dùng đồng thời. Sails là "loại" khuôn khổ web.

Vài năm trước, tôi đã cam kết sử dụng Node.js cho mọi thứ - đó là tình yêu sét đánh . Tôi đã xây dựng Sails trên ExpressSocket.io vì chúng là (và vẫn là) các mô-đun Node được thiết lập tốt nhất cho các trường hợp sử dụng tương ứng của chúng. Mã xử lý yêu cầu trong Sails tương thích với Express, với lợi thế bổ sung là hỗ trợ ngầm cho Socket.io.

Sails được thiết kế để tương thích với bất kỳ chiến lược nào bạn có để xây dựng (các) giao diện người dùng của mình trong Angular, Backbone, iOS / ObjC, Android / Java hoặc thậm chí chỉ cung cấp một API thô để sử dụng bởi một dịch vụ web khác hoặc của bạn cộng đồng nhà phát triển. Nếu bạn kết thúc việc thay đổi cách tiếp cận của mình (ví dụ: chuyển từ Backbone sang Angular) hoặc xây dựng giao diện người dùng mới hoàn toàn (ví dụ: xây dựng ứng dụng gốc Windows Phone), ứng dụng Sails của bạn sẽ vẫn hoạt động. Như bạn có thể đã biết, một số người gọi cách tiếp cận này là Kiến trúc hướng dịch vụ, hoặc SOA ( Joe McCann có một bài rất hay về chủ đề này.)

Cùng dòng, Sails duy trì các quy ước quen thuộc khác để xây dựng máy chủ web - cấu trúc MVC tiêu chuẩn, khả năng tạo API sạch và các mô-đun cốt lõi có thể mở, có thể cấu hình, có thể mở rộng và thậm chí có thể thay thế. Điều này có nghĩa là Sails có thể được tùy chỉnh để phù hợp với nhu cầu của người dùng, ở mức thấp nhất là cần thiết.

Vào năm 2013, khuôn khổ đã trải qua một số tăng trưởng vượt bậc về mức độ phổ biến và hoạt động kinh doanh tư vấn của chúng tôi đã phát triển. Phần còn lại của những người bảo trì cốt lõi và tôi đã mở rộng trọng tâm của mình vào việc phát triển phần phụ trợ nhanh chóng và đơn giản nhất có thể. Các khía cạnh liên quan của Sails như hook (plugin), kiểm tra và tài liệu đều đã trải qua một chặng đường dài trong năm qua nhờ nỗ lực của cả nhóm cốt lõi của chúng tôi và cộng đồng Sails (ngày càng mở rộng) nói chung. Có rất nhiều mục lộ trình mà chúng tôi vẫn đang thực hiện, nhưng tôi tin rằng Sails là lựa chọn tốt nhất hiện có để phát triển MVC ổn định, có thể bảo trì trên Node ngày nay. Phần còn lại của nhóm và tôi cam kết tiếp tục duy trì và phát triển tính năng của nó, và vì chúng tôi sử dụng nó cho tất cả các dự án khách hàng của mình nên nó sẽ không đi đến đâu.

Tôi cam kết đưa Sails trở thành web framework tốt nhất hiện có, nhưng không bao giờ làm Node.js phải trả giá. Đội ngũ cốt lõi và tôi không ngừng cống hiến cho việc nâng cao hệ sinh thái Node và điều đó có nghĩa là nắm lấy NPM, tận dụng các công nghệ Node hiện có và các phương pháp hay nhất, v.v. Không chỉ vì điều đó có ý nghĩa hơn, mà vì chúng tôi là nhà phát triển Node.js. Động lực cho tất cả những nỗ lực của chúng tôi là làm cho Node dễ tiếp cận hơn chứ không phải để thay thế nó. Vì vậy, nếu, trong một vũ trụ song song kỳ lạ nào đó, tôi được Faustian lựa chọn giữa việc chuyển đổi Sails sang một số ngôn ngữ khác, hoặc hoàn toàn từ bỏ Sails nhưng vẫn có thể sử dụng Node, tôi sẽ chọn thứ hai.


Tài nguyên bổ sung:

Câu hỏi thường gặp | Cánh buồm 101 | Bản gốc | Hướng dẫn đóng góp | Stackoverflow

Nhóm Google | Lộ trình | IRC: #sailsjs trên Freenode | Trạng thái xây dựng


2
Ran vào một viễn cảnh tốt về câu hỏi này ở đây (câu trả lời đầu tiên): linkedin.com/groups/...
mikermcneil


@AaronShafovaloff cảm ơn vì sự quan tâm của bạn - đây là liên kết cập nhật: sailsjs.org/get-started
mikermcneil

30

Tôi đã xây dựng một vài dự án với Meteor và chưa làm việc với Sails. Vì vậy, ý kiến ​​của tôi chắc chắn sẽ có thành kiến, hy vọng rằng nó hữu ích.

Xây dựng giao diện người dùng

Meteor cung cấp khuôn khổ giao diện người dùng của riêng mình có tên là Blaze-sẽ được đưa vào bản phát hành 0.8 sắp tới. Meteor quản lý dữ liệu liên kết từ bộ sưu tập của bạn với chế độ xem của bạn. Bởi vì điều này, bạn không phải lo lắng về việc nói cho quan điểm của bạn cập nhật, họ chỉ làm điều đó.

Mặt khác, Sails chỉ cung cấp một khung phụ trợ và bạn sẽ phải mang theo khung làm việc phía trước của riêng mình.

Không giống như hầu hết các framework Node.js, Meteor là đồng bộ

Meteor chạy theo vòng lặp và nếu bạn muốn sử dụng các gói Node.js, bạn sẽ phải thực hiện thêm một số thao tác để đảm bảo chúng hoạt động bình thường trong Meteor.

Sails dường như là một framework MVC Node.js đơn giản nên không có gì quá ngạc nhiên khi bạn xem xét nó.

Bạn nên sử dụng MongoDB với Meteor

Có, bạn có thể sử dụng các cơ sở dữ liệu khác với Meteor nhưng chúng không có hỗ trợ gần giống như MongoDB. Trong khi với Sails, có vẻ như chúng có ORM cho một vài cơ sở dữ liệu.

Hiệu suất

Đối với các ứng dụng quy mô lớn, Meteor có thể hoạt động không tốt . Có rất nhiều việc đang được thực hiện để giải quyết vấn đề này và vào cuối năm 2014, chúng tôi có thể mong đợi sẽ có các giải pháp mở rộng quy mô cho Meteor.

Ổn định

Meteor vẫn còn rất mới và chưa đạt 1.0. Bạn nên mong đợi một số thay đổi sẽ được thực hiện trong vài bản phát hành tiếp theo sẽ phá vỡ khả năng tương thích ngược. Nếu bạn đang bắt đầu với nó càng sớm càng tốt thì bạn có thể muốn xem xét sử dụng nhánh 0.8-rc0. Điều đó đang được nói, một số tính năng trong hệ thống thực sự tuyệt vời và sẽ làm cho phiên bản 1.0 trở nên rất hấp dẫn.

Suy nghĩ cuối cùng?

Tôi thích Meteor vì tính đặc trưng của nó. Bạn sẽ phải học cách làm việc của Meteor nhưng một khi bạn bắt đầu thực hiện nó, bạn sẽ cảm thấy như mình đã uống hết chất trợ giúp. Bởi vì cách dữ liệu được ràng buộc để xem các đường giữa máy chủ và máy khách không xa nhau. Meteor đại diện cho một sự thay đổi mô hình trong kiến ​​trúc ứng dụng và nếu bạn chưa thử, tôi sẽ giới thiệu nó.

Tái bút: Kiểm tra lộ trình để biết những gì sắp tới.


5
Tôi khuyên bạn nên sửa đổi tuyên bố "sao băng là đồng bộ" vì nó có thể gây ấn tượng sai cho những người không quen thuộc với sợi nodejs. Meteor chạy trên Node.js nên bạn vẫn nhận được các lợi ích theo hướng sự kiện, không chặn của nó. Meteor tích hợp rõ ràng các Sợi nút để mã phía máy chủ có thể được viết theo mô hình thực thi tuyến tính thay vì chia nhỏ mọi thứ thành các lệnh gọi lại truyền thống. Đây có lẽ là tài liệu tham khảo tốt nhất liên quan đến việc sử dụng npmcác gói với sao băng: meteorhacks.com/complete-npm-integration-for-meteor.html
alanning

Cảm ơn Alanning, tôi sẽ kết hợp phản hồi của bạn vào phản hồi này!
MSaforrian

8
Có thể một điều quan trọng là sails.js chỉ dành cho phần phụ trợ trong khi meteor cung cấp toàn bộ khung javascript giao diện người dùng để dễ dàng làm việc với phần phụ trợ.
Michael

Cảm ơn bạn đã đưa ra điều đó, @Michael. Sails.js và Meteor không thực sự cạnh tranh - Sails.js là một khung phụ trợ cho Node.js mà bạn có thể sử dụng thay cho một thứ gì đó như Django, Rails, Express, v.v. trong khi Meteor là một cách nghĩ mới về cách xây dựng các ứng dụng phản ứng trên xuống dưới - mà tôi nghĩ là thực sự mát btw :)
mikermcneil

Bạn có muốn cập nhật nhận xét của mình vì đã hơn 4 năm kể từ khi nhận xét của bạn? Tôi chắc chắn muốn có ý kiến ​​về trò chơi mới thay đổi sao băng 1.7 ..
Shyam

19

Tôi chỉ có thể đưa ra ý kiến ​​về những cánh buồm. Tôi là một nhà phát triển Javascript cực kỳ giàu kinh nghiệm và đã xây dựng các ứng dụng set top box nhúng được xây dựng trên Javascript từ những năm 90.

Mọi thứ thực sự hiệu quả - Bắt đầu thật tuyệt và tôi cảm thấy rất được hỗ trợ bởi các tài liệu đã xuất bản - Đường cong học tập rất ngắn và có một cộng đồng lành mạnh đằng sau những cánh buồm - Sau khi học ban đầu, rất dễ dàng để sáng tạo nhanh

Những thứ có thể được cải thiện - Cấu trúc dữ liệu phức tạp khó triển khai - Tích hợp Passport.js rất khó khăn vì không có tài liệu tham khảo rõ ràng

Đề xuất - Ponzi coder có một hướng dẫn tuyệt vời và nó thực sự giúp tôi bắt đầu https://www.youtube.com/user/ponzicoder - Biết thêm về express và waterline sẽ hữu ích khi bạn thử các thử thách dữ liệu phức tạp hơn

Nhìn chung, tôi muốn giới thiệu những cánh buồm.


1
Xin chào simon, bạn có thể vui lòng chia sẻ cách bạn quản lý để tích hợp hộ chiếu với buồm không? Tôi đang mắc kẹt trong cùng một vấn đề. Bạn đã viết blog ở đâu đó hoặc có tài liệu tham khảo nào chưa?
Mitermayer Reis

2
Xin chào Mitermayer, xin lỗi nhưng blog của tôi đã chết vì bị bỏ bê từ lâu. Điều khiến hộ chiếu hoạt động với tôi là nhận ra rằng nếu tôi làm hai điều thì nó có vẻ ổn. 1 tên trường mặc định ở khắp mọi nơi (email và mật khẩu) 2 vượt qua các đối tượng req để gọi lại passport.use('local-login', new LocalStrategy({ usernameField : 'email', passwordField : 'password', passReqToCallback : true // allows us to pass in the req from our route (lets us check if a user is logged in or not) },
simondelliott

1
Ồ, cảm ơn bạn. Tôi đã gặp rắc rối với chiến lược địa phương trong nhiều ngày. Đây xứng đáng của bài stack overflow nó
light24bulbs

1
Việc tích hợp Passport.js thực sự cần nhiều tài liệu hơn, không thể nhấn mạnh nó đủ. Cụ thể đối với trường hợp sử dụng API REST khi không có kết xuất máy chủ nào diễn ra (ví dụ: đối với máy khách JS góc cạnh), kết hợp đăng nhập facebook / google và xác thực cục bộ.
Alon Amir

1
Upvote Passport.js khó tích hợp và tài liệu kém
pim

9

Tôi hiện đang sử dụng Meteor và chưa sử dụng Sails.js.

Meteor cực kỳ dễ chịu khi làm việc và tôi nghĩ nó sẽ là một lựa chọn tuyệt vời cho các ứng dụng web thời gian thực. Về người dùng / vai trò, bạn có thể xem gói Tài khoản tích hợp và cũng có thể tìm kiếm trong Khí quyển cho các gói vai trò / quyền do cộng đồng đóng góp.

Cuối cùng, tôi khuyên bạn nên thử một dự án nhỏ với cả hai công nghệ và xem bạn thích cái nào hơn.


Bạn có biết liệu Sail.js có bất kỳ biến thể nào của Bù độ trễ ở phía máy khách tương tự như bù độ trễ của Meteor ở cấp độ mô hình không?
imslavko

Bạn không biết về Sail.js nhưng có thể bạn có thể tự bao gồm nó bằng cách sử dụng lib sharejs.org . Ít nhất đó có vẻ là mục tiêu của lib.
alanning

1
@alanning - không, sharejs không bù độ trễ. Sharejs thực hiện chuyển đổi hoạt động. Bù đắp độ trễ là khi Meteor cập nhật minimongo cục bộ của nó và giả định rằng cập nhật từ xa sẽ thành công, cho phép người dùng tiếp tục.
gomad

1
@gomad, bạn nói đúng rằng sharejs không cung cấp khả năng bù đắp độ trễ. Tôi không nói rằng nó đã làm. Đúng hơn, tôi đã nói, "bạn có thể tự bao gồm nó bằng cách sử dụng sharejs.org". LC được xây dựng trên OT.
alanning

Chỉ là một ghi chú được thêm vào. Tôi nghĩ sao băng rất dễ sử dụng. Có một chút đường cong học tập, nhưng ngoài ra, khung này rất giống với cách bạn có thể mô tả đường ray thành ruby. Khả năng duy nhất hiện tại của tôi là vào lúc này, nó vẫn phụ thuộc vào nút 0.10.40 nếu bạn muốn tự lưu trữ. Bởi vì sao băng có một cơ sở khá lớn, tôi tin rằng trò chơi đuổi kịp với nút là một chút không công bằng cho sao băng.
Jimmy MG Lim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.