ทำไมขนาดของโปรแกรมถึงใหญ่มาก


186

ถ้าเราดูโปรแกรมโบราณ Netscape Navigator หรือ Microsoft Word รุ่นก่อนหน้าโปรแกรมเหล่านั้นมีขนาดน้อยกว่า 50 MB ตอนนี้เมื่อฉันติดตั้ง google chrome ก็คือ 200 MB และ Slack เวอร์ชันเดสก์ท็อปคือ 300 MB ฉันอ่านเกี่ยวกับกฎบางอย่างที่โปรแกรมจะใช้หน่วยความจำที่มีอยู่ทั้งหมดไม่ว่าจะเป็นเท่าใด แต่ทำไม?

ทำไมขนาดปัจจุบันของโปรแกรมจึงมีขนาดใหญ่เมื่อเทียบกับเมื่อ 10 หรือ 15 ปีก่อน? โปรแกรมไม่ทำงานอย่างมีนัยสำคัญมากขึ้นและดูไม่แตกต่างกันมาก มันคืออะไรหมูทรัพยากรตอนนี้หรือไม่


134
ขนาดเพียง 4 เท่าเท่านั้น! เป็นเรื่องที่น่าอัศจรรย์เมื่อพิจารณาว่าเบราว์เซอร์ยุคใหม่จะมีจำนวนเท่าไร
Richard Tingle

23
ในฐานะที่เป็นหมายเหตุด้านข้างฉันเชื่อว่า 'กฎบางอย่างที่โปรแกรมจะใช้หน่วยความจำที่มีอยู่ทั้งหมดไม่ว่ามันจะเป็นเหตุผล แต่ทำไม?' อาจหมายถึงหน่วยความจำเข้าถึงโดยสุ่มแทนพื้นที่ดิสก์จริงอย่างน้อยก็เป็นการตีความของฉัน อาจจะผิด
Trotski94

103
ดังนั้นสิ่งที่คุณกำลังพูดคือโปรแกรมที่ครั้งหนึ่งเคยใช้พื้นที่ฮาร์ดดิสก์มูลค่า 10 ดอลลาร์ใช้พื้นที่ฮาร์ดดิสก์ประมาณ 30 เซ็นต์? ฉันพบว่ามันยากที่จะกังวล
Eric Lippert

49
“ โปรแกรมไม่ได้ทำหน้าที่มากขึ้นอย่างมีนัยสำคัญ” - คนดีลอร์ด ลองดูที่ข้อมูลจำเพาะ HTML 4และข้อมูลจำเพาะCSS 1 (ไม่ต้องกังวลฉันจะรอ - มันจะไม่ใช้เวลานานแม้ว่าคุณจะอ่านก็ตาม) Netscape 4 ไม่สามารถแม้แต่จะนำไปใช้อย่างเหมาะสม มีเพียงจำนวน HTML ที่ใหม่และบ้าและ CSS ที่ Chrome รองรับเป็นจำนวนมาก นอกจากนี้ยังมีแท็บ และอัปเดตตัวเองทุกหกสัปดาห์
Paul D. Waite

13
BTW 50 MB ในครั้ง Netscape มีขนาดใหญ่ แต่สำหรับบันทึกนั้นไม่ได้รวมเฉพาะเว็บเบราว์เซอร์เท่านั้น แต่ยังรวมถึงโปรแกรมรับส่งเมลและโปรแกรมแก้ไข HTML และอาจเป็นอย่างอื่น
el.pescado

คำตอบ:


266

"การดูแตกต่าง" เป็นเรื่องของการรับรู้ กราฟิกของวันนี้ต้องดูดีที่ความละเอียดหน้าจอที่แตกต่างกันโดยสิ้นเชิงกับผลลัพธ์ที่ว่าภาพ 100x100 ที่เคยดีเกินพอสำหรับโลโก้ตอนนี้จะดูไม่มีรสนิยมที่น่ากลัว มันจะต้องถูกแทนที่ด้วยภาพขนาด 1000x1000 ของสิ่งเดียวกันซึ่งเป็นปัจจัยที่ 100 ตรงนั้น (ฉันรู้ว่าคุณสามารถใช้กราฟิกแบบเวกเตอร์แทน แต่เพียงเน้นจุด - รหัสกราฟิกการแสดงผลแบบเวกเตอร์จะต้องมีการเพิ่มระบบที่ไม่ต้องการมาก่อนดังนั้นนี่เป็นเพียงการแลกเปลี่ยนจากการเพิ่มขนาดประเภทใดประเภทหนึ่ง ไปยังอีก)

"การทำงานต่างกัน" ก็เป็นเรื่องของการรับรู้เช่นเดียวกัน เบราว์เซอร์ของวันนี้ทำสิ่งต่าง ๆอย่างหนาแน่นมากกว่าหนึ่งจากปี 1995 (ลองท่องอินเทอร์เน็ตด้วยแล็ปท็อปเก่าแก่วันหนึ่งที่มีฝนตก - คุณจะพบว่ามันใช้ไม่ได้เกือบ) ไม่ใช้พวกมันมากนัก % ของพวกเขา แต่พวกเขาอยู่ที่นั่น

ยิ่งไปกว่านั้นเป็นแนวโน้มทั่วไปที่จะใช้เวลาน้อยลงในการปรับสิ่งต่าง ๆ ให้เหมาะสมสำหรับพื้นที่และเพิ่มเติมเกี่ยวกับการแนะนำคุณสมบัติใหม่ นี่เป็นผลข้างเคียงตามธรรมชาติของคอมพิวเตอร์ที่มีขนาดใหญ่ขึ้นเร็วขึ้นและราคาถูกลงสำหรับทุกคน ใช่มันเป็นไปได้ที่จะเขียนโปรแกรมที่มีประสิทธิภาพในการใช้ทรัพยากรเหมือนในปี 1990 และผลลัพธ์จะรวดเร็วและลื่นไหลอย่างน่าทึ่ง แต่มันจะไม่คุ้มค่าอีกต่อไป เบราว์เซอร์ของคุณจะใช้เวลาสิบปีจึงจะเสร็จสมบูรณ์ตามเวลาที่ข้อกำหนดจะเปลี่ยนไปโดยสิ้นเชิง ผู้คนเคยเขียนโปรแกรมด้วยความสนใจอย่างมากต่อประสิทธิภาพเพราะเมื่อปีกลายเครื่องขนาดเล็กบังคับให้พวกเขาและคนอื่นก็ทำเช่นกัน เร็วที่สุดเท่าที่นี้เปลี่ยนคอขวดสำหรับความสำเร็จของโปรแกรมเปลี่ยนจากความสามารถในการทำงานที่ทุกคนในการทำงานสิ่งที่มันวาวมากขึ้นและนั่นคือสิ่งที่เราตอนนี้


