Tại sao cơ sở dữ liệu Web SQL không dùng nữa?


86

Tôi đang làm một ứng dụng Android lai.

Lúc đầu tôi quyết định sử dụng localStorage, sau khi trải qua 2 ngày, tôi nhận ra rằng nó rất lạ và vì vậy đã bỏ nó.

Sau đó, tôi đã chọn indexedDB, sau khi dành cả ngày hôm nay và thực sự nhận được đầu ra trong Google Chrome, nó không chạy trong WebView của ứng dụng Android.

Và tôi chưa bao giờ sử dụng cơ sở dữ liệu Web SQL vì nó không được dùng nữa. Nhưng dù sao, tôi đã nhận thấy rằng PhoneGap vẫn sử dụng Web SQL và các trình duyệt của Android hỗ trợ nó.

Tại sao Web SQL không được dùng nữa ngay từ đầu? Và nó có phải là một ý tưởng tốt cho tôi để đi với Web SQL bây giờ không?


3
Bạn thấy điều gì lạ về localStorage? Nó chỉ là một cửa hàng cặp khóa / giá trị. Tôi tò mò không biết bạn không thích điều gì và loại vấn đề bạn gặp phải. Tôi đang sử dụng nó trong một dự án và muốn biết vấn đề bạn gặp phải.
jmq

1
@oligofren, Nếu bạn đang sử dụng SQL đơn giản hơn là chỉ đơn giản là chết não trong SQL web, bạn không thể dịch chính xác nó sang localStorage và v.v.
Pacerier

2
Nhưng hãy tiết kiệm cho mình những rắc rối khi tạo một lớp trừu tượng (mà tôi đã làm) và chỉ cần sử dụng YDN-DB ngay bây giờ dev.yathit.com/ydn-db/index.html . Nó sẽ sử dụng công nghệ tốt nhất hiện có cho thiết bị đó.
oligofren

2
Bạn luôn luôn sử dụng một lớp trừu tượng của một số loại. Đó là lập trình và cách bạn đạt được hành vi nhất quán bất kể lỗi triển khai trong trình duyệt. Các cuộc gọi js giả vượt quá 5000 mỗi ms, vì vậy trừ khi tác giả của YDN-DB đã làm điều gì đó ngu ngốc một cách lố bịch, bạn không nên có hiệu suất đạt được ở bất cứ đâu gần mức 100ms. Giống như 1ms, với tỷ lệ 1: 1, trên các nền tảng không hỗ trợ IndexedDB nguyên bản. Mà, tại thời điểm này, chỉ là phiên bản cũ hơn. Tất cả các trình duyệt hiện tại đều hỗ trợ IndexedDB. WebQuery không dùng nữa. Và thử một số hồ sơ đơn giản trước khi bạn "tối ưu hóa" công nghệ đi :-)
oligofren

4
@oligofren, Bạn đang thiếu quan điểm của tôi. Tôi không nói về chi phí của một chức năng gọi một chức năng khác và ngược lại. Tôi đang nói rằng khi bạn sử dụng một lớp trừu tượng db, bạn sẽ tự giới hạn mình trong một tập hợp con các mẫu truy vấn SQL mà bạn có thể sử dụng mà không phải chịu các hình phạt về hiệu năng. Bạn không thể điều chỉnh vì thư viện tự động làm điều đó và không phải lúc nào cũng sửa. Sẽ không phải là 1ms trừ khi bạn chỉ lưu trữ 1 hàng dữ liệu.
Pacerier

Câu trả lời:


99

Phiên bản ngắn: Web SQL không được dùng nữa vì các tiêu chuẩn thực sự quan trọng và việc biến Web SQL thành một tiêu chuẩn phù hợp sẽ rất khó khăn.

Do các triển khai SQL Web hiện tại về cơ bản là các trình bao bọc xung quanh SQLite, nên bất kỳ nỗ lực nào để xác định một tiêu chuẩn của nó về cơ bản là "làm những gì SQLite làm". Điều này là không đủ tốt; một tiêu chuẩn thực sự cần phải được khép kín, để xác định giao diện và các trường hợp góc và ngoại lệ thay vì chỉ vào một triển khai hiện có (đặc biệt là triển khai của bên thứ ba như SQLite). Mặt khác, bạn có nguy cơ lấy một quirks của một triển khai cụ thể và coi chúng là tiêu chuẩn. Từ những gì tôi đã đọc, W3C thích nhiều triển khai độc lập các tiêu chuẩn được đề xuất để giúp đảm bảo rằng điều này xảy ra; vì Web SQL đã được gắn với SQLite, điều đó sẽ không xảy ra.

Blog của Mozilla cung cấp thêm chi tiết về lý do của họ, đặc biệt là không hỗ trợ Web SQL; rõ ràng họ là một trong những tiếng nói chính trong việc khiến Web SQL bị phản đối.

