Tại sao kích thước của các chương trình rất lớn?


186

Nếu chúng ta xem chương trình cổ điển Netscape Navigator hoặc phiên bản đầu tiên của Microsoft Word, các chương trình đó có kích thước dưới 50 MB. Bây giờ khi tôi cài đặt google chrome, nó là 200 MB và phiên bản Slack dành cho máy tính để bàn là 300 MB. Tôi đọc về một số quy tắc rằng các chương trình sẽ chiếm hết bộ nhớ khả dụng cho dù nó có giá bao nhiêu nhưng tại sao?

Tại sao kích thước hiện tại của các chương trình quá lớn so với 10 hoặc 15 năm trước? Các chương trình không thực hiện nhiều chức năng hơn và trông không khác lắm. Bây giờ nó là tài nguyên gì?


134
Chỉ gấp 4 lần kích thước?! Thật tuyệt vời khi xem xét một trình duyệt hiện đại hơn bao nhiêu
Richard Tingle

23
Là một lưu ý phụ, tôi tin rằng 'một số quy tắc rằng các chương trình sẽ chiếm hết bộ nhớ khả dụng cho dù đó là bao nhiêu nhưng tại sao?' có lẽ đề cập đến bộ nhớ truy cập ngẫu nhiên thay vì không gian đĩa vật lý, ít nhất đó sẽ là cách giải thích của tôi về nó. Có thể sai.
Trotski94

103
Vì vậy, những gì bạn đang nói là một chương trình đã từng chiếm dung lượng đĩa cứng trị giá $ 10 bây giờ chiếm không gian đĩa cứng trị giá khoảng 30 xu? Tôi thấy điều này thật khó để lo lắng.
Eric Lippert

49
Các chương trình không thực hiện được nhiều chức năng hơn nữa - một người đàn ông tốt bụng. Chỉ cần xem thông số HTML 4 và thông số CSS 1 (đừng lo lắng, tôi sẽ đợi - bạn sẽ không mất nhiều thời gian ngay cả khi bạn đọc chúng). Netscape 4 thậm chí không quản lý để thực hiện đúng. Chỉ số lượng HTML và CSS mới và điên rồ mà Chrome hỗ trợ là đáng kể. Thêm vào đó nó có các tab. Và cập nhật chính nó cứ sau sáu tuần.
Paul D. Chờ

13
BTW. 50 MB trong thời gian Netscape là lớn, nhưng, đối với bản ghi, nó không chỉ bao gồm trình duyệt web mà còn cả ứng dụng thư khách và trình soạn thảo HTML, và thậm chí có thể là thứ khác.
el.pescado

Câu trả lời:


266

"Nhìn rất khác" là một vấn đề về nhận thức. Đồ họa ngày nay phải trông đẹp ở độ phân giải màn hình hoàn toàn khác so với trước đây, với kết quả là hình ảnh 100x100 trước đây đủ tốt để logo trở nên trông khủng khiếp. Nó đã phải được thay thế bằng một hình ảnh 1000x1000 của cùng một thứ, đó là một yếu tố của 100 ngay tại đó. (Tôi biết bạn có thể sử dụng đồ họa vector thay thế, nhưng điều đó chỉ nhấn mạnh vào mã kết xuất đồ họa vector đã được thêm vào các hệ thống không cần đến nó trước đây, vì vậy đây chỉ là sự đánh đổi từ một loại tăng kích thước cho người khác.)

"Làm việc khác nhau" cũng là một vấn đề về nhận thức. Trình duyệt hiện nay không ồ ạt điều nhiều hơn một từ năm 1995. (Hãy thử lướt internet với một máy tính xách tay di tích lịch sử một ngày mưa -. Bạn sẽ tìm thấy nó gần như không sử dụng được) Không nhiều trong số họ đang được sử dụng rất nhiều, và việc sử dụng có thể hoàn toàn không biết gì về 90 % trong số họ, nhưng họ ở đó.

Trên hết, tất nhiên, là xu hướng chung dành ít thời gian hơn cho việc tối ưu hóa mọi thứ cho không gian và nhiều hơn nữa để giới thiệu các tính năng mới. Đây là một tác dụng phụ tự nhiên của máy tính lớn hơn, nhanh hơn, rẻ hơn cho mọi người. Vâng, có thể viết các chương trình có hiệu quả tài nguyên như năm 1990, và kết quả sẽ rất nhanh và lắt léo. Nhưng nó sẽ không còn hiệu quả nữa; trình duyệt của bạn sẽ mất mười năm để hoàn thành, khi đó các yêu cầu sẽ hoàn toàn thay đổi. Mọi người thường lập trình hết sức chú ý đến hiệu quả vì máy móc nhỏ, chậm của năm qua buộc họ phải làm như vậy và mọi người khác cũng đang làm điều đó. Ngay khi điều này thay đổi, nút cổ chai cho sự thành công của chương trình đã chuyển từ khả năng chạy tất cả sang chạyngày càng nhiều thứ sáng bóng , và đó là nơi chúng ta đang ở.