120
ตัวอย่างที่เป็นรูปธรรมของสิ่งที่เบราว์เซอร์สมัยใหม่ควรมี ได้แก่ crypto ไลบรารีฐานข้อมูล Unicode รันไทม์ JavaScript และปรับแต่งคอมไพเลอร์ JIT ตัวแปลงสัญญาณวิดีโอตัวแสดงผล PDF นอกจากเครื่องมือเรนเดอร์ที่ซับซ้อนและตัวแยกวิเคราะห์สำหรับประเภท MIME ที่สนับสนุนทั้งหมด สิ่งนี้จะเพิ่มขึ้น แต่ต่างจากเบราว์เซอร์เกมที่ไม่ต้องการเนื้อหาความละเอียดสูงจำนวนมาก การดาวน์โหลด Firefox ที่ทันสมัยเท่านั้นบีบอัด 40–50MB เท่านั้น
amon

23
"ผลลัพธ์จะรวดเร็วและลื่นอย่างน่าทึ่ง" - ฟังดูเหมือนความคิดนึกอยาก
หมอบราวน์

16
@amon อย่าลืมว่าเบราว์เซอร์ยังมีการสืบค้นประเภทอื่นและ API ทั้งหมดสำหรับปลั๊กอินและอะไรที่ไม่ควรทำ พวกเขายังมาพร้อมกับเครื่องมือการดีบัก (ผู้สร้างโปรไฟล์นักวิเคราะห์เครือข่ายผู้ตรวจสอบองค์ประกอบคอนโซลที่ทำงานได้อย่างสมบูรณ์ผู้ดีบักและอีกมากมาย) เบราว์เซอร์กำลังเข้าใกล้ระบบปฏิบัติการทั้งหมดมากกว่าที่เราจะจินตนาการได้ แม้จะมีการพูดคุยกันอย่างต่อเนื่องเพื่อใช้ Web Assembly! OP ควรประหลาดใจกับตันของอึที่พวกเขาสามารถอัดขึ้นในเบราว์เซอร์
Ismael Miguel

10
@IsmaelMiguel เท่าที่ Chrome OS เป็นห่วง, เบราว์เซอร์แล้วมีทั้งระบบปฏิบัติการ ;-P
Ajedi32

111
tendency to spend less time on optimizing things for space นี้. เมื่อฉันเขียนรหัสฉันไม่ปรับให้เหมาะสมสำหรับพื้นที่หรือความเร็ว ฉันปรับให้เหมาะสมสำหรับการบำรุงรักษา มันสำคัญมากที่ codebase สามารถเปลี่ยนได้ง่ายกว่าเร็วหรือเล็ก ฉันคาดหวังได้ว่าทุกครั้งที่มีการร้องเรียนเกี่ยวกับความเร็วของโปรแกรมฉันจะได้รับคำขอสิบคำขอสำหรับคุณลักษณะใหม่และคำขอเป็นศูนย์เพื่อให้เล็กลง
user2023861

109

ถ้าคุณเปรียบเทียบ Netscape Navigator กับเบราว์เซอร์ที่ทันสมัยมีขนาดใหญ่ความแตกต่างในการทำงาน เพียงเปรียบเทียบสเปคHTML 3.2 (51 หน้าเมื่อฉันแสดงตัวอย่างก่อนพิมพ์) กับสเป็ค HTML ปัจจุบัน (รุ่น PDF คือ 1155 หน้า) นั่นคือการเพิ่มขนาด 20x

Netscape Navigator ไม่มี DOM และไม่มี CSS! ไม่มีการเปลี่ยนแปลงแบบไดนามิกของเอกสารไม่มี JavaScript แก้ไข DOM หรือสไตล์ชีท ไม่มีแท็บ ไม่มีเสียงหรือวิดีโอ เบราว์เซอร์ที่ทันสมัยเป็นโปรแกรมที่ซับซ้อนยิ่งขึ้นอย่างมากมาย


12
ใช่เบราว์เซอร์ล่าสุดทำภาพเคลื่อนไหวการไล่ระดับสีเอฟเฟกต์ตัวกรองรูปภาพ JavaScript กราฟิก 2 มิติ (ผ้าใบ) กราฟิก 3 มิติพร้อม WebGL การสร้างเสียง Gamepad (!) การถอดรหัสวิดีโอการจัดเก็บข้อมูลฝั่งไคลเอ็นต์ขั้นสูงการสื่อสารแบบเพียร์ทูเพียร์ (WebRTC), บริการระบุพิกัดตำแหน่ง, WebSocket, WebCryptography, MIDI, การเข้าถึงไมโครโฟน / เว็บแคม, การแจ้งเตือน ฯลฯ
ysdx

1
เพิ่มการทำสิ่งต่าง ๆ (DOM, CSS, Javascript) เพื่อให้มีอสังหาริมทรัพย์มากขึ้น (จอภาพหลายจอเพิ่มความละเอียดมากขึ้น: หน้าจอคอมพิวเตอร์เริ่มมีขนาดใหญ่ขึ้น: 1999 ถึง 2011 ) - 800x600 เทียบกับ 1920x1080 เทียบกับ 4k ... 8k และอื่น ๆ ... 1080 ถึง 4k เป็นสี่เท่าของความละเอียด ... 8k เป็นสี่เท่าอีกครั้ง
WernerCD