Bạn có nên đi với Web SQL bây giờ không? Tôi không hy vọng các nhà cung cấp hiện hỗ trợ nó (như Google và Apple) sẽ sớm loại bỏ nó, nhưng IE và Firefox sẽ không thêm nó, và vì nó không dùng nữa, tại sao lại đầu tư vào nó? (Ví dụ: Ido Green , với Quan hệ nhà phát triển của Google, không khuyến nghị sử dụng nó.)


8
Bài đăng đó của Ido là siêu cơ bản và thậm chí không làm trầy xước bề mặt tại sao người ta nên sử dụng cái này hay cái kia. thực tế là, cơ sở dữ liệu noQuery được thiết kế với kích thước lớn và điều đó không áp dụng cho cơ sở dữ liệu chạy trên một máy tính của người dùng. Bạn có thể đạt được một số lợi thế liên quan đến dữ liệu lớn, nhưng bạn mất những thứ như THAM GIA. Không có cách nào tôi có thể phát triển tiện ích chrome "Plus for Trello" mã nguồn mở của mình nếu tôi phải sử dụng indexedDb (và tôi sử dụng kho dữ liệu noQuery trong appengine) vì vậy tôi đã sử dụng web sql.
Zig Mandel

2
Bởi vì đối thủ cạnh tranh Google GMail MS-Outlook sau đó có thể thực hiện tìm kiếm toàn văn bản và vì "nắm lấy, mở rộng, hủy diệt" là không thể khi chỉ có một triển khai SQLite (MS) và vì Jonas Sicking (Mozilla) không thích SQL. Các cửa hàng giá trị khóa với giao diện quá phức tạp dĩ nhiên là tốt hơn nhiều (còn gọi là dấu gạch ngang), đặc biệt vì mọi đối tượng JavaScript đều là một mảng kết hợp. Và hãy đối mặt với nó, bình thường hóa dữ liệu, tính toàn vẹn tham chiếu và các hoạt động dựa trên tập hợp thực sự gây phẫn nộ cho một người không (muốn) hiểu SQL, còn gọi là "Người dùng không muốn SQL".
Quandary

3
trớ trêu thay, WebQuery hoàn hảo để tương tác với SQLite nếu đó chính xác là những gì bạn muốn làm (và không cần PRAGMA).
Michael

4
vì vậy mozilla đã giết chết một dự án và một công nghệ cực kỳ hữu ích trong nhiều tình huống vì một số người không thích nó và mọi người bảo vệ họ. Tại sao? họ có thể triển khai BOTH IndexedDB VÀ WebQuery
yoyo_fun

1
Safari 13 hiện đã gỡ bỏ hỗ trợ cho WebQuery mà các phiên bản trước đó đã có.
Thunderforge

17

Câu trả lời của Josh Kelley cho đến nay là câu trả lời TỐT NHẤT mà tôi từng tìm thấy về lý do công việc tiêu chuẩn bị dừng lại. Điều đó nói rằng, tôi nghĩ rằng có một quan điểm bổ sung để xem xét liên quan đến cơ sở người dùng.

Mặc dù vậy, tôi không đồng ý với cách tiếp cận chủ đề của Ido Green ("Đây là một khuyến nghị cho các nhà phát triển web không còn sử dụng công nghệ một cách hiệu quả") ...

Tôi tin (như vi4m nêu trong các bình luận của bài viết của Ido Green):

Chúng tôi (nhà phát triển) vẫn có thể sử dụng công nghệ này. Không có nhà cung cấp trình duyệt nào yêu cầu loại bỏ công nghệ này, cũng không có kế hoạch loại bỏ nó. Các nhà phát triển là tiếng nói của web. Chúng ta chỉ có thể sử dụng nó, có thể Mozilla sẽ thay đổi ý định ;-)

Và tôi sẽ thêm một cách tiếp cận hợp lý khác: Nếu bạn đang phát triển cho môi trường di động ... những gì xung quanh có trong tay nhiều hơn? Trả lời: iOS và Android ... Vì vậy, nếu CẢ HAI hỗ trợ webQuery và mục tiêu của bạn là MASSIVE MOBILE, hãy tham gia!

Hãy nghĩ rằng các ứng dụng lớn đã thực hiện hầu như luôn luôn ở mức khất thực, lấy MOST trước, sau đó (một khi đạt được thành công) sẽ tạo lại công việc để có được phần còn lại ít hơn (nếu bạn thực sự muốn đạt được chúng hoặc được yêu cầu làm như vậy). Cuối cùng, không phải lúc nào thành công ai cũng đánh dấu con đường?


Sau khi đọc bài viết của Nolan Lawson (trong đó rõ ràng ý định trao cơ hội cho phát minh của anh ấy) tôi tin rằng vấn đề này đã trở thành một cuộc chiến tranh lạnh mới giữa những người khổng lồ công nghệ thậm chí không tồn tại. Tôi tin rằng thông số kỹ thuật được thực hiện để duy trì (càng dài và không bị ảnh hưởng càng tốt - càng tốt cho hiệu suất định hướng của khách hàng). Trớ trêu thay, công việc của "specs guys" là tạo ra các thông số MỚI (đôi khi không cần thiết, vì vậy anh ta có thể có nhiều việc phải làm), và các công việc lập trình viên đôi khi tập trung vào thay đổi và viết lại những gì đã hoạt động thay vì thực hiện các giải pháp cho các vấn đề mới và xu hướng mới.