120
Các ví dụ cụ thể về những thứ mà một trình duyệt hiện đại nên bao gồm là thư viện tiền điện tử, cơ sở dữ liệu Unicode, thời gian chạy JavaScript và tối ưu hóa trình biên dịch JIT, codec video, trình kết xuất PDF, ngoài công cụ kết xuất và trình phân tích cú pháp phức tạp cho tất cả các loại MIME được hỗ trợ. Điều đó không bổ sung, nhưng không giống như các trình duyệt trò chơi không yêu cầu nhiều tài sản có độ phân giải cao. Một bản tải xuống Firefox hiện đại chỉ nặng 40 nén50 MB.
amon

23
"Kết quả sẽ rất nhanh và lắt léo" - nghe có vẻ như mơ tưởng.
Doc Brown

16
@amon Đừng quên rằng các trình duyệt cũng bao gồm các loại hình khác và toàn bộ API cho plugin và những gì không. Chúng thậm chí còn đi kèm với các công cụ gỡ lỗi (trình biên dịch, trình phân tích mạng, trình kiểm tra phần tử, bảng điều khiển đầy đủ chức năng, trình gỡ lỗi và nhiều hơn nữa). Các trình duyệt đang tiến gần hơn đến toàn bộ hệ điều hành mà tất cả chúng ta có thể tưởng tượng. Thậm chí còn có một cuộc thảo luận đang diễn ra để sử dụng Web hội! OP nên ngạc nhiên bởi hàng tấn tào lao mà họ có thể nhồi nhét trong trình duyệt.
Ismael Miguel

10
@IsmaelMiguel Theo như Chrome OS, các trình duyệt đã toàn bộ hệ điều hành. ;-P
Ajedi32

111
tendency to spend less time on optimizing things for space Điều này. Khi tôi viết mã, tôi không tối ưu hóa không gian hoặc tốc độ. Tôi tối ưu hóa để bảo trì. Điều quan trọng hơn là codebase có thể thay đổi dễ dàng hơn là nhanh hay nhỏ. Tôi có thể mong đợi rằng với mỗi khiếu nại về tốc độ chương trình, tôi sẽ nhận được mười yêu cầu cho các tính năng mới và không có yêu cầu nào để làm cho nó nhỏ hơn.
2023861

109

Nếu bạn so sánh Netscape Navigator với một trình duyệt hiện đại, có một sự khác biệt lớn về chức năng. Chỉ cần so sánh Thông số HTML 3.2 (51 trang khi tôi thực hiện bản xem trước in) với Thông số HTML hiện tại (phiên bản PDF là 1155 trang). Đó là kích thước tăng gấp 20 lần.

Netscape Navigator không có DOM và không có CSS! Không có thay đổi động của tài liệu, không có JavaScript sửa đổi DOM hoặc biểu định kiểu. Không có tab. Không có âm thanh hoặc video. Một trình duyệt hiện đại là một bao la chương trình phức tạp hơn.


12
Có, các trình duyệt gần đây thực hiện hoạt ảnh, độ dốc, hiệu ứng bộ lọc hình ảnh, JavaScript, đồ họa 2D (canvas), đồ họa 3D với WebGL, Tạo âm thanh, Tay chơi game (!), Giải mã video, lưu trữ phía máy khách nâng cao, Giao tiếp ngang hàng (WebRTC), Định vị địa lý, WebSocket, WebCryptography, MIDI, truy cập mic / webcam, thông báo, v.v.
ysdx

1
Thêm nhiều thứ khác (DOM, CSS, Javascript) để có nhiều bất động sản hơn (Nhiều màn hình, tăng độ phân giải lớn: Màn hình máy tính Bắt đầu lớn hơn: 1999 đến 2011 ) - 800x600 so với 1920x1080 so với 4k ... 8k và hơn thế nữa ... 1080 đến 4k là gấp bốn lần độ phân giải ... 8k lại tăng gấp bốn lần.
WernerCD

7
@WernerCD Đơn giản chỉ cần có một màn hình lớn hơn không yêu cầu nhị phân lớn hơn. Biểu tượng 64 x 64 pixel, 32 bit sẽ yêu cầu cùng dung lượng trên đĩa cho dù nó được hiển thị trên màn hình 800x600 hoặc 2560x1440. Thay đổi kích thước cửa sổ của bạn không thay đổi kích thước của nhị phân. Điều quan trọng với màn hình là khi bạn bắt đầu làm những thứ như nhân đôi pixel, sau đó bạn cần tài nguyên lớn hơn để tiếp tục trông sắc nét (er).
8