7
@WernerCD การมีหน้าจอที่ใหญ่ขึ้นไม่จำเป็นต้องใช้ไบนารีที่ใหญ่ ไอคอน 64 x 64 พิกเซลและ 32 บิตจะต้องใช้พื้นที่จำนวนเท่ากันบนดิสก์ไม่ว่าจะถูกแสดงบนจอภาพ 800x600 หรือ 2560x1440 การปรับขนาดหน้าต่างของคุณจะไม่เปลี่ยนขนาดของไบนารี สิ่งที่สำคัญกับจอแสดงผลคือเมื่อคุณเริ่มทำสิ่งต่าง ๆ เช่นการเพิ่มพิกเซลเป็นสองเท่าจากนั้นคุณต้องใช้ทรัพยากรที่มีขนาดใหญ่ขึ้นเพื่อให้ดูคมชัดขึ้น
8bittree

1
@ 8bittree มันสามารถทำให้ความต้องการซอฟต์แวร์มีประสิทธิภาพมากขึ้น และรหัสที่มีประสิทธิภาพมากขึ้นอาจมีความซับซ้อนมากขึ้น (เช่นเว็บไซต์ที่ใช้ Canvas น่าจะต้องการความซับซ้อนและรหัสมากกว่าโค้ดที่ใช้ SVG) แต่ใช่คุณถูกต้องที่สุด
พอลเดรเปอร์

1
ในขณะที่มันเป็นความจริงอย่างแน่นอนว่า HTML ปัจจุบันทำอะไรได้มากกว่า HTML 3.2 แต่สเปคนั้นก็มีรายละเอียดมากกว่าซึ่งเพิ่มเนื้อหาจำนวนมากให้กับสเป็ค เปรียบเทียบความยาวของคำอธิบายEMองค์ประกอบHTML 3.2 - เต็มแปดหรือเก้าคำ - กับความยาวเท่ากันในข้อกำหนด HTML 5 - สำหรับฉันมากกว่าหน้าจอรวมถึงวัสดุโดยรอบที่อธิบายองค์ประกอบซึ่ง มันใช้ได้และสิ่งที่ตั้งใจใช้คืออะไร
CVN

79

เหตุผลหนึ่งคือชุดข้อมูลภายในแอปพลิเคชันมีขนาดใหญ่กว่าเนื่องจากมีความละเอียดและคุณภาพสูงกว่า ไอคอนย้อนกลับไปในยุคของ Netscape มีขนาดสูงสุด 32x32 พิกเซลโดยมีความลึกสูงสุด 8 บิต (อาจเป็นเพียง 4) ในขณะนี้ตอนนี้มันอาจเป็นอะไรบางอย่างเช่น 64x64 และเป็นสีจริงที่มีความโปร่งใส มันใหญ่กว่า 16 เท่า และพื้นที่มีราคาถูกมากจนผู้คนมักไม่สนใจตรวจสอบตัวเลือก "บีบอัด" เมื่อสร้าง PNG

เหตุผลอีกประการคือแอปพลิเคชันในปัจจุบันมีข้อมูลจำนวนมากที่ไม่น่าเชื่อ มีการใช้งานในวันนี้อยู่ที่ได้รับการจัดส่งพร้อมกับ "การเริ่มต้น" นำเสนอในวิดีโอ

อีกเหตุผลหนึ่งคือภาษาการเขียนโปรแกรมในปัจจุบันมีแนวโน้มที่จะทำงานร่วมกันกับสภาพแวดล้อมแบบรันไทม์ที่มีขนาดใหญ่พอสมควร แม้ว่าคุณจะไม่ได้ใช้คุณสมบัติทั้งหมดของสภาพแวดล้อมรันไทม์ของคุณคุณยังต้องจัดทำสิ่งทั้งหมดด้วยแอพของคุณ

แต่เหตุผลหลักคือในปัจจุบันมีห้องสมุดมากมายที่เราสามารถใช้ในแอพพลิเคชั่นของเราได้และเราได้พัฒนาวัฒนธรรมการใช้ห้องสมุดเพื่อหลีกเลี่ยงการคิดค้นล้ออย่างต่อเนื่อง แน่นอนว่าเมื่อคุณเริ่มใช้ห้องสมุดมีคำถามเกิดขึ้นหลายคำถามและเราได้พัฒนานิสัยในการให้คำตอบที่เป็นอิสระกับพวกเขามากที่สุด:

  • คุ้มค่าหรือไม่ที่จะรวมไลบรารี่อื่นถ้ามันจะถูกใช้โดยฟังก์ชั่นเดียวของฉัน? - ใช่

  • คุ้มค่าหรือไม่หากรวมกับห้องสมุดอื่นถ้าฉันต้องการเพียงส่วนย่อยเล็ก ๆ ของความมั่งคั่งทั้งหมดของฟังก์ชั่นที่นำเสนอโดยห้องสมุดนั้น? - ใช่

  • การรวมห้องสมุดอื่นไว้ด้วยหรือไม่หากการรวมไว้จะช่วยให้ฉันประหยัดได้เพียง 2 วัน? - ใช่

  • มันคุ้มค่าหรือไม่ที่จะรวมไลบรารีหลาย ๆ ตัวที่ตอบสนองวัตถุประสงค์เดียวกันมากขึ้นหรือน้อยลงเพราะโปรแกรมเมอร์ที่แตกต่างกันในบัญชีเงินเดือนของฉันมีความคุ้นเคยกับห้องสมุดที่แตกต่างกันหรือไม่? - ใช่

    (โปรดทราบว่าฉันเพิ่งสังเกตเห็นแนวโน้มเหล่านี้ฉันไม่ได้กล่าวใด ๆ ว่าฉันเห็นด้วยหรือไม่เห็นด้วยกับพวกเขา)

เหตุผลอีกอย่างที่ควรค่าแก่การกล่าวถึงคือเมื่อพยายามตัดสินใจว่าจะใช้แอปพลิเคชันใดในหลายตัวเลือกผู้ใช้บางคนคิดว่าแอปพลิเคชั่นที่ใช้พื้นที่มากขึ้นจะมีฟีเจอร์ที่เต็มไปด้วยคุณสมบัติ .)