Đối với tôi, Cơ sở dữ liệu phía Máy khách là vấn đề đơn giản là tạo ra sự tương đồng (giữa phía máy chủ và máy khách) để chúng tôi có thể tạo, lưu trữ, tải lên và tải xuống dữ liệu một cách dễ dàng. Theo cách tiếp cận này, việc có cùng ngôn ngữ và cấu trúc (ít nhất là đối với chúng tôi, các nhà phát triển mã nguồn mở LAMP) rất đơn giản và logic.

Tôi tin rằng ý định của IndexedDB là một giải pháp thay thế với các khả năng rộng hơn và mới hơn luôn là một cách tiếp cận tốt, nhưng bằng cách nào đó nó giống với tôi về nhu cầu phát triển phần mềm CẦN cài đặt (ngay cả khi giải pháp cốt lõi có thể ở trên đám mây). Trong một thế giới có xu hướng duy trì kết nối, có vẻ như A) vấn đề kiểm soát và sở hữu hoặc B) tập trung vào phát triển quái vật cho phía khách hàng ... nhưng đối với những nhu cầu đó tồn tại Ứng dụng (trong thế giới Di động) và phần mềm (trong thế giới PC). Tôi tin rằng mục tiêu của Webapps nên chủ yếu là mở rộng web bất kể thiết bị.

Tôi tin rằng một infographic đẹp có thể ra khỏi phương pháp này.


Xin lưu ý rằng các phiên bản Firefox và IE gần đây hoàn toàn không hỗ trợ WebQuery.
ocodo

1
Theo như tôi biết thì họ chưa bao giờ hỗ trợ WebQuery. Bạn có thể kiểm tra xem tại đây: [link] caniuse.com/#feat=sql-st Storage . Người duy nhất làm tôi ngạc nhiên là Opera Mini, họ đang mất thị trường theo cách này. Dù sao, đối với tôi, nhà phát triển, những người duy nhất quan trọng là iOS và Android cho WebApps và lấy lại WebKit mà tôi tin là cả hai hệ thống.
DavidTaubmann

1
Tuy nhiên, không có tiêu chuẩn lưu trữ phía máy khách nào được áp dụng bởi tất cả các trình duyệt thương mại: html5rocks.com/en/features/st Storage
DavidTaubmann

1
Safari 13 hiện đã gỡ bỏ hỗ trợ cho WebQuery mà các phiên bản trước đó đã có. Vì vậy, "Không có nhà cung cấp trình duyệt nào yêu cầu loại bỏ công nghệ này, cũng không có kế hoạch loại bỏ nó" không còn đúng nữa.
Thunderforge

@Thunderforge Cảm ơn thông tin! Thực sự tốt để biết! Suy nghĩ một chút, tôi không biết liệu điều này có tệ cho các nhà phát triển tệ hơn cho iOS hay không, vì công cụ này đã hoàn thiện và hữu ích cho chúng tôi kể từ rất nhiều năm. Chúng tôi có thể khuyên người dùng không nên sử dụng hoặc mua thêm bất kỳ thiết bị Mac hoặc iOS nào, trừ khi có ai đó trả chi phí cho việc lập trình lại các dự án thành indexedDB.
DavidTaubmann

1

Thực tế là các bên đóng góp đã đạt đến một sự bế tắc về hướng của tiêu chuẩn. Nói tóm lại, không ai có thể đồng ý.

Trang web W3C giải thích điều này.

Đặc tả kỹ thuật đạt đến sự bế tắc: tất cả những người triển khai quan tâm đã sử dụng cùng một phụ trợ SQL (Sqlite), nhưng chúng ta cần nhiều triển khai độc lập để tiến hành theo một lộ trình tiêu chuẩn hóa.

Trang web của WSC


2
Đối với tôi, điều này bằng cách nào đó có nghĩa là họ đồng ý không có gì khác để chuẩn hóa theo con đường đó ... Nó hoạt động tốt theo cách đó bởi vì nó kết nối đường dẫn của tiêu chuẩn với công nghệ của bên thứ ba hiện có nên / có thể không được tiêu chuẩn hóa bởi họ.
DavidTaubmann

Đối với tôi nghe có vẻ như: Họ không đồng ý với nó, vì nó không cho phép các tính năng dành riêng cho nhà cung cấp (ôm, mở rộng, hủy diệt?).
Quandary

Tôi tin rằng đó là một số loại ưu tiên cụ thể của nhà cung cấp, câu tiếp theo nói rằng nghiên cứu đang tiếp tục. Vì vậy, tôi không chắc chắn tất cả các bên đều hài lòng với trạng thái hiện tại ... "Nhóm làm việc về ứng dụng web tiếp tục làm việc với hai thông số kỹ thuật liên quan đến lưu trữ khác: Lưu trữ web và API cơ sở dữ liệu được lập chỉ mục."
htm11h
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.