1
@ 8bittree, nó có thể đặt ra yêu cầu cao hơn về hiệu suất phần mềm. Và mã hiệu suất cao hơn có thể phức tạp hơn (ví dụ: một trang web sử dụng Canvas có thể cần độ phức tạp và mã hơn so với mã sử dụng SVG). Nhưng vâng, bạn chủ yếu là chính xác.
Paul Draper

1
Mặc dù điều chắc chắn là HTML hiện tại làm được nhiều hơn HTML 3.2, nhưng bản thân thông số kỹ thuật cũng chi tiết hơn rất nhiều, bổ sung lượng nội dung đáng kể cho thông số kỹ thuật. So sánh độ dài mô tả của EMphần tử HTML 3.2 - tám hoặc chín từ đầy đủ - với độ dài giống nhau trong thông số HTML 5 - đối với tôi, hơn cả một màn hình bao gồm cả tài liệu xung quanh mô tả phần tử, trong đó nó được áp dụng và mục đích sử dụng của nó là gì.
một CVn

79

Một lý do là dữ liệu được đóng gói trong các ứng dụng lớn hơn vì chúng có độ phân giải và chất lượng cao hơn. Một biểu tượng trở lại thời của Netscape có nhiều nhất là 32x32 pixel, với độ sâu tối đa 8 bit, (có thể chỉ 4,) trong khi bây giờ nó có thể giống như 64x64 và nó có màu thật với độ trong suốt, nghĩa là độ sâu 32 bit. Đó là lớn hơn 16 lần. Và không gian rẻ đến mức mọi người thường không thèm kiểm tra tùy chọn "nén" khi tạo PNG.

Một lý do khác là các ứng dụng ngày nay mang theo một lượng dữ liệu khổng lồ với chúng, điều mà các ứng dụng cũ không có. Ngày nay, có các ứng dụng được phát hành cùng với phần trình bày "bắt đầu" trong video .

Một lý do khác là các ngôn ngữ lập trình ngày nay có xu hướng đi đôi với môi trường thời gian chạy phong phú, khá lớn, với tốc độ 100 MB mỗi ngôn ngữ. Ngay cả khi bạn không sử dụng tất cả các tính năng của môi trường thời gian chạy, bạn vẫn phải đóng gói toàn bộ với ứng dụng của mình.

Nhưng lý do chính là ngày nay tồn tại hàng tấn thư viện ngoài kia mà chúng ta có thể sử dụng trong các ứng dụng của mình và chúng tôi đã phát triển văn hóa sử dụng các thư viện để tránh việc phát minh lại bánh xe liên tục. Tất nhiên, một khi bạn bắt đầu sử dụng các thư viện, một số câu hỏi sẽ xuất hiện và chúng tôi đã phát triển thói quen đưa ra câu trả lời tự do nhất cho họ:

  • Có đáng để bao gồm một thư viện khác nếu nó chỉ được sử dụng bởi một trong các chức năng của tôi không? - vâng.

  • Có đáng để bao gồm một thư viện khác không nếu tôi chỉ cần một tập hợp con nhỏ của toàn bộ sự giàu có của chức năng mà thư viện đó cung cấp? - vâng.

  • Có đáng để bao gồm một thư viện khác nếu việc bao gồm nó sẽ chỉ giúp tôi tiết kiệm được sau 2 ngày làm việc? - vâng.

  • Có đáng để bao gồm nhiều thư viện phục vụ cùng một mục đích chỉ vì các lập trình viên khác nhau trong bảng lương của tôi đã quen thuộc với các thư viện khác nhau? - vâng.

    (Xin lưu ý rằng tôi chỉ đang quan sát những xu hướng này, tôi không đưa ra tuyên bố nào về việc tôi đồng ý hay không đồng ý với chúng.)

Một lý do đáng nói khác là khi cố gắng quyết định sử dụng ứng dụng nào trong số một số lựa chọn, một số người dùng nghĩ rằng ứng dụng chiếm nhiều không gian hơn sẽ có nhiều tính năng hơn, sẽ có đồ họa fancier, v.v. .)

Vì vậy, để kết luận, phần mềm có hành xử như khí? Liệu nó có xu hướng chiếm tất cả không gian có sẵn cho nó? Trong một ý nghĩa nhất định có, nhưng không đến mức đáng báo động. Nếu chúng ta nhìn vào những gì chiếm nhiều dung lượng nhất trên ổ đĩa của chúng tôi, đối với hầu hết chúng ta câu trả lời là nó không phải là các ứng dụng, nhưng phương tiện truyền thông như phim ảnh và âm nhạc cho đến nay . Phần mềm đã không phình to với cùng tốc độ mà dung lượng lưu trữ đã được mở rộng và không chắc là nó sẽ như vậy, vì vậy trong các ứng dụng trong tương lai có thể sẽ chiếm một phần không đáng kể của không gian lưu trữ dành cho người dùng.