ดังนั้นเพื่อสรุปว่าซอฟต์แวร์มีพฤติกรรมเหมือนแก๊สหรือไม่ มันมักจะครอบครองพื้นที่ทั้งหมดที่มีอยู่หรือไม่ ในแง่หนึ่งใช่ แต่ไม่ใช่ในระดับที่น่าตกใจ ถ้าเรามองในสิ่งที่ใช้พื้นที่มากที่สุดในไดรฟ์ของเราสำหรับส่วนใหญ่ของเราคำตอบคือว่ามันไม่ได้ใช้งาน แต่สื่อเช่นเพลงและภาพยนตร์โดยไกล ซอฟแวร์ที่ไม่ได้รับท้องอืดในอัตราเดียวกันกับที่จุได้รับการขยายและมันไม่น่าเป็นไปได้ว่ามันจะเคยดังนั้นในการใช้งานในอนาคตมีแนวโน้มที่จะเป็นตัวแทนของส่วนเล็กน้อยของพื้นที่จัดเก็บที่มีอยู่กับผู้ใช้งาน


17
นี่คือคำตอบที่ถูกต้อง ความคิดเห็นที่มีอันดับสูงกว่า (ในปัจจุบัน) พูดถึงฟังก์ชันการทำงานที่มากขึ้น แต่นั่นไม่ได้อธิบายขนาดที่เพิ่มขึ้นอย่างเต็มที่ ขนาดมาจากไลบรารีที่รวมไว้ซึ่งจัดเตรียมฟังก์ชันการทำงานเหล่านั้น
user1936

5
@IsmaelMiguel ดีฉันพูดถึงผู้ใช้ทั่วไป นอกจากนี้เกมเป็นกรณีพิเศษเนื่องจาก 35GB เหล่านี้ส่วนใหญ่เป็นสื่อไม่ใช่รหัสหรือไลบรารี มันเกิดขึ้นเป็นสื่อที่คุณสามารถดูผ่านแอปพลิเคชันพิเศษซึ่งเป็นเกมเท่านั้น แต่สำหรับนักเล่นเกม 35GB ก็ไม่ได้มีอะไรมากมายในไดรฟ์หลายเทราไบต์ในปัจจุบัน อย่างไรก็ตามสมมติว่าถ้าคุณเป็นนักเล่นเกมที่ยืนยันในการเป็นเจ้าของไดรฟ์ขนาดเล็กคุณก็จะไม่ได้เป็นตัวแทนของผู้ใช้
Mike Nakis

2
@MikeNakis ไม่ใช่นักเล่นเกมทุกคนที่มีไดรฟ์ 1TB หรือเงินที่จะซื้อ 256GB SSD อย่างฉันมี 128GB SSD หรือแล็ปท็อปที่มีน้อยกว่า 500GB เมื่อไม่นานมานี้การใช้พื้นที่ SSD ของฉัน 80% เป็นเพียงเกม มันเป็นเกมเพียง 3-4 เกมที่กินพื้นที่ และในเกมนั้นเองเกือบทุกคนมีแล็ปท็อปและเล่นกับมัน
Ismael Miguel

5
@ ไมค์โอ้มันไม่สำคัญ เมื่อเราพูดถึงขนาดของแอปพลิเคชั่นเราหมายถึงขนาดของไฟล์การติดตั้งที่สามารถดาวน์โหลดได้หรือพื้นที่ทั้งหมดที่แอพพลิเคชั่นติดตั้งบนดิสก์เมื่อติดตั้งแล้ว ซึ่งรวมถึงห้องสมุดสื่อข้อมูลทุกอย่าง และทุกวันนี้เพื่อหลีกเลี่ยงปัญหาความไม่เข้ากันแอพพลิเคชั่นมักจะมาพร้อมกับไลบรารี่ส่วนใหญ่ที่พวกเขาต้องการแทนที่จะหวังว่าไลบรารี่จะได้รับการติดตั้งแล้วและเป็นเวอร์ชั่นที่เหมาะสมเป็นต้นขนาดของไฟล์ปฏิบัติการหลัก ไม่ใช่ผลประโยชน์ใด ๆ หรือผลที่ตามมาใด ๆ
Mike Nakis

3
@IsmaelMiguel สำหรับโปรแกรมเมอร์อาจเป็นไปได้ว่ามีเครื่องเสมือนที่แตกต่างกันคอนเทนเนอร์นักเทียบท่าและอื่น ๆ ไม่มีอะไรดีไปกว่าการขยายระบบป่องทั้งหมด ;-)
cmaster

16

นอกเหนือจากผู้ใช้รายอื่น ๆ เมื่อ 10 ปีที่แล้วจะมีเวอร์ชันแยกต่างหากสำหรับเวอร์ชันที่แปลเป็นภาษาท้องถิ่น / สากล ตอนนี้โดยทั่วไปแล้วกรณีที่โปรแกรมจะรวมการสนับสนุนการแปลเป็นภาษาท้องถิ่นอย่างสมบูรณ์ลงในทุกเวอร์ชันที่วางจำหน่ายซึ่งจะเพิ่มขนาดโปรแกรม


5
ฉันอาจจะผิด แต่ฉันกำลังทำงานภายใต้ภาพลวงตาว่าสตริงเป็นส่วนน้อยที่สุดของปัญหานี้ จริงมีหลายภาษาออกมี แต่ยังคงจำนวนสตริงที่ผู้ใช้เคยเห็นมีจำกัดมาก ท้ายที่สุดหนึ่งในวิธีที่แย่ที่สุดที่จะล้มเหลวในอินเทอร์เฟซผู้ใช้ของคุณคือการรวมข้อความมากเกินไป
cmaster

5
การเพิ่มสิ่งที่ @cmaster กล่าวว่า Firefox โดยเฉพาะไม่ได้รวมการแปลเต็มรูปแบบ (และในขณะที่ฉันกำลังคิดเกี่ยวกับมันและ OpenOffice ก็ไม่มีเช่นกัน)
BenjiWiebe

2
@cmaster Strings เลขที่ แต่วิดีโอและเสียงที่ถูกแปลโดยเฉพาะอย่างยิ่งในบริบทของเกม? IIRC มีเกม 60 GB (GTA V?) โดยที่> 10 GB เป็นไฟล์เสียงที่ถูกแปลเป็นภาษาท้องถิ่นเท่านั้น นั่นเป็นก้อนที่สำคัญ
บ๊อบ

@ บ๊อบถูกต้องฉันไม่ได้คิดเกี่ยวกับเกมพวกเขาดูเหมือนจะเป็นข้อยกเว้นที่ยิ่งใหญ่สำหรับสิ่งที่ฉันเขียน
cmaster