17
Đây là câu trả lời chính xác. Các bình luận được đánh giá cao hơn (hiện tại) đề cập đến nhiều chức năng hơn, nhưng điều đó không giải thích đầy đủ kích thước tăng lên. Kích thước đến từ các thư viện bao gồm cung cấp các chức năng đó.
dùng1936

5
@IsmaelMiguel tốt, tôi đã nói về người dùng thường xuyên. Ngoài ra, các trò chơi là một trường hợp đặc biệt, bởi vì 35GB này chủ yếu là phương tiện truyền thông, không phải mã, cũng không phải thư viện. Nó chỉ là phương tiện truyền thông mà bạn chỉ có thể xem thông qua một ứng dụng đặc biệt, đó là trò chơi. Nhưng ngay cả đối với một game thủ, 35 GB không là gì trên các ổ đĩa nhiều terabyte ngày nay. Nhưng dù sao, giả sử rằng nếu bạn là một game thủ khăng khăng sở hữu một ổ đĩa nhỏ thì bạn không ở đâu gần đại diện của người dùng ngoài kia.
Mike Nakis

2
@MikeNakis Không phải mọi game thủ đều có ổ đĩa 1TB hoặc tiền để mua ổ SSD 256 GB. Một số, như tôi, có ổ SSD 128 GB hoặc máy tính xách tay có dưới 500 GB. Trước đây, 80% việc sử dụng không gian SSD của tôi chỉ đơn giản là các trò chơi. Nó chỉ đơn giản là 3-4 trò chơi, ăn không gian. Và trong trò chơi, hầu hết mọi người đều có máy tính xách tay và chơi trên đó.
Ismael Miguel

5
@ Giống như oh, không thành vấn đề. Khi chúng ta nói về kích thước của một ứng dụng, chúng ta có nghĩa là kích thước của tệp cài đặt có thể tải xuống hoặc tổng dung lượng chiếm dụng của ứng dụng trên đĩa sau khi cài đặt. Điều này bao gồm thư viện, phương tiện truyền thông, dữ liệu, tất cả mọi thứ. Và ngày nay, để tránh các vấn đề không tương thích, các ứng dụng thường được gửi cùng với hầu hết các thư viện mà họ cần, thay vì hy vọng rằng các thư viện sẽ được cài đặt và có phiên bản phù hợp, v.v. Kích thước của tệp thực thi chính không thực sự quan tâm, cũng không có hậu quả.
Mike Nakis

3
@IsmaelMiguel Đối với một lập trình viên, có khả năng các máy ảo, thùng chứa docker khác nhau của họ, v.v. Không có sự phình to nào tốt hơn là nhân toàn bộ hệ thống cồng kềnh ;-)
cmaster

16

Ngoài các phiên bản khác, 10 năm trước thường có các phiên bản riêng cho các phiên bản được bản địa hóa / quốc tế hóa. Bây giờ, nói chung là các chương trình sẽ gói hỗ trợ bản địa hóa đầy đủ vào mọi phiên bản được phát hành có kích thước chương trình.


5
Tôi có thể sai, nhưng tôi đang lao động trong ảo tưởng rằng các chuỗi là phần ít nhất của vấn đề này. Đúng, có rất nhiều ngôn ngữ ngoài kia, nhưng vẫn còn số lượng chuỗi mà người dùng từng thấy rất hạn chế. Rốt cuộc, một trong những cách chắc chắn nhất để thất bại tại giao diện người dùng của bạn là bao gồm quá nhiều văn bản.
cmaster

5
Thêm vào những gì @cmaster nói, Firefox đặc biệt không gói nội địa hóa đầy đủ (và trong khi tôi đang nghĩ về nó, thì OpenOffice cũng không.)
BenjiWiebe

2
@cmaster Chuỗi, không. Nhưng video và âm thanh địa phương, đặc biệt là trong bối cảnh của các trò chơi? IIRC có một trò chơi 60 GB (GTA V?) Trong đó> 10 GB chỉ là âm thanh cục bộ. Đó là một đoạn đáng kể.
Bob

@Bob Phải, tôi đã không nghĩ về các trò chơi, chúng dường như là một ngoại lệ lớn đối với những gì tôi đã viết.
cmaster

Đối với mỗi ngôn ngữ, bảng chuỗi có thể thêm tối đa một vài K byte. Chỉ riêng các biểu tượng ứng dụng thường làm giảm tổng kích thước của tất cả nội dung chuỗi (ngoại lệ có thể là các ứng dụng có từ điển nhúng)
andyb

13

Một lý do là sự phụ thuộc. Một chương trình có chức năng phong phú và ngoại hình đẹp cần rất nhiều thứ được thực hiện - mã hóa, kiểm tra chính tả, làm việc với XML và JSON, chỉnh sửa văn bản và nhiều thứ khác. Họ sẽ đến từ đâu? Có thể bạn tự cuộn và giữ chúng nhỏ nhất có thể. Nhiều khả năng bạn sử dụng các thành phần của bên thứ ba (có lẽ là nguồn mở được MIT cấp phép) có rất nhiều chức năng mà bạn không bao giờ thực sự cần nhưng một khi bạn cần một chức năng duy nhất từ ​​một thành phần bên thứ ba, bạn thường phải mang theo toàn bộ thành phần. Vì vậy, bạn thêm ngày càng nhiều phụ thuộc và khi chính chúng phát triển và phát triển chương trình của bạn, điều đó phụ thuộc vào chúng cũng phát triển.


Tôi hơi tò mò tại sao điều này có hai downvote qua đêm.
sharptooth

6
Tôi đã không nhưng tôi không nghĩ rằng điều này thực sự trả lời câu hỏi đủ sâu. Nó chỉ nói rằng "phần mềm trở nên lớn hơn bởi vì nó làm được nhiều thứ hơn" và bạn sẽ thấy từ những câu trả lời khác thực sự có nhiều hơn thế.
Các cuộc đua nhẹ nhàng trong quỹ đạo

1
Một yếu tố liên quan là trong các hệ thống sử dụng liên kết tĩnh, một trình liên kết có thể chỉ cần lấy mã thực sự được sử dụng [một số trình liên kết sẽ luôn kéo mọi thứ, nhưng những trình liên kết tốt hơn đã cố gắng chọn lọc]. Khi sử dụng liên kết động, đặc biệt là nếu các mô-đun có thể được chia sẻ, ngay cả khi mã đầu tiên cài đặt mô-đun chỉ cần một chức năng từ nó, không có cách nào để biết các chức năng nào có thể cần để chia sẻ mô-đun.
supercat

@sharptooth Tôi không còn thắc mắc nữa. Trong khi trong hầu hết các trường hợp, hệ thống hoạt động, tôi cũng thấy các câu trả lời sai lầm khủng khiếp được đưa lên như điên và được chấp nhận trong khi những câu trả lời đúng bị bỏ rơi vào quên lãng quá thường xuyên ...
Brian Knoblauch

10

Mặc dù đồ họa / khả năng sử dụng thực sự là những yếu tố góp phần, nhưng có rất nhiều trong số đó là thư viện / mã được biên dịch dư thừa.

Ví dụ về cách mã nhỏ vẫn có thể là: MenuetOS, HĐH 64 bit đầy đủ với các ứng dụng mạnh mẽ phù hợp với một đĩa mềm.

Ví dụ về cách mã lớn có thể không có lý do rõ ràng: Tôi đã thực hiện một đầu ra văn bản đơn giản "Xin chào, Thế giới!" ở Ada gần đây. Tập tin thực thi được biên dịch là hơn 1 MiB!. Cùng thực thi trong lắp ráp chỉ là một KiB hoặc 2 (và phần lớn trong số đó là chi phí thực thi, mã chạy thực tế là hàng chục byte).


3
Đĩa mềm là gì? ;)
500 - Lỗi máy chủ nội bộ

@ 500-InternalServerError Ada là gì? : D
BenjiWiebe

3
đối với người mới sử dụng, đĩa mềm khoảng 1,4 MiB
SUND Borsch

3
Tôi đã thấy các tệp thực thi Ada hiện đại dưới 200 byte. Nhưng nếu trình biên dịch của bạn kéo theo những thứ như thời gian chạy tác vụ đầy đủ theo mặc định, cho dù bạn có sử dụng tác vụ hay không, thì sẽ có 1 MB. Và nó thường không đáng để bận tâm về việc tước nó xuống.
Brian Drumond

@BrianDrummond, nghe có vẻ như một thời gian chạy thực sự nhảm nhí, hoặc một thời gian chạy và thư viện và trình liên kết. Trong một video đào tạo tôi đã thấy cách đây nhiều năm, Jean Ichbiah và cộng sự đã đề cập rằng thời gian chạy Ada điển hình (đối với phiên bản gốc của ngôn ngữ) sẽ là khoảng 4K. Vì tò mò, tôi đã kiểm tra cái này với gói thời gian chạy TI 320C30 mà chúng tôi đang sử dụng. Ông đã đúng về tiền.
John R. Strohm 10/03/2016

7