สำหรับแต่ละภาษาตารางสตริงอาจเพิ่ม K ไบต์พิเศษได้ไม่กี่ตัว โดยทั่วไปไอคอนแอปพลิเคชันเพียงอย่างเดียวจะแคระขนาดทั้งหมดของเนื้อหาสตริงทั้งหมด (ข้อยกเว้นที่เป็นไปได้คือแอปพลิเคชันที่มีพจนานุกรมฝังอยู่)
andyb

13

เหตุผลหนึ่งคือการพึ่งพา โปรแกรมที่มีฟังก์ชั่นการใช้งานที่หลากหลายและรูปลักษณ์ที่ดีนั้นจำเป็นต้องทำสิ่งต่างๆมากมายเช่นการเข้ารหัสการตรวจสอบการสะกดการทำงานกับ XML และ JSON การแก้ไขข้อความและสิ่งอื่น ๆ อีกมากมาย พวกเขาจะมาจากไหน บางทีคุณอาจม้วนตัวเองและทำให้พวกมันเล็กที่สุดเท่าที่จะทำได้ เป็นไปได้มากว่าคุณจะใช้ส่วนประกอบของบุคคลที่สาม (อาจเป็นโอเพ่นซอร์สที่ได้รับอนุญาตของ MIT) ซึ่งมีฟังก์ชั่นมากมายที่คุณไม่จำเป็นต้องใช้ แต่เมื่อคุณต้องการฟังก์ชั่นเดียวจากองค์ประกอบของบุคคลที่สาม ดังนั้นคุณจึงเพิ่มการพึ่งพามากขึ้นเรื่อย ๆ และเมื่อพวกเขาพัฒนาตัวเองและพัฒนาโปรแกรมของคุณขึ้นอยู่กับว่าพวกเขาเติบโตขึ้นเช่นกัน


ฉันอยากรู้ว่าทำไมมันมีสอง downvotes ข้ามคืน
sharptooth

6
ฉันไม่ได้ แต่ฉันไม่คิดว่านี่จะตอบคำถามในเชิงลึกที่เพียงพอ มันก็แค่บอกว่า "ซอฟต์แวร์ใหญ่ขึ้นเพราะมันทำอะไรมากกว่านี้" และคุณจะเห็นจากคำตอบอื่น ๆ ว่ามันมีอะไรมากกว่านั้น
การแข่งขัน Lightness ใน Orbit

1
ปัจจัยที่เกี่ยวข้องคือในระบบที่ใช้การเชื่อมโยงแบบคงที่ตัวเชื่อมโยงอาจจำเป็นต้องดึงรหัสซึ่งใช้จริง [ตัวเชื่อมโยงบางตัวมักจะดึงทุกอย่าง แต่สิ่งที่ดีกว่าคือพยายามเลือก] เมื่อใช้การเชื่อมโยงแบบไดนามิกโดยเฉพาะอย่างยิ่งถ้าสามารถแชร์โมดูลแม้ว่ารหัสแรกที่ติดตั้งโมดูลต้องการเพียงหนึ่งฟังก์ชั่นจากมันก็ไม่มีทางรู้ว่าฟังก์ชั่นใดที่อาจต้องการโดยรหัสอื่นที่ต้องการแชร์โมดูล
supercat

@ sharptooth ฉันไม่แปลกใจอีกแล้ว ในขณะที่ในกรณีส่วนใหญ่ระบบการทำงานฉันยังเห็นผิดอย่างน่ากลัวคำตอบที่ได้รับการหัก upvoted อย่างบ้าคลั่งและเป็นที่ยอมรับในขณะที่คนที่ถูกต้องในการให้อภัย downvoted ทั้งหมดบ่อยเกินไป ...
ไบรอัน Knoblauch

10

ในขณะที่กราฟิก / การใช้งานเป็นปัจจัยที่มีส่วนช่วยแน่นอนมีหลายอย่างที่น่ากลัวนั่นคือไลบรารี / โค้ดที่คอมไพล์เกิน

ตัวอย่างของรหัสขนาดเล็กที่ยังคงสามารถ: MenuetOS ระบบปฏิบัติการ 64- ​​บิตเต็มไปด้วยแอพที่ทรงพลังที่เหมาะกับฟล็อปปี้ดิสก์แผ่นเดียว

ตัวอย่างของรหัสขนาดใหญ่ที่ไม่มีเหตุผลชัดเจน: ฉันส่งข้อความอย่างง่าย "Hello, World!" ใน Ada เมื่อเร็ว ๆ นี้ ไฟล์ที่คอมไพล์แล้วนั้นมีค่ามากกว่า 1 MiB! ความสามารถในการเรียกใช้แอสเซมบลีที่เหมือนกันเป็นเพียง KiB หรือ 2 (และส่วนใหญ่ของมันคือโอเวอร์เฮดที่สามารถเรียกใช้งานได้รหัสการทำงานจริงคือสิบไบต์)


3
ฟลอปปีดิสก์คืออะไร ;)
500 - ข้อผิดพลาดเซิร์ฟเวอร์ภายใน

@ 500-InternalServerError Ada คืออะไร : D
BenjiWiebe

3
สำหรับผู้มาใหม่ฟลอปปี้ดิสก์ประมาณ 1.4 MiB
Sarge Borsch

3
ฉันได้เห็น Ada executables ทันสมัยต่ำกว่า 200 ไบต์ แต่ถ้าคอมไพเลอร์ของคุณดึงสิ่งต่าง ๆ เช่นรันไทม์ tasking เต็มโดยค่าเริ่มต้นไม่ว่าคุณจะใช้งานหรือไม่ก็ตามคาดว่า 1MB หรือมากกว่านั้น และมักจะไม่คุ้มกับความยุ่งยากในการลอก
Brian Drummond

@BrianDrummond ดูเหมือนว่ารันไทม์เส็งเคร็งจริงๆหรือเส็งเคร็ง runtime และห้องสมุดและลิงเกอร์ ในวิดีโอการฝึกอบรมที่ฉันเห็นเมื่อหลายปีก่อนฌอง Ichbiah และคนอื่น ๆ กล่าวว่า Ada runtime ทั่วไป (สำหรับภาษาต้นฉบับ) จะประมาณ 4K ด้วยความอยากรู้ฉันได้ตรวจสอบสิ่งนี้กับแพ็คเกจรันไทม์ TI 320C30 ที่เราใช้อยู่ เขาพูดถูกเรื่องเงิน
John R. Strohm

7

เป็นเรื่องจริงที่จะต้องสร้างซอฟต์แวร์เพื่อให้พอดีกับสองสิ่ง: ผู้ใช้และฮาร์ดแวร์ที่มีอยู่ โปรแกรมเหมาะสำหรับวัตถุประสงค์หากทำในสิ่งที่ผู้ใช้ต้องการในเวลาที่เหมาะสมกับฮาร์ดแวร์เมื่อมีการกำจัดของผู้ใช้ เอ่อ แต่เมื่อฮาร์ดแวร์ปรับปรุงในมิติที่วัดได้ทั้งหมดโดยทั่วไปจำนวนของโปรแกรมที่ไม่ต่อเนื่องซึ่งย้ายจากที่ไม่เหมาะไปสู่การเพิ่มขึ้น - พื้นที่การออกแบบมีขนาดใหญ่ขึ้น:

  • ภาษาระดับที่สูงขึ้นทำให้สามารถแสดงความคิดเห็นด้วยรหัสและเวลาน้อยลงกว่า แต่ก่อน ความซับซ้อนที่ลดลงในทางกลับกันทำให้สามารถแสดงความคิดเห็นที่ซับซ้อนมากขึ้น
  • การรวมข้อมูลเพิ่มเติมกับแอปพลิเคชันสามารถทำให้สามารถใช้งานได้ทันที ตัวอย่างเช่นอาจไม่นานก่อนที่จะตรวจสอบการสะกดคำแอปพลิเคชันที่มาพร้อมกับภาษาทุกภาษาที่มนุษย์รู้จักซึ่งเป็นเพียงไม่กี่กิกะไบต์หลังจากทั้งหมด
  • การแลกเปลี่ยนฮาร์ดแวร์ช่วยให้นักพัฒนาและผู้ใช้มีทางเลือกมากขึ้นในการใช้ทรัพยากรที่พวกเขาสนใจ ดูตัวอย่าง FLAC / OGG กับ WAV, SVG และ PNG, ดัชนีฐานข้อมูล
  • อินเทอร์เฟซที่มีมนุษยธรรมมักจะแลกเปลี่ยนสิ่งที่เคยเป็นฮาร์ดแวร์จำนวนมากเพื่อการใช้งาน Anti-aliasing, ความละเอียดสูง, การรีเฟรชที่รวดเร็วและการปัดระหว่างจำนวนที่จะติดตั้งแบบแยกทั้งหมดทำให้ดูสมจริงยิ่งขึ้น

6

นี่เป็นเรื่องจริงเกี่ยวกับแอปพลิเคชัน Android สี่ปีที่แล้วแอพง่ายใช้พื้นที่ประมาณ 2-5 เมกะไบต์ ทุกวันนี้แอพง่ายใช้พื้นที่ประมาณ 10-20 เมกะไบต์

ยิ่งมีพื้นที่มากเท่าใดขนาดแอปก็จะยิ่งใหญ่ขึ้นเท่านั้น

ฉันคิดว่ามีสองเหตุผลหลักสำหรับ Android:

  • Google ขยายขอบเขตของ Android เพิ่มฟังก์ชันใหม่ ๆ มากมาย

  • นักพัฒนาไม่สนใจอีกต่อไป ภาพรวมอยู่ในความละเอียดที่สูงขึ้น (แน่นอนว่าความละเอียดหน้าจอสมาร์ทโฟนเพิ่มขึ้น) ห้องสมุดของบุคคลที่สามจะถูกรวมเข้าด้วย


1
สัญลักษณ์แสดงหัวข้อสุดท้ายนั้นถูกต้อง
การแข่งขัน Lightness ใน Orbit

3
ฉันได้สร้างแอพ android ทั้งหมดหนึ่งแอพและ APK คือ 0.05MB จากนั้นอีกครั้งมันไม่ได้ทำอะไรมาก ฉันยังคงสงสัยว่าทำไมแอปนาฬิกาจับเวลา (ที่มีฟังก์ชั่นการใช้งานคล้ายกับของฉันแม้ว่าจะแตกต่างอย่างสิ้นเชิง) ใช้เวลาหลาย MB
immibis

5
สัญลักษณ์ล่าสุดเป็นธรรมนักพัฒนาทำดูแล เราเพียง แต่ต้องจัดลำดับความสำคัญต่าง ๆ และทำให้แอปนั้นใหญ่ขึ้นเล็กน้อย
NPSF3000

นอกจากนี้ยังไม่ได้ช่วยให้ SDK (ในเวลานั้น) ยืนยันในการเพิ่มไลบรารี 5 + MB ในแอป 0.05MB ของฉันที่ฉันไม่ต้องการและฉันต้องจำไว้ว่าต้องลบมันออกก่อนการวางจำหน่าย
immibis

4

ส่วนใหญ่จะลดลงตามเวลาของนักพัฒนาและค่าใช้จ่ายของเวลานั้น ย้อนกลับไปในสมัยที่ Visual Basic มาถึงที่เกิดเหตุเป็นครั้งแรกมันเป็นการแข่งขันกับ C / C ++ และความพ่ายแพ้ครั้งใหญ่คือคุณสามารถเขียน 'Hello World' ใน ANSI C สำหรับ Windows ได้ใน 15K ปัญหาเกี่ยวกับ VB คือคุณมี Albatross ของ 300K runtime library เสมอ

ตอนนี้คุณสามารถเพิ่มขนาดโปรแกรม VB ของคุณได้ถึง 10 เท่าและยังคงเป็นเพียงไม่กี่ K เท่านั้น แต่ขนาดของโปรแกรม C / C ++ ของคุณเพิ่มขึ้นถึง 10 เท่าและคุณกำลังมองหาการพัฒนาที่เพิ่มขึ้นไม่กี่เดือน

ในที่สุดการขยายตัวของแอปพลิเคชั่นของคุณจะเป็นราคาขนาดเล็กที่จ่ายสำหรับการก้าวกระโดดครั้งใหญ่ในการพัฒนาการพัฒนาการลดราคาและความสามารถมากมายที่ไม่เคยเกิดขึ้นมาก่อนในยุคของการพัฒนาด้วยมือ เมื่อโปรแกรมมีขนาดเล็กและรวดเร็ว แต่ก็อ่อนแอไม่สามารถทำงานร่วมกันได้ซึ่งอยู่ภายใต้คุณลักษณะและมีค่าใช้จ่ายสูงในการพัฒนา