Thật sự tầm thường rằng phần mềm phải được xây dựng để phù hợp với hai điều: Người dùng và phần cứng có sẵn. Một chương trình phù hợp với mục đích của nó nếu nó thực hiện những gì người dùng muốn một cách kịp thời với phần cứng theo ý của người dùng. Vâng duh. Nhưng khi phần cứng cải thiện về cơ bản tất cả các kích thước có thể đo được, số lượng chương trình rời rạc chuyển từ không phù hợp sang tăng - không gian thiết kế trở nên lớn hơn:

  • Các ngôn ngữ cấp cao hơn cho phép thể hiện ý tưởng theo ít mã & thời gian hơn trước. Điều này làm giảm độ phức tạp, ngược lại, làm cho nó có thể thể hiện những ý tưởng ngày càng phức tạp.
  • Gói nhiều dữ liệu hơn với ứng dụng có thể khiến nó có thể sử dụng được ngay lập tức. Ví dụ, có lẽ sẽ không còn lâu nữa trước khi các ứng dụng kiểm tra chính tả đi kèm với mọi ngôn ngữ mà nhân loại biết đến - rốt cuộc, nó chỉ có vài gigabyte.
  • Sự đánh đổi phần cứng cho phép các nhà phát triển và người dùng có nhiều sự lựa chọn hơn trong đó họ quan tâm đến tài nguyên nào. Xem ví dụ FLAC / OGG vs WAV, SVG vs PNG, các chỉ mục cơ sở dữ liệu.
  • Các giao diện nhân đạo thường đánh đổi những gì trước đây sẽ chiếm số lượng lớn phần cứng để sử dụng. Chống răng cưa, độ phân giải cao, làm mới nhanh và vuốt giữa số lượng cho các bảng rời rạc, tất cả tạo nên trải nghiệm chân thực hơn, do đó trực quan và dễ hiểu hơn.

6

Điều này hoàn toàn đúng liên quan đến các ứng dụng Android. Bốn năm trước, một ứng dụng đơn giản chiếm khoảng 2-5 megabyte. Ngày nay, một ứng dụng đơn giản chiếm khoảng 10-20 megabyte.

Càng có nhiều không gian, kích thước ứng dụng càng lớn.

Tôi nghĩ rằng có hai lý do chính trong trường hợp của Android:

  • Google mở rộng khung Android, bổ sung rất nhiều chức năng mới.

  • Các nhà phát triển không quan tâm nữa. Hình ảnh được bao gồm ở độ phân giải cao hơn nhiều (tất nhiên độ phân giải màn hình điện thoại thông minh tăng lên), các thư viện của bên thứ ba được bao gồm một cách thiếu suy nghĩ.


1
Đó là điểm đạn cuối cùng là chính xác.
Các cuộc đua nhẹ nhàng trong quỹ đạo

3
Tôi đã tạo tổng cộng một ứng dụng Android và APK là 0,05 MB. Sau đó, một lần nữa, nó không làm điều đó nhiều. Tôi vẫn đang tự hỏi tại sao một ứng dụng đồng hồ bấm giờ (với số lượng chức năng tương tự như của tôi, mặc dù hoàn toàn khác nhau) lại mất vài MB.
Immibis

5
Các điểm viên đạn cuối cùng là sai, các nhà phát triển làm việc chăm sóc. Chúng ta chỉ cần sắp xếp các ưu tiên khác nhau và làm cho ứng dụng đó lớn hơn một chút có ý nghĩa.
NPSF3000

Điều đó cũng không giúp SDK (vào thời điểm đó) khăng khăng đòi thêm thư viện 5 + MB vào ứng dụng 0,05 MB mà tôi không cần và tôi phải nhớ xóa nó trước khi xây dựng bản phát hành.
Immibis

4

Rất nhiều trong số đó rút ngắn thời gian của nhà phát triển và chi phí của thời gian đó. Quay trở lại những ngày khi Visual Basic lần đầu tiên xuất hiện, nó đã cạnh tranh với C / C ++ và điều gây tiếng vang lớn là bạn có thể viết 'Hello World' trong ANSI C cho Windows trong khoảng 15K. Vấn đề với VB là bạn luôn có thư viện thời gian chạy 300K.

Bây giờ, bạn có thể tăng gấp 10 lần kích thước chương trình VB của mình và nó sẽ vẫn chỉ là một vài K nữa, nhưng gấp 10 lần kích thước của chương trình C / C ++ của bạn và bạn đang xem xét một vài MONTHS phát triển hơn.

Cuối cùng, sự phình to của các ứng dụng của bạn là một cái giá nhỏ để trả cho những bước nhảy vọt trong sản xuất phát triển, giảm giá và vô số khả năng chưa từng có trong những ngày phát triển thủ công cũ; khi các chương trình nhỏ và nhanh nhưng cũng yếu, không tương thích với nhau, thiếu tính năng và tốn kém để phát triển.