2
โพสต์นี้ค่อนข้างอ่านยาก (ผนังข้อความ) คุณจะช่วยแก้ไขมันให้เป็นรูปร่างที่ดีขึ้นได้ไหม
ริ้น

1
"10x ขนาด" ของ Hello World ต้องใช้ "การพัฒนาต่อไปอีกหลายเดือน"? การแปรงฟันสิบครั้งเกี่ยวข้องกับการยืนอยู่หน้ากระจกไม่หยุดพักเป็นเวลาหนึ่งเดือนหรือไม่?
bcrist

การแปรงฟัน x ครั้งเป็นฟังก์ชันเชิงเส้นของ x แต่การเขียนโปรแกรมโดยทั่วไปไม่ใช่ฟังก์ชันเชิงเส้น หากคุณส่งรหัสทุกบรรทัดโดยใช้ฟังก์ชั่นภาษาระดับต่ำสุดคุณจะได้รับรหัสที่รวดเร็วและเล็ก แต่มีค่าใช้จ่ายต่อระดับความซับซ้อนที่สูงขึ้น ภาษาระดับที่สูงขึ้นขยายตัวมากขึ้น แต่รักษาต้นทุนให้ใกล้เคียงกับฟังก์ชันเชิงเส้นของความซับซ้อน
andyb

2

ตามเวลาความต้องการของผู้ใช้มีการพัฒนาและความต้องการมากขึ้นดังนั้นผู้ขาย / ผู้เขียนโปรแกรมที่แตกต่างกันถูกบังคับให้ตอบสนองความต้องการเหล่านั้นในชื่อของการแข่งขัน

แต่การตอบสนองความต้องการใหม่หมายถึงการเพิ่มรหัสใหม่บ่อยครั้ง รหัสใหม่หมายถึงช่องโหว่ใหม่ที่จะแก้ไข การแก้ไขช่องโหว่ใหม่อาจเพิ่มรหัสหรือเปิดประตูสู่ช่องโหว่ใหม่

แต่ละคุณสมบัติที่เพิ่มเข้ามาเพื่อสนองความต้องการของผู้ใช้อาจต้องการพลังประมวลผลที่เพิ่มขึ้นสำหรับความเร็ว (เราทุกคนบ่นเกี่ยวกับความเร็วของเบราว์เซอร์นี้หรือว่า) ทรัพยากรกราฟิกใหม่สำหรับเอฟเฟกต์ภาพที่ดีกว่า ... ฯลฯ

ทั้งหมดนี้หมายถึงการเพิ่มแอปพลิเคชันเลเยอร์ใหม่ (รหัส) ความปลอดภัยและบางครั้งฮาร์ดแวร์


0

ขนาดจำนวนมากมาจากห้องสมุดในตัว แอพพลิเคชั่นมากมายวันนี้สร้างขึ้นโดยใช้อิเล็กตรอนซึ่งรวมกับแอปพลิเคชันจำนวนมาก หากคุณติดตั้งแอปพลิเคชั่นบน Linux มักจะมีขนาดเล็กกว่าเพราะแอปพลิเคชั่นส่วนใหญ่ติดตั้งผ่านไลบรารี่ที่ใช้ร่วมกันซึ่งโปรแกรมอื่นกำลังใช้งานอยู่


-1

เมื่อสร้างซอฟต์แวร์หากคุณต้องการฟังก์ชัน A คุณจะต้องนำเข้าโมดูล A * A * สามารถแก้ปัญหา A ได้ แต่ A * สามารถแก้ปัญหาได้มากกว่า A และ A * อาจมีขนาดใหญ่ โมดูลขนาดใหญ่ทั้งหมดส่งผลให้ซอฟต์แวร์มีขนาดใหญ่

อาจไม่ใช่กรณีเดียวกัน แต่มีลักษณะดังนี้: หากคุณต้องการพิมพ์ "hello world" บนคอนโซลโดยใช้ Java คุณต้องติดตั้ง JRE (> 60MB)

หากตัวอย่างของ Java ไม่ดีให้ลองทำสิ่งนี้: หากซอฟต์แวร์ที่จำเป็นในการเข้าสู่ระบบไฟล์นั้นอาจใช้โมดูลบันทึกซึ่งสามารถสร้างบันทึกไปยังฐานข้อมูลผ่านเครือข่ายและคุณสมบัติอื่น ๆ ได้ แต่ฟังก์ชั่นไม่เคยใช้ โครงการ.


ทำไมต้องมีการโหวต 5 ครั้งและไม่ใช่ความคิดเห็นเดียวที่อธิบายว่าทำไม
Kromster

1
@KromStern codeส่วนแรกอย่างมากคัดสรรมากกว่าวิธีการทำงานห้องสมุดและไม่ให้ในทางที่ไม่ชัดเจนมากกับการใช้งานที่ไม่สอดคล้องกันของ ฉันขอยืนยันว่ามันไม่ได้ตอบคำถามเลย ส่วนที่สองใช้ Java เป็นตัวอย่าง (แต่พยายามที่จะอ้างว่า JRE ควรได้รับการพิจารณาว่าเป็นส่วนหนึ่งของการเติบโตของขนาดแอปพลิเคชัน - ซึ่งพลาดประเด็นของคำถามอีกครั้งและไม่ใช่ตัวอย่างที่ยุติธรรมเลยและยังคงขยายเวลาต่อไป ความเข้าใจผิดของ Java) โดยรวมแล้วมันผิดหรือทำซ้ำคะแนนในคำตอบก่อนหน้าเขียนได้ดีกว่า

1
ตัวอย่างของคุณของการเข้าสู่ระบบไปยังเครือข่ายหรือไฟล์ไม่ดีอย่างหนึ่งอย่างใดอย่างหนึ่ง - เพราะจากมุมมองของรหัสทั้งสองไฟล์และการจัดการตรงในลักษณะเดียวกัน (ความแตกต่างระหว่างไฟล์และเครือข่ายจะถูกจัดการโดยระบบปฏิบัติการ) ฉันยังไม่ได้เห็นกรอบการบันทึกที่มี "บันทึกไปยังฐานข้อมูล" ซึ่งเป็นส่วนหนึ่งของฟังก์ชั่นหลักของมันเพราะมันจะซับซ้อนโดย Oracle กับ MySQL และ SQL Server กับ Sql Server กับ Postgres vs ... ไดรเวอร์และความแตกต่างทางวิภาษ

@ user40980 ความแตกต่างระหว่างไฟล์และเครือข่ายไม่ได้รับการจัดการโดยระบบปฏิบัติการ พวกเขาต้องการการเรียกใช้ระบบปฏิบัติการที่แตกต่างกันเพื่อเชื่อมต่อและเขียน การเข้าถึงฐานข้อมูลถูกจัดการผ่านเลเยอร์ความเป็นอิสระของฐานข้อมูลเช่น JDBC หรือ libdbi (ซึ่งในทางกลับกันอาจดึงไดรเวอร์สำหรับทั้งหมดที่ได้รับการสนับสนุนฐานข้อมูลที่แตกต่างกัน!)
immibis

-2

ฉันอ่านเกี่ยวกับกฎบางอย่างที่โปรแกรมจะใช้หน่วยความจำที่มีอยู่ทั้งหมดไม่ว่าจะเป็นเท่าใด แต่ทำไม?

ไม่เป็นความจริงเลย ระบบจะไม่ปล่อยหน่วยความจำที่ใช้ไปจนกว่าระบบปฏิบัติการจะอยู่ภายใต้ความกดดันของหน่วยความจำ นี่คือการปรับปรุงประสิทธิภาพ หากคุณกำลังเรียกดูหน้าเว็บที่มีภาพอยู่แสดงว่าคุณนำทางไป คุณอาจนำทางกลับดังนั้นต้องการภาพอีกครั้ง หากระบบปฏิบัติการมี RAM คุณจะไม่ต้องล้างหน่วยความจำจนกว่าคุณจะแน่ใจว่าคุณไม่ต้องการมันอีก

การล้างหน่วยความจำทันทีจะทำให้รอบการทำงานของ CPU และแบนด์วิดท์หน่วยความจำห่างจากผู้ใช้เมื่อพวกเขาน่าจะต้องการให้หน้าเว็บตอบสนองสูงปรากฏบนหน้าจอ

ระบบปฏิบัติการจะใช้หน่วยความจำของแอปพลิเคชันที่มีอยู่ทั้งหมดซึ่งส่วนใหญ่ใช้สำหรับแคชระบบไฟล์

การจัดการหน่วยความจำเป็นปัญหาที่ยาก แต่มีคนที่ฉลาดมากทำงานอยู่ตลอดเวลา ไม่มีสิ่งใดสูญเปล่าไปกับวัตถุประสงค์และเป้าหมายหลักคือการจัดหาคอมพิวเตอร์ที่ตอบสนองคุณอย่างดีให้กับคุณ


3
นั่นไม่ได้เป็นสิ่งที่บอกว่าเป็นเรื่องเกี่ยวกับ หน่วยความจำเสมือนและคอลเลกชันขยะเพิ่งถูกประดิษฐ์ขึ้นเมื่อเขียนคำพูดนั้นและพวกเขาก็ไม่ได้แพร่หลาย
Jörg W Mittag

-2

อาจเป็นความจริงที่ว่าโปรแกรมมีแนวโน้มที่จะขยายเพื่อเติมเต็มพื้นที่ว่างคล้ายกับปรากฏการณ์ชานเมืองที่คุณเพิ่มเลนใหม่ให้กับถนนไฮเวย์ที่ถูกปิดกั้นด้วยตะแกรงและมีการสำรองข้อมูลภายในไม่กี่ปี

แต่ถ้าคุณมองเข้าไปคุณอาจพบว่าโปรแกรมพวกเขาทำสิ่งต่าง ๆ มากขึ้น ยกตัวอย่างเช่นเบราว์เซอร์ที่เรียกใช้กราฟิกที่ชื่นชอบมีเครื่องมือสำหรับนักพัฒนาที่ลื่นไหลซึ่งไม่ได้มีอยู่เมื่อสองสามปีก่อนและยังเชื่อมโยงไปยังห้องสมุดหลายแห่งซึ่งบางครั้งใช้รหัสเพียงบางส่วนเท่านั้น ดังนั้นในขณะที่โปรแกรมอาจเพิ่มขนาดเพื่อเติมหน่วยความจำที่มีอยู่บางส่วนอาจเป็นเหตุผลที่ถูกกฎหมาย


2
นี้ไม่ได้ดูเหมือนจะนำเสนออะไรที่สำคัญกว่าจุดทำและอธิบายในก่อน 13 คำตอบ
ริ้น

-3

ไลบรารีที่สร้างขึ้นบนวัตถุที่ไม่ได้รับการปรับให้เหมาะสมต้องใช้หน่วยความจำในการโหลดติดตั้งและใช้งานคอมพิวเตอร์มากขึ้น รหัสวัตถุสำหรับส่วนขยายมากที่สุด

เพียงแค่ดำเนินการตามรหัส C ++ มาตรฐานที่ทำงานอยู่เพื่อดูการเรียกวัตถุ assert () ed ทั้งหมดเพื่อให้แน่ใจว่าเป็นวัตถุที่ถูกต้อง เมื่อคุณออกแบบเลเยอร์ตามชั้นของวัตถุที่ห่อหุ้มวัตถุชั้นล่างนั้นจะบวมและทึบแสง โปรแกรมเมอร์ขี้เกียจและใช้เวลากับวัตถุมากขึ้นเพราะเร็วกว่าการออกแบบสิ่งที่ จำกัด การทำงานที่จำเป็น มันง่ายจริงๆ

พิจารณาขนาดของเคอร์เนล Linux C เพียงเคอร์เนลเทียบกับขนาดของแอปพลิเคชันตามความต้องการ เคอร์เนลสามารถเรียกใช้ทั้งเครื่องได้ แต่มันไม่ได้สร้างขึ้นเร็วเท่ากับแอพพลิเคชั่นมันต้องใช้เวลาอย่างช้า ๆ เพื่อทำให้การใช้งานที่ดีที่สุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.