2
bài này khá khó đọc (tường văn bản). Bạn có phiền chỉnh sửa ing nó thành một hình dạng tốt hơn?
gnat

1
"Kích thước gấp 10 lần" của Hello World đòi hỏi "tháng phát triển hơn"? Có phải đánh răng mười lần liên quan đến việc đứng trước gương không ngừng trong một tháng?
bcrist

Đánh răng x lần là một hàm tuyến tính của x, nhưng lập trình thường không phải là hàm tuyến tính. Nếu bạn thủ công mỗi dòng mã bằng các hàm ngôn ngữ cấp thấp nhất, bạn sẽ có được mã nhanh và nhỏ nhưng với chi phí cao hơn cho mỗi mức độ phức tạp. Các ngôn ngữ cấp cao hơn phình to hơn nhưng giữ chi phí gần với hàm tuyến tính của độ phức tạp.
andyb

2

Theo thời gian, nhu cầu của người dùng đang phát triển và ngày càng khắt khe hơn, vì vậy nhà cung cấp / tác giả của các phần mềm khác nhau buộc phải đáp ứng những nhu cầu đó dưới danh nghĩa cạnh tranh.

Nhưng đáp ứng một nhu cầu mới có nghĩa là thường thêm mã mới. Mã mới có nghĩa là lỗ hổng mới để sửa chữa. Sửa các lỗ hổng mới có thể thêm mã hoặc mở cửa cho các lỗ hổng mới.

Mỗi tính năng được thêm vào để đáp ứng nhu cầu của người dùng có thể cần nhiều sức mạnh bộ xử lý hơn cho tốc độ (tất cả chúng ta đều phàn nàn về tốc độ của trình duyệt này hoặc trình duyệt đó), tài nguyên đồ họa mới cho hiệu ứng hình ảnh tốt hơn ... vv.

Tất cả điều này có nghĩa là thêm các lớp ứng dụng mới (mã), bảo mật và đôi khi là phần cứng.


0

Rất nhiều kích thước đến từ các thư viện được xây dựng. Nhiều ứng dụng ngày nay được xây dựng bằng cách sử dụng electron, gói một lượng lớn với ứng dụng. Nếu bạn cài đặt các ứng dụng trên Linux, chúng thường nhỏ hơn nhiều vì phần lớn ứng dụng đã được cài đặt thông qua các thư viện dùng chung mà các chương trình khác cũng đang sử dụng.


-1

Khi xây dựng phần mềm, nếu bạn cần chức năng A, bạn sẽ nhập mô-đun A *. A * có thể giải quyết A, nhưng A * có thể giải quyết nhiều vấn đề hơn A và A * có thể lớn. Tất cả các mô-đun lớn dẫn đến phần mềm kích thước lớn.

Có thể không giống trường hợp tương tự, nhưng đại loại như thế này: Nếu bạn chỉ cần in "hello world" trên bảng điều khiển bằng Java, bạn cần cài đặt JRE (> 60MB).

Nếu ví dụ về Java không tốt, hãy thử điều này: Nếu phần mềm cần đăng nhập vào tệp, nó có thể sử dụng mô-đun ghi nhật ký thực sự có thể tạo nhật ký cho cơ sở dữ liệu, qua mạng và một số tính năng khác, nhưng các chức năng không bao giờ được sử dụng trong dự án.


Tại sao chính xác có 5 downvote và không một bình luận giải thích tại sao?
Kromster

1
@KromStern Phần đầu tiên làm nổi bật rất nhiều về cách các thư viện hoạt động và làm như vậy theo một cách rất không rõ ràng với việc sử dụng không nhất quán code. Tôi cho rằng nó không thực sự trả lời câu hỏi nào cả. Phần thứ hai sử dụng Java làm ví dụ (mặc dù cố gắng tuyên bố rằng JRE nên được coi là một phần của sự tăng trưởng của kích thước ứng dụng - một lần nữa bỏ lỡ điểm của câu hỏi và hoàn toàn không phải là một ví dụ công bằng và tiếp tục duy trì hiểu lầm về Java). Tất cả trong tất cả nó là sai, hoặc lặp lại các điểm trong các câu trả lời trước đó, bằng văn bản tốt hơn.

1
Ví dụ của bạn về việc đăng nhập vào mạng hoặc tệp cũng không phải là một ví dụ tốt - bởi vì theo quan điểm của mã, cả hai đều là các tệp và được xử lý chính xác theo cùng một cách (phân biệt giữa tệp và mạng được xử lý bởi hệ điều hành). Tôi vẫn chưa thấy một khung đăng nhập có "đăng nhập vào cơ sở dữ liệu" như là một phần của chức năng cốt lõi của nó vì điều này sẽ phức tạp bởi Oracle vs MySQL vs Sql Server vs Postgres vs ... trình điều khiển và sự khác biệt biện chứng.

@ user40980 Sự khác biệt giữa tệp và mạng không được xử lý bởi hệ điều hành. Họ cần các cuộc gọi hệ điều hành khác nhau để kết nối và ghi vào. Truy cập cơ sở dữ liệu được xử lý thông qua lớp độc lập cơ sở dữ liệu như JDBC hoặc libdbi. (Đến lượt nó có thể kéo các trình điều khiển cho tất cả các cơ sở dữ liệu được hỗ trợ khác nhau!)
phiên bản

-2

Tôi đọc về một số quy tắc rằng các chương trình sẽ chiếm hết bộ nhớ khả dụng cho dù nó có giá bao nhiêu nhưng tại sao?

Điều đó không hoàn toàn đúng. Các hệ thống sẽ không giải phóng bộ nhớ mà chúng đã tiêu thụ cho đến khi hệ điều hành chịu áp lực bộ nhớ. Đây là một cải tiến hiệu suất. Nếu bạn đang duyệt một trang có hình ảnh trên, bạn điều hướng đi. Bạn có thể điều hướng trở lại, do đó cần hình ảnh một lần nữa. Nếu hệ điều hành có RAM, sẽ không có điểm nào trong việc xóa bộ nhớ cho đến khi bạn chắc chắn rằng mình sẽ không cần nó nữa.

Việc xóa bộ nhớ ngay lập tức sẽ làm mất chu kỳ CPU và băng thông bộ nhớ khỏi người dùng khi họ có thể rất muốn các trang web có độ phản hồi cao được hiển thị trên màn hình.

Hệ điều hành sẽ tiêu thụ tất cả bộ nhớ không có sẵn của ứng dụng, phần lớn trong số đó là cho bộ đệm của hệ thống tệp.

Quản lý bộ nhớ là một vấn đề khó khăn nhưng có những người rất thông minh làm việc về nó mọi lúc. Không có gì bị lãng phí vào mục đích và mục tiêu chính là cung cấp cho bạn một máy tính rất nhạy.


3
Đó không phải là tất cả những gì mà nói là về. Bộ nhớ ảo và bộ sưu tập rác vừa được phát minh khi trích dẫn đó được viết và chúng không được phổ biến rộng rãi.
Jörg W Mittag

-2

Có thể đúng là các chương trình có xu hướng mở rộng để lấp đầy không gian có sẵn, tương tự như hiện tượng ngoại ô nơi bạn thêm làn đường mới vào đường cao tốc bị chặn và trong một vài năm, giao thông sẽ được sao lưu lại.

Nhưng nếu bạn nhìn vào nó, bạn có thể thấy rằng các chương trình của họ thực sự làm được nhiều thứ hơn. Các trình duyệt, ví dụ, chạy đồ họa fancier, có các công cụ dành cho nhà phát triển bóng bẩy không tồn tại vài năm trước, v.v. Họ cũng liên kết với nhiều thư viện, đôi khi chỉ sử dụng một phần nhỏ mã. Vì vậy, trong khi các chương trình có thể tăng kích thước để lấp đầy bộ nhớ khả dụng, một số trong đó có thể là lý do chính đáng.


2
điều này dường như không cung cấp bất cứ điều gì đáng kể qua các điểm được thực hiện và giải thích trong 13 câu trả lời trước
gnat

-3

Các thư viện được xây dựng trên các đối tượng không được tối ưu hóa đòi hỏi nhiều bộ nhớ hơn để tải, cài đặt và nhiều chu kỳ tính toán hơn để hoạt động. Mã đối tượng là cho hầu hết các phần phình ra.

Chỉ cần bước qua mã C ++ tiêu chuẩn đang chạy để xem tất cả các lệnh gọi đối tượng ed assert () để đảm bảo chúng là các đối tượng hợp lệ. Khi bạn thiết kế lớp trên lớp đối tượng bao bọc các đối tượng, lớp lót bên dưới bị phồng lên và mờ đục. Các lập trình viên trở nên lười biếng và tiếp nhận nhiều đối tượng hơn vì nó nhanh hơn việc thiết kế lại những gì giới hạn trong chức năng cần thiết. Nó thực sự đơn giản.

Hãy xem xét kích thước của hạt nhân Linux C, chỉ là hạt nhân, so với kích thước của các ứng dụng bespoke. Nhân có thể chạy toàn bộ máy. Nhưng nó không được xây dựng nhanh như các ứng dụng, cần có thời gian để tạo ra chức năng tốt nhất.

